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

AppleAccount注册之生成sign

根据日志发现:签名来自于AuthKit的-[AKAppleIDServerResourceLoadDelegate signRequest:withCompletionHandler:]的一个block,这个库是放在共享缓存库里的,找到提前准备好的IDA文件,先去找主方法,根据分析IDA,最后找到了实际生成签名的方法:t1。,接受五个参数,context(之前讲的获取到的客户端证书),bytes(待加密的body字节),length(字节长度),以及两个接受结果的参数,直接进这个方法看,

2503_90751938的博客 1006

JLink 添加国产芯片手把手教程(雅特力 + 华大)

拷贝厂商算法文件夹 + 配置 JLinkDevices.xml。雅特力直接复制官方配置,华大按需添加芯片节点,操作一次,永久生效,以后调试 AT32、HC32 再也不用愁找不到型号。这套方法适配全版本 JLink,也是国产 MCU 替代项目的必备技能,看完照着做,新手也能轻松搞定。百度网盘资料分享:通过网盘分享的文件:jink驱动(包括新增芯片型号)链接: https://pan.baidu.com/s/14SLgrPfyof1lglD6VQguAw?pwd=cfuq 提取码: cfuq。

weixin_48867130的博客 710

iOS 集成极光推送 (swift版)

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

sinat_36206255的博客 3664

Python海康摄像头SDK二次开发

摘要:为解决海康威视摄像头RTSP拉流延迟严重的问题,本文提出改用海康私有SDK直接取流的方案。通过下载海康设备网络SDK并调用其Python接口,实现了低延迟的视频流获取。文中详细介绍了SDK配置流程,并提供了优化版的Python代码示例,重点解决回调函数处理、队列缓冲和CPU占用等问题。测试结果表明,该方案显著降低了延迟,同时保持了较高的帧率(30FPS以上)和较低的CPU占用率(约2%)。相较于传统OpenCV+FFmpeg的RTSP方案,海康SDK直接取流在实时性方面具有明显优势。

xiaohouzi112233的博客 2608

swift 极光推送

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

芷江的博客 1505

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2493

Mac上安装虚拟机搭载window系统

用Mac的都知道,很多window用的软件是Mac版本没有的。平时有的还得要求去用那些软件,有几种方式可供大家选择: 1.再买个window本; 2.装双系统; 3.装虚拟机,搭载window系统。 我比较推荐第3条,这样可以在Mac本上做到双开,一边开着mac一边开着window,还能做到同时处理文件,不至于重新启动操作系统,下边是具体实现步骤,其中有几个需要下载的,建议在网速好的时候完...

Coder_Mumu的博客 1万+

Swift集成极光推送

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

WJ的博客 5371

【Linux】软件控制USB重新上电、加载:usbreset、hubpower、uhubctl

使用命令控制USB的供电、复位

郭老二 2186

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

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

weixin_33998219的博客 244

射频微波电路设计【1.4】

AppCAD是一组射频设计工具和计算机应用说明,它使射频工程师能以更快和更容易的方式设计他们的产品。该软件的理 念是为工程师提供一个“个人设计助理”,即功能强大、快速和容易使用的辅助设计工具。该软件包括如下基本功能: ·各种传输线电气参数的分析与计算;·各种匹配电路的分析与计算;·各种有源和无源简单电路的分析与计算;·射频系统指标的计算:增益、噪声系数、三阶交调、信噪比、灵敏度等;·器件可靠性分析。

qq_43416206的博客 2322

控制算法研发工程师(博士)职位深度解析与面试指南

摘要:广东万和新电气股份有限公司招聘控制算法研发工程师(博士),工作地点佛山顺德。职位要求2026届博士学历,电子信息工程或控制科学与工程专业。主要职责包括:1)燃气热水、热泵等系统的电控软件设计与优化;2)开发PID、模糊控制、ADRC、MPC等智能算法,应用于恒温控制、变频调节等场景。重点考察算法研发能力、系统稳定性优化及嵌入式实现经验。该职位提供三年资深工程师培养计划,需具备扎实的控制理论基础和工程实践能力,能够处理非线性系统、多工况自适应等复杂控制问题。

郑伟强dev的专栏 139

李洪强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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

gitblog_00428的博客 509

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

Lee坚武的博客 889

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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
博客等级 码龄10年 41粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值