推送处理

我这两天都在改这么个东西:

需要根据推送消息,在下方的tabbar上显示提示红点。即:接收到推送消息,当点击推送消息时,跳转对应界面;点击程序图标进入程序时,显示提示的小红点。

前记

我记得我之前做的推送处理,分为三种情况,这个我记得很清楚,因为我第一次面试在北京的车库咖啡,被人问到了这个问题,但是我没答出来,因为那时候我确实都没做过推送处理;后来进了第一家公司,有个好的产品,然后刚好有这个需求,然后就get了这个技能。

a. 程序在后台,接收到推送消息,点击推送消息,走的是


// 程序在运行时接收到通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    ...
    [self receivePush:self.userInfo];
}

b. 程序在前台,接收到推送消息,弹窗提示/直接处理,对应的方法还是


// 程序在运行时接收到通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    ...
    [self receivePush:self.userInfo];
}

c. 程序被kill掉了,接收到推送消息,点击推送消息,对应的方法是


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions && [[launchOptions allKeys] containsObject:@"UIApplicationLaunchOptionsRemoteNotificationKey"]) {
        NSMutableDictionary * userInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
        [self receivePush:userInfo];
    }
}

Now

所以当我看到这个需求时,没太在意,以为跟以前一样,能够实现。但是写着写着,发现不对的地方了。以前关注的是点击推送消息的处理,现在不光要有点击推送消息的处理,还有没点击推送消息时的处理。。。。。So,想想能不能实现,然后我想既然被kill掉能走application:didFinishLaunchingWithOptions:这个方法,带的都有推送参数,那没点击推送消息应该也没问题。

然而事实证明,我还是太天真了,我今天仔细测试了一下,发现,

application:didFinishLaunchingWithOptions: 这个方法当程序被kill掉,点击推送消息进入时,Options里有推送的信息;但是,当不点击推送消息,直接进入程序时,Options里是没有推送信息的。所以单单凭推送,这个需求是不能实现的。那怎么办?

Result

再回过头看看需求,关键问题是,当我点击程序图标进入程序时,我不知道推送的参数,没有办法判断应不应该显示小红点。
所以,再单独让后台来个请求,返回给我个应不应该显示小红点的参数;但是这样还有个问题是,什么时候请求?我最开始想的是,程序被kill 掉/在后台,点击打开的时候都应该刷新小红点,所以在applicationWillEnterForeground: 请求,但是这样的话,请求未眠也太频繁了点;而且后台说本来推送对性能要求都比较高,你再这样查询,不行!

然后,QQ上朋友发我一张这个图片:


1.jpg

上图中最后一句,根据通知的badge来判断是否有通知,然后发请求获取数据。在我看来,很有道理哦,这个方法不错。但是,后台还是那句话,不行,所以就你懂的砍需求了


1.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文主要讲解iOS收到远程消息后客户端的一些处理方法,iOS 10开始苹果单独集成一套框架专门处理通知,可谓非常方...
    Somerr态阅读 8,885评论 8 20
  • APNS(Apple Push Notification Service)是苹果公司提供的消息推送服务。其原理就是...
    Jamesholy阅读 4,079评论 0 6
  • 最近在开发过程中遇到一个很奇葩的问题,每次点击推送进入应用内跳转页面之后,点击返回的时候总是点击两次才能回到首页,...
    这世界总会好的阅读 3,437评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,241评论 19 139
  • 新版iOS10更新后, 通知的处理发生里很大变化, 本人也刚刚处理完成这一方面的问题, 写出来希望帮助更多的人, ...
    Ape_HC阅读 2,732评论 0 2

友情链接更多精彩内容