Swift使用极光推送JPush的Demo

SDK集成实战指南:从选型到避坑的完整开发经验总结 软件开发工具包(SDK)作为现代软件开发的基石,本质上是预制的功能模块集合,旨在提升开发效率、降低重复劳动。其核心原理在于封装复杂底层逻辑,提供标准化接口,使开发者能聚焦业务实现而非基础设施。从技术价值看,优秀的SDK能显著加速产品迭代、保障功能稳定性,并促进技术生态标准化。在应用场景上,无论是移动端的推送与支付、前端的图表与编辑器,还是后端的云服务调用与数据库连接,SDK都扮演着关键角色。然而,实践中常遇到**环境配置地狱**和**依赖冲突**等挑战,例如Android SDK的安装网络问题或Gradle 阅读详情

JPushDemo

github项目地址
需要导入JPush框架,可以使用cocoapod导入,也可以手动导入

环境配置

配置环境可以参考极光推送的官方文档:

iOS 证书设置指南

iOS SDK 集成指南

iOS SDK API

使用说明

待环境配置好了之后,就可以进入极光推送开始推送消息了

极光推送首页

推送使用示例如下:

发送通知

这里写图片描述

发送自定义消息

这里写图片描述

代码转换

因为极光推送文档里的环境配置使用的是OC代码,如果对OC不熟悉的话,可以参考以下翻译成Swift的代码,如果你是OC大牛,那就忽略这里

添加头文件

因为极光推送的框架JPush是OC写的框架,Swift不能直接使用,所以需要创建一个桥接文件,会创建桥接文件的直接复制代码即可,不会创建桥接文件的,并且工程下没有OC文件(.m文件的)可以直接File->New->File->Objective-C File,然后任意输入一个文件名,这时会提示你是否自动创建桥接文件,选择是,就会创建一个桥接文件了,然后我们把下面的代码复制到xxx-Bridging-Header.h文件中

// 引入JPush功能所需头文件
#import "JPUSHService.h"
// iOS10注册APNs所需头文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// 如果需要使用idfa功能所需要引入的头文件(可选)
#import <AdSupport/AdSupport.h>

添加Delegate

为AppDelegate添加Delegate。

参考代码:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, JPUSHRegisterDelegate {

}

添加初始化代码

添加初始化APNs代码

请将以下代码添加到func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

let entity = JPUSHRegisterEntity()
entity.types = 1 << 0 | 1 << 1 | 1 << 2
JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self)

添加初始化JPush代码

请将以下代码添加到func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

let advertisingId = ASIdentifierManager.shared().advertisingIdentifier.uuidString
JPUSHService.setup(withOption: launchOptions, appKey: "a8cc62546a2407102cf484b6", channel: "App Store", apsForProduction: false, advertisingIdentifier: advertisingId)

(参数说明请看文档)

注册APNs成功并上报DeviceToken

请在AppDelegate.swift实现该回调方法并添加回调方法中的代码

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    //注册 DeviceToken
    JPUSHService.registerDeviceToken(deviceToken)
}

实现注册APNs失败接口(可选)

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    func application(_ application: UIApplication,
                     didFailToRegisterForRemoteNotificationsWithError error: Error) {
        //可选
        NSLog("did Fail To Register For Remote Notifications With Error: \(error)")
    }
}

添加处理APNs通知回调方法

请在AppDelegate.swift实现该回调方法并添加回调方法中的代码

// MARK: JPUSHRegisterDelegate
// iOS 10 Support
func jpushNotificationCenter(_ center: UNUserNotificationCenter!, willPresent notification: UNNotification!, withCompletionHandler completionHandler: ((Int) -> Void)!) {
    let userInfo = notification.request.content.userInfo
    if notification.request.trigger is UNPushNotificationTrigger {
        JPUSHService.handleRemoteNotification(userInfo)
    }
    // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
    completionHandler(Int(UNNotificationPresentationOptions.alert.rawValue))
}

// iOS 10 Support
func jpushNotificationCenter(_ center: UNUserNotificationCenter!, didReceive response: UNNotificationResponse!, withCompletionHandler completionHandler: (() -> Void)!) {
    let userInfo = response.notification.request.content.userInfo
    if response.notification.request.trigger is UNPushNotificationTrigger {
        JPUSHService.handleRemoteNotification(userInfo)
    }
    // 系统要求执行这个方法
    completionHandler()
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    JPUSHService.handleRemoteNotification(userInfo)
    completionHandler(UIBackgroundFetchResult.newData)
}

添加处理JPush自定义消息回调方法

在iOS SDK集成指南中并没有直接给出处理JPush自定义消息的回调方法,需要你自己到API中去寻找,这里,我直接把它抽出来写在下面

