iOS应用不同状态下收到推送的处理

1.为什么要使用推送?

  • 增加用户活跃度
  • 唤醒沉睡的用户
  • 增加用户粘度
  • 化被动为主动
    推送切记不能过于频繁,否则会起到相反的作用

2. 推送从服务器到达目标设备过程

  • 阶段一:服务端把要发送的消息和目标iOS设备的DeviceToken打包,发送给APNS;备注:DeviceToken不是一成不变的
  • 阶段二:APNS在自身的已注册Push服务的IOS设备列表中,根据DeviceToken查找对应iOS设备,并将消息发送到IOS设备;
  • 阶段三:IOS设备把发送的消息传递给对应的应用程序。

3. 实现推送以及程序不同运行状态时收到推送的相应处理

主要介绍程序分别在前台、后台和关闭时收到推送的处理和用户从桌 面进入和从通知栏进入的区别。对于证书的配置就不再赘述,网上有很多教程。本文是基于你的证书都已配置好,并且可以收到推送的情况。程序无论在前台、后台还是关闭的时候时都可以收到推送的,那收到推送的情况就可以分为三种:

  • 1.程序在前台时收到推送:
    在前台收到通知时,会调用下面这个方法,可以在这个方法里面实现收到通知时刷新或跳转界面的功能;程序在前台收到推送时通知栏不会弹出推送信息
    -(void)application:(UIApplication)application didReceiveRemoteNotification:(NSDictionary)userInfo{}

  • 2.程序在后台时收到推送:
    当程序在后台收到推送时,如果info.plist中配置了UIBackgroundModes会调用
    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ }
    如果用户点击通知栏信息进入程序会调用情况1中的方法,所以在情况1的方法里面需要根据程序在前台还是后台application.applicationState来执行不同操作

  • 3.当程序关闭时收到推送:
    程序关闭时收到推送时,用户点击通知栏信息进入应用的时会调用
    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}
    并且此时的launchOptions是有值的,即推送过来的信息。可以通过判断launchOptions是否为空,来执行你想要的操作。

- 4.关于未读消息数量角标

设置角标[UIApplication sharedApplication].applicationIconBadgeNumber=badgeNum;
这个方法的确可以设置应用程序的角标的数值。但是当程序关闭时,收到推送后我们要怎么改变桌面程序角标的数值呢?这个设置角标的方法写在哪里呢?所以我觉得最好的办法就是让服务推送过来的信息里加上'badge' = 88这个键值对。无论是你程序在后台还是关闭,只要推送过来的消息里面有这个键值对,设备就会自动的为你设置好角标的数值。我们要做的就是在我们阅读完一条消息的时告诉服务器,并且将[UIApplication sharedApplication].applicationIconBadgeNumber减一即可。

最后:关于证书,如果你的后台是以为PHP程序员,请给他最后合成的pem证书,如果是JAVA请给他p12证书。我们在调试的时候可以自己写一份或者网上找一份后台推送的代码,自己推送自己调试,这样利国利民,不用大叫:”谁谁谁,给我推个消息!“了。

发现居然还有人在点赞这篇文章,很遗憾没有更新到iOS 10的推送
发现这篇关于iOS10推送写的还不错 http://www.jianshu.com/p/25ca24215f75

你可能感兴趣的:(iOS应用不同状态下收到推送的处理)