原文:iOS的消息推送简析
iOS的消息推送简析
消息推送的目的是为了在应用切至后台或手机锁屏情况下,提醒用户当前时间APP内部发生了某事,吸引用户打开APP应用。
消息推送有三种提示类型:
- UIUserNotificationTypeBadge:应用的BadgeValue小红圈
- UIUserNotificationTypeSound:声音或震动提示
- UIUserNotificationTypeAlert:Alert展示Message内容
基于不轻易打扰用户使用的原则,APP消息推送需要征得用户同意,提前进行注册。
如果用户选择允许,苹果会根据bundleID和手机UDID生成deviceToken,然后调用 application:didRegisterForRemoteNotificationsWithDeviceToken: 方法获取到devicetoken
|
|
消息推送分为两种:
- 本地消息推送(LocalNotification)
- 离线消息推送(PushNotification或者RemoteNotification)
本地消息推送
- 一般用于工具类软件,比如:事务提醒等软件,到某个时间点发出通知提示。
- 实时通信软件,通知客户端的形式,比如实时通信软件,收到聊天信息后,通知手机响铃或震动,或修改TabBar的Item的BadgeValue等。
离线消息推送
APP切至后台,Kill掉APP的情况下,提示用户。
收到通知后的回调
收到通知后,单击本地通知后,有两种情况:
- 程序从后台切至前台打开(程序未被kill掉)
收到本地通知就会调用didReceiveLocalNotification代理方法,当应用在前台时,收到本地推送通知也会调用,不过一般不做处理
- 程序Kill掉,重新运行
打开程序,都会执行执行application: didFinishLaunchingWithOptions: 回调方法,不同的是,正常启动时launchOptions参数为null,如果其他方式启动launchOptions会带有特定参数。
|
|
AppDelegate中关于推送代理方法的执行情况:
首次安装APP应用:
--> didRegisterForRemoteNotificationsWithDeviceToken被调用;
--> 系统提示用户是否允许开启推送;
--> didRegisterUserNotificationSettings被调用;
非首次启动时:
--> 推送处于拒绝状态:didRegisterUserNotificationSettings被调用;
--> 推送处于允许状态
--> didRegisterForRemoteNotificationsWithDeviceToken 被调用
--> didRegisterUserNotificationSettings 被调用
运行过程中用户修改推送设置:
--> 拒绝 到 允许:didRegisterForRemoteNotificationsWithDeviceToken被调用
--> 允许 到 拒绝:什么也不做
一点疑问???
在Kill掉APP情况,单击本地推送消息,iOS7.0之后不在didFinishLaunchingWithOptions中做处理,只在下面函数做处理,但我实际开发中,没有这样奇怪。
|
|