功能说明

1、只有在前端运行的时候才能收到自定义消息的推送。

2、从jpush服务器获取用户推送的自定义消息内容和标题以及附加字段等。

实现方法

请将以下代码添加到func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

NotificationCenter.default.addObserver(self, selector: #selector(networkDidReceiveMessage(notification:)), name: NSNotification.Name.jpfNetworkDidReceiveMessage, object: nil)

实现回调方法 networkDidReceiveMessage

@objc func networkDidReceiveMessage(notification: Notification) {
    let userInfo = notification.userInfo
    if let extras = userInfo?["extras"] as? Dictionary<String, String> {
        NSLog("extras: \(extras)")
    }
    // 将自定义消息的内容转换成本地推送
    if let con = userInfo?["content"] as? String {
        //设置推送内容
        let content = UNMutableNotificationContent()
        content.body = con

        //设置通知触发器
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.01, repeats: false)

        //设置请求标识符
        let requestIdentifier = "com.average.Demo"

        //设置一个通知请求
        let request = UNNotificationRequest(identifier: requestIdentifier,
                                            content: content, trigger: trigger)

        //将通知请求添加到发送中心
        UNUserNotificationCenter.current().add(request) { error in
            if error == nil {
                print("Time Interval Notification scheduled: \(requestIdentifier)")
            }
        }
    }
}

这里我跟官方的处理方式不同,官方的API中,获取到content和extras之后直接打印出来,我这里只输出extras,而将content作为本地推送的消息body推送出去,有关本地推送的相关知识,可以参考这篇博客

Swift - UserNotifications框架使用详解2(发送本地通知)

还有朋友对AppDelegate.swift中的

UNUserNotificationCenter.current()
    .requestAuthorization(options: [.alert, .sound, .badge]) {
        (accepted, error) in
        if !accepted {
            print("用户不允许消息通知。")
        }
}

和ViewController.swift中的

// 判断权限
UNUserNotificationCenter.current().getNotificationSettings {
    settings in
    switch settings.authorizationStatus {
    // 已获取到通知权限
    case .authorized:
        break
    // 还未获取权限
    case .notDetermined:
        //请求授权
        UNUserNotificationCenter.current()
            .requestAuthorization(options: [.alert, .sound, .badge]) {
                (accepted, error) in
                if !accepted {
                    print("用户不允许消息通知。")
                }
        }
    // 用户关闭通知权限
    case .denied:
        DispatchQueue.main.async(execute: { () -> Void in
            let alertController = UIAlertController(title: "消息推送已关闭",
                                                    message: "想要及时获取消息。点击“设置”,开启通知。",
                                                    preferredStyle: .alert)

            let cancelAction = UIAlertAction(title:"取消", style: .cancel, handler:nil)

            let settingsAction = UIAlertAction(title:"设置", style: .default, handler: {
                (action) -> Void in
                let url = URL(string: UIApplicationOpenSettingsURLString)
                if let url = url, UIApplication.shared.canOpenURL(url) {
                    if #available(iOS 10, *) {
                        UIApplication.shared.open(url, options: [:],
                                                  completionHandler: {
                                                    (success) in
                        })
                    } else {
                        UIApplication.shared.openURL(url)
                    }
                }
            })

            alertController.addAction(cancelAction)
            alertController.addAction(settingsAction)

            self.present(alertController, animated: true, completion: nil)
        })
    }
}

感兴趣,想要仔细了解,也可以参考下面这篇博客

Swift - UserNotifications框架使用详解1(基本介绍,权限的申请与判断)

【SDK】极光推送 官方文档 iOS SDK 集成指南 cocoapods集成 # 极光推送 pod 'JPush' 添加头文件 // 引入 JPush 功能所需头文件 #import "JPUSHService.h" // iOS10 注册 APNs 所需头文件 #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif 初始化 - (BOOL)applicat 阅读详情

相关推荐

极光推送Demo:移动设备推送服务入门指南

为了实现有效的推送服务,开发者通常依赖于第三方推送服务提供商,例如Firebase Cloud Messaging (FCM)、Apple Push Notification service (APNs)等。这些服务提供商提供了完整的推送服务解决方案,包括消息的构建、发送和管理等功能。在选择解决方案时,开发者需要考虑其稳定性、易用性、扩展性以及成本等因素。之后的章节将详细介绍SDK的集成与配置流程、消息与通知的区别及应用、用户分群与定向推送技术等内容,以便开发者构建和优化自己的推送服务。

weixin_42600128的博客 1046

jpush推送格式 swift_Swift3.0对接极光JPushNotificationExtensionService送达

