远程推送哪些事
一、什么叫做远程推送通知(what)
1 2 | 顾名思义,就是从远程服务器推送给客户端的通知(需要联网) 远程推送服务,又称为APNs(Apple Push Notification Services) |
二、为什么需要远程推送通知?(why)
1 2 | 传统获取数据的局限性:只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容 远程推送通知可以解决以上问题:不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知 |
三、使用远程推送(how)
3.1什么是长连接
1 2 3 4 5 | 1、长连接:只要联网了,就一直建立连接。 2、长连接的作用: 时间校准、系统升级、查找我的iPhone。 3、长连接的好处: 数据传输速度快、数据保持最新状态。 |
3.2推送调试工具
1 2 3 4 5 6 | PushMeBaby 工具 使用方法:1.工程中导入推送证证书。 2.更改 ApplicationDelegate 中init方法中的对应值,修改deviceToken及推 送的内容。 3.运行,点击推送Push。 4.推送成功程序右上角就会相应数字的角标。 |
3.3收到推送通知收到的回调
1 2 3 4 | (1)前台和后台的推送回调这个代理方法(退出的设置在didFinishLaunchingWithOptions方法中) - ( void )application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; (2)前台、后台和退出的推送都会调用这个代理方法(iOS 7之后可用) - ( void )application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:( void (^)(UIBackgroundFetchResult result))completionHandler; |
3.4远程推送通知原理
1 2 3 | 远程推送通知必须要真机调试,因为真机才有UDID,才能够生成deviceToken. 应用的Bundle ID必须在苹果开发者中心创建,并且生成真机调试证书(.cer文件或.p12文件),推送通知调试证书(.cer文件或.p12文件)和profile描述文件(.mobileprovision文件). 如果是要打包测试和发布,必须生成打包测试推送通知证书和发布推送通知证书. |
3.5远程推送客户端流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 1、需要配置真机调试证书, 推送测试证书 2、请求苹果获得deviceToken 想苹果请求deviceToken iOS 8.0之后必须请求授权 获取当前设备的UDID, 以及, app bundle id , 向苹果服务器发送请求, 获取deviceToken // 远程推送APNs必须使用真机调试,并且必须使用付费的开发者账号配置好对应的bundle ID和真机推送证书 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 向苹果请求DeviceToken [self requestDeviceToken]; return YES; } // ------------------------------------------------------------------------ // 向苹果请求DeviceToken - ( void )requestDeviceToken { // iOS 8.0之后必须请求授权 if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { // 1.请求授权 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:setting]; // 2.自动获取当前设备的UDID, 以及, app bundle id , 向苹果服务器发送请求, 获取deviceToken [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { // iOS 8.0之前不用请求授权 // 2.自动获取当前设备的UDID, 以及, app bundle id , 向苹果服务器发送请求, 获取deviceToken [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert]; } } |
3.监听APNs苹果服务器响应的deviceToken(目的是为了配置PushMeBaby中的DeviceToken)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // ---------------------------------------------------------------------------- // 当我们调用对应的api, 发送请求, 获取deviceToken , 苹果服务器响应之后, 就会调用这个方法, 把deviceToken 传给我们 - ( void )application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // 获取到DeviceToken时,将deviceToken值写入到第三方APNs推送服务器PushMeBaby(使用Socket编写的调试服务器),可以在GitHub上下载 NSLog( @"%@" , deviceToken); } // ---------------------------------------------------------------------------- // 当获取DeviceToken失败是会调用该方法 - ( void )application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog( @"注册失败: %@" , error.localizedDescription); } |
4.客户端监听远程推送通知的点击
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | / ---------------------------------------------------------------------------- // 监听远程推送通知点击(优先级较低),接收到通知,用户点击进入才会调用该方法 /** 当接收到推送通知之后, 并且满足一下条件 app 在前台时 ,会调用该方法 app 从后台进入到前台 (App一开始在后台, app 锁屏),点击通知会调用该方法 app 完全退出 如果app 完全退出, 这时候,如果用户点击通知, 打开APP , 不会调用这个方法 */ - ( void )application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog( @"接收到远程推送通知" ); // UISwitch *sw = [[UISwitch alloc] init]; // [self.window.rootViewController.view addSubview:sw]; } // ---------------------------------------------------------------------------- // 监听远程推送通知点击(优先级较高),一接收到通知就会立即调用该方法 /** 当接收到推送通知之后, 并且满足一下条件 当我们实现, 这个方法时, 上面一个方法不再执行 计时APP 完全退出, 也会调用这个方法 completionHandler : 统计我们处理的时间, 耗电量, 刷新预览图片 效果: 当用户收到通知之后, 即使没有点击也会调用这个方法 条件: 1 .需要勾选后台模式 remote notification,在后台 2. 必须保证发送的推送通知格式, 包括 "content-available":"随便传" 3. 执行completionHandler 回调代码块 {"aps" : { "alert" : "This is some fancy message.", "badge":1, "content-available":"随便传" } } */ - ( void )application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:( void (^)(UIBackgroundFetchResult))completionHandler { NSLog( @"fetchCompletionHandler: 接收到远程推送通知" ); UISwitch *sw = [[UISwitch alloc] init]; [self.window.rootViewController.view addSubview:sw]; completionHandler(UIBackgroundFetchResultNewData); } @end |
3.6常见错误
二、极光推送配置设置
1. 首先进入苹果开发者中心,创建证书,包括,调试(真机测试)证书(开发和发布),这两个证书将用在xcode中,
2.再创建推送证书,需要导出钥匙串文件.cer,也是发布推送证书和开发推送证书,并且在push Notifications 勾选,表示允许推送。
3.需要创建appid,创建的时候需要设置xcode的bundle ID(bundle id 又包括完整的如,www.xxx.dddd,带*号的如,www.xxx.*,一般还是用完整的),
4.证书都创建好了以后,创建配置文件,也是包括开发和发布的。
5.导出双击下载好的证书,还是导出p12文件,创建极光推送账号,上传开发和生产环境的p12文件。
详情请看:http://www.tuicool.com/articles/jEvqQvr 史上最全的远程推送之极光推送
1 2 3 4 5 6 7 | 极光推送的集成 JPush iOS SDK 集成指南 链接: http: //docs.jpush.io/guideline/ios_guide/ JPush iOS SDK 教程 链接: http: //docs.jpush.io/client/ios_tutorials/ JPush SDK下载 链接: https: //www.jpush.cn/common/products |
将来的自己,会感谢现在不放弃的自己!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现