美文网首页恩美第二个APP项目将来跳槽用
iOS 各种状态下消息推送的处理

iOS 各种状态下消息推送的处理

作者: ccc小yyy | 来源:发表于2017-02-16 10:57 被阅读1249次

    前言

    最近在做类似微信公众号消息的功能,由于我们的即时聊天是集成了环信,环信在群推上有欠缺,于是后端的小伙伴决定用极光完成公众号消息的推送。这就尴尬了,即时聊天以及UI集成了环信,消息推送用的极光。

    过程

    极光推送,只是对苹果官方推送(apns)的进一步封装,实际上也是走apns。
    首先说下app的状态,详情可参考 这篇文章
    Not running:
    应用还没有启动,或者应用正在运行但是途中被系统停止。
    ** Inactive:
    当前应用正在前台运行,但是并不接收事件,Inactive一般是Active与其他状态切换的过渡状态,一般很短,故做消息推送时我是忽略的。
    ** Active
    :
    当前应用正在前台运行,并且接收事件。
    Background:
    应用处在后台,并且还在执行代码。应用进入后台后,会短暂停留在此状态,大概十分钟后会进入Suspended状态。
    ** Suspended**:
    应用处在后台,并且已停止执行代码。

    Not running状态下收到apns,点击通知栏进入程序,会调用-(void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions这个方法,并且会把通知消息的数据放在launchOptions里;而点击应用图标进入程序虽然也调用上面方法,但并不会传递消息数据,launchOptions为空。

    在** Active**状态下,收到推送会调用
    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    或 者 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler,消息数据在userInfo中;

    Background状态下,可参照极光这篇文档

    开启Remote notifications.png
    开启Remote notifications,并在推送消息中附加content-available:true 的字段,收到消息时便会调用-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHa,虽然官方文档只说了在上面这个方法调用,经实测也会调用-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)user

    当然iOS 7后的最好用didReceiveRemoteNotification:fetchCompletion Handler:,毕竟是苹果官方推荐用的。

    在** Suspended状态下,收到apns,系统会暂时将app切换回 Background状态,给用户大概几分钟时间处理相关数据,同样走上述Background**状态流程。

    针对我们这个公众号的需求,应用处于前台和后台的情况下,都可以满足,但是在应用未打开的情况下,直接打开应用图标无法获取推送消息,点击通知栏,也只能通过launchOptions获取被点击的那个消息;而且应用长期处于后台,当系统内存吃紧时,系统会把应用杀掉。所以针对这种情况,最好在app启动时调接口检查是否有离线消息,这样就不会有消息遗漏了。

    另外,还有一点要补充,远程推送消息一般有两种,分别是通知消息自定义消息自定义消息是只能在前台收到的,只有通知消息才能前后台都能收到

    结束

    学习之路,与君共勉。

    相关文章

      网友评论

        本文标题:iOS 各种状态下消息推送的处理

        本文链接:https://www.haomeiwen.com/subject/rtjxwttx.html