极光推送之前有提到过,如有问题可以看:极光推送极光一直在升级,我们也需要一直学习,今天Swift对接一下极光3.1.1,主要说明JPushNotificationExtensionService,送达功能:1、pod/手搬将极光集成到项目里;2、AppDelegate还按照设置以前的设置;3、重要的来了:JPushNotificationExtensionServicea、添加target,不要慌...

weixin_30841011的博客 352

JPushDemo Swift版本 (官方Demo)

官方Demo: https://github.com/jpush/jpush-swift-demo 运行会报错,报错是因为networkDidReceiveMessage方法的notification数据解析报错,可一步步排查 测试只需要把项目里的appKey改成你自己的就可以测试了

Swift - JPush极光推送的使用

Swift - JPush极光推送的使用

weixin_35755389的博客 1521

RoboMaster机甲大师赛备赛:如何用STM32+CAN总线精准控制四个大疆3508电机?

本文详细介绍了在RoboMaster机甲大师赛中,如何利用STM32和CAN总线技术精准控制四台大疆3508电机。从硬件架构设计、多电机ID分配、数据解析到同步控制算法,全面解析了构建高响应、低延迟底盘驱动系统的关键技术,助力参赛队伍提升机器人运动性能。

weixin_28684825的博客 133

延迟相乘叠加求和 DMAS (Field II 仿真代码)

(Delay Multiply and Sum, DMAS)算法,最初是为雷达微波系统设计的,研究者们对 DMAS 波束合成方法进行了修改,并应用超声成像。结果表明,DMAS 波束合成在模拟和实验中的表现都优于传统的延时叠加(Delay and Sum, DAS),这种新方法带来的主要改进是对比度分辨率明显提高(即主瓣和侧瓣更窄),从而增加了动态范围,提高了 B 型超声图像质量。与传统 DAS 相似,DMAS 算法通过对来自超声换能器阵元的信号应用几何计算延迟来聚焦接收到的波束。

weixin_38452364的博客 3083

iOS 集成极光推送 (swift版)

这里写自定义目录标题iOS 集成极光推送 (swift版)1、使用cocoapods安装极光推送SDK2、注册及配置极光推送相关3、使用别名做唯一标识推送到指定用户的设备搞定!!! iOS 集成极光推送 (swift版) 1、使用cocoapods安装极光推送SDK 之前项目使用的是信鸽推送,但是后面不知怎么地,就是收不到推送消息了,安卓,iOS都是,然后就换成了极光; 我用的是cocoapods...

sinat_36206255的博客 3664

有限元法(Finite Element Method,FEM)原理详解

有限元法( FEM )是一种流行的方法,用于数值求解工程和数学建模中出现的微分方程。

车手只需要车和手,压力来自轮胎 7万+

swift 极光推送

