iOS新老推送代理方法的触发时机

先来说下iOS7到iOS10之间的情况,接收通知只有两个方法

  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

如果写了第二个,第一个则不会被执行,第一个方法在iOS10之后被弃用,第二个方法则用来接受iOS7-9的远程通知和iOS10之后的静默通知,看苹果的描述
苹果关于推送方法的描述

翻译:使用UserNotifications Framework - [UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]或 - [UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]用于用户可见通知, - [UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]用于静默远程通知

下面就只涉及到三个方法了

  1. didReceiveNotificationResponse:withCompletionHandler
  2. willPresentNotification
  3. didReceiveRemoteNotification
  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

iOS7-9之间用来接收通知和iOS10之后用来接受静默通知。静默推送参考
iOS10以后,app在前台或者后台收到通知时触发的方法(如果集成了个推第三方,这个方法也不会触发,而是会走第三方长连接)。
iOS10以后app被杀掉时收到静默通知不会触发。
当content-available=1且app在前台或者后台时不会在通知中心显示通知),可用来做静默推送进行后台数据下载或者刷新UI等操作,需要打开app后台模式。支持iOS7以上。
关于静默推送(a) 增加content-available字段,并设成1 。(b) alert字段必须为空,否则收到的就不是静默推送而是普通通知。 (c)sound字段设不设不影响静默推送的接收,只不过会出现符不符合需求的问题。还有一个badge属性,设置的话也不影响静默推送的接收,但是和sound一样。
当普通推送中有content-available=1时,app在前台和后台时也会触发该方法。

willPresentNotification

app在前台收到通知被调用,支持iOS10以上

didReceiveNotificationResponse

支持iOS10以上,通过以下三种方式被调用

  1. 点击通知进入应用
  2. 点击action
  3. 清除了category是UNNotificationCategoryOptionCustomDismissAction的通知。

PS:

测试通知的生产环境需要打adhoc包进行测试。使用xcode的weindow->organizer可以查看之前已经打包的界面,在包上右键show in finder
,并显示包内容,找到Products文件夹下的.app后缀的文件,在外面新建文件夹命名为Payload,将.app拷贝进去,压缩文件夹并该后缀为.ipa之后,就可以安装在手机上测试了。

参考链接1
参考链接2
参考链接3

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值