极光推送有两种形式:1、通知消息(在手机的通知栏能看见的); 2、推送消息;开发时要注意:后台发的的推送消息还是通知消息以便处理接收消息一、注册let entity = JPUSHRegisterEntity();entity.types = Int(JPAuthorizationOptions.alert.rawValue) | Int(JPAuthorizationOptions.badge....

芷江的博客 1505

小红书图文AI创作:输入主题,一键生成图文(coze工作流教程+获取)

输入主题,工作流一键生成小红书风格图文,30s一条,可批量生成

2301_79384090的博客 2799

WinForm布局

登录模板页面UILoginForm

m0_71541781的博客 470

Swift集成极光推送

今天介绍一下用swift集成极光推送 一、首先到极光推送的官网下载iOS对应的SDK包 SDK下载地址 二、第二步在极光的官网创建账号配置对应的应用信息,推送证书的这些就不介绍了很基本,官网的很详细 配置应用地址 三、第三创建一个工程,导入下载的SDK包,并且导入依赖的库文件

WJ的博客 5371

BES2810_best1702_best1702_ibrt_三者关系深度解析

一颗芯片的三个名字:BES2810、best1702 与 best1702_ibrt 关系深度解析

weixin_42162924的博客 349

jpush推送格式 swift_Jpush 自定义推送声音

前言最近的项目需要自定义推送声音,然而极光的文档,说得模凌两可的,弄来弄去整了一天才搞好这个自定义推送声音,因此记录一下。实现思路极光推送包含有通知与自定义消息两种类型的推送。因此可以发送三种方式的推送:通知自定义消息通知 + 自定义消息要实现自定义推送声音,需要使用第二种方式。代码实现使用自定义消息,在客户端App里需要接受 JPush SDK 的广播:public class MyReceiv...

weixin_33998219的博客 244

pip install mysql出现error: subprocess - exited-with-error的解决方案

本文主要介绍了pip install mysql出现error: subprocess - exited-with-error的解决方案,希望能对使用mysql的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

torch.nn.rnn实现循环神经网络

------------------------------------nn.rnn模型实现。#------------------------------------模型实现。#-----------------------------------训练模型。#-----------------------------------训练模型。#--------------------------------读取数据。实现循环神经网络,并在至少一个数据集上进行实验,从训练时间、预测精度、...

matlab_python22的博客 2971

李洪强iOS之集成极光推送三iOS集成指南

李洪强iOS之集成极光推送三iOS集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后。查看最近更新了解最新的SDK更新情况。使用Xcode 6及以上版本可以使用新版Push SDK,Xcode 5环境下需要运行旧版本SDK(1.7.4) 资源文件 包名为JPush-iOS-SDK-{版本号} lib文件夹:包含头文件 JPUSHService....

aaa1231722的博客 148

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

快速集成极光推送:CoreJPush开源项目推荐

快速集成极光推送:CoreJPush开源项目推荐 在移动应用开发中,推送通知是提升用户参与度和留存率的关键工具。然而,集成推送服务往往涉及复杂的配置和繁琐的代码编写。今天,我们将介绍一个高效、简洁的开源项目——CoreJPush,它能让您在短短3分钟内完成极光推送的集成,极大地简化了开发流程。 项目介绍 CoreJPush是一个专为iOS开发者设计的极光推送集成框架。通过简单的几步配置和几行代码,...

gitblog_00428的博客 509

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS Swift极光推送点击消息推送内容跳转到对应的界面

本人亲测有效!更多交流可以家魏鑫:lixiaowu1129,公重好:iOS过审汇总,一起探讨iOS技术! 假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧。 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情况下。app在前台跳转页面暂时没做过。 杀死app情况 这种情况app是由推送消息唤醒的,app启动就必须触发这个方法: -(BOOL)application:(UIApplication *)applic

Lee坚武的博客 889

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jpush推送格式 swift_iOS(Swift)通过极光推送实现跳转自定义页面

0.接入推送0.创建推送证书、创建极光推送应用这部分不做赘述1.接入iOS SDK在 Siging & Capabilities 中添加 Access WiFi Information 和 PushNotifications同时打开 Remote notifications在Podfile中加入pod 'JCore'pod 'JPush'然后执行 pod install 导入SDK在桥接文...

weixin_39527768的博客 825

Swift-极光推送集成指南 (本人亲测)

1 导入SDK 2 桥文件导入 // 引入JPush功能所需头文件 #import "JPUSHService.h" // iOS10注册APNs所需头文件 #import 3  AppDelegate func registerJPush(launchOptions:[UIApplicationLaunchOptionsKey: Any]?) {

onlychengzhi的博客 3448

java极光推送实例

在用java进行极光推送的时候,需要的一个工具类: 使用的时候,直接调用 sendToRegistrationId 方法,传入参数. package com.mimacx.util;import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang.common.resp.APIRequestException; impo

Carey丶zsh 的博客 2261

jpush推送格式 swift_Swift JPush极光推送通知和自定义消息

在开始之前,首先了解下自定义消息和通知的几点区别。自定义消息和通知的区别收到推送自定义消息时推送通知栏不显示自定义消息推送不经过APNS,所以说跟推送证书没有关系只有app在前台时才能收到自定义消息,未启动或者启动但处于后台时接收不到(解决了不想在app未启动时收到推送消息的问题)SDK初始化Appdelegate文件func application(_ application: UIApplic...

weixin_39687667的博客 579

问题:RuntimeError

问题如下 解决方法 将代码放入main()函数内 def main(): # 报错的代码 if __name__ == 'main': main()

渐醒的思考者 1059

jpush推送格式 swift_swift 极光推送

1、项目配置1.1 导入SDK1.1.1 CocoaPods导入# platform :ios, '9.0'target 'JGPush' douse_frameworks!pod 'JPush'end1.1.2 手动导入在极光官网下载最新SDK,将SDK包解压,在Xcode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含JPUSHS...

weixin_36116139的博客 399

jpush推送格式 swift_Swift3集成极光推送

现在很多程序都开始使用Swift开发了,但是第三方库大多数都是用OC写的,所以我们要使用Swift和OC混编。今天的内容主要讲Swift3.0集成极光推送。1.准备工作集成指南,极光上说的都很清楚,把创建应用和配置工程实现。SDK下载地址。在桥接头文件中添加#import "JPUSHService.h"// iOS10注册APNs所需头文件#ifdef NSFoundationVersionNu...

weixin_39572152的博客 219
上一篇: Swift自定义下拉刷新、上拉加载(CZXRefresh的使用)
下一篇: 字符串表情替换
麻豆_matou
博客等级 码龄1天 41粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值