问题描述
最近在集成极光SDK的过程中,发现在我的华为P9测试机上,应用被用户杀死后,无法收到Push通知,只有在应用还在后台的情况下,才能收到通知。
这段时间用华为P9,觉的系统定制做的很不错,运行流畅,与我的nexus5X原生Android7.0手机相比,简直一个在坐高铁,一个在拉马车。相比而言,nexus5X并没有对应用权限做太多的定制,这让应用可以肆无忌惮的自启动和相互启动,各种唤醒机制忙的不亦乐乎,这让开发和产品都很爽,各种需求都实现了,但是用户就不爽了,回想前段时间我还有想把nexus5X摔了的冲动。
官方解释
下面是极光官方对App被杀死后无法收到push通知的回复:
再度分析
- 由于android原生系统默认并没有禁掉App自启动和通知栏显示的相关权限,所以正常情况下(用户手动强制停止除外) 集成极光SDK后极光会通过各种广播机制来重启push服务,也就能收到push消息。
- 反观国产定制化系统,小米、华为等,不可否认它们做的很不错,像App自启动这种权限默认开启,带来的问题就是应用常驻后台,不管怎么杀都杀不掉,App(BAT都TM流氓)之间总能通过自启动和App相互启动来唤醒,这就带来了一个问题,内存使用越来越大,用户感觉手机怎么越来越卡,可能就会产生和我一样想把手机摔了的冲动。
- 这也就是为什么用三星的觉的手机越用越卡,现在用小米、华为(至少是我现在用的华为P9)的手机却一直都很流畅的原因。
推送SDK怎么解决这个问题
- 在手机默认关闭应用自启动权限的情况下,App就不能自己唤醒,那该怎么收到push消息呢?不可能让用户自己开启App吧,这TM还叫什么通知。
- 你多虑了,像极光/友盟这类App,在一个手机上所有即成这个Push SDK的App都会共享一个长链接,不然你也能想象会浪费多少资源。
- 这样就能得出一个结论,如果你的App用的是极光SDK,那么只要你的手机上有一个使用极光Push SDK的App被用户启动了,那么,你的App就能收到通知消息。友盟也是一样。
所以我们需要考虑的就是,哪个推送SDK的用户比较多,你就用这个平台的SDK,这样就能增加你的App收到Push消息的概率。当然,如果你的手机上一个App都没用过你使用的推送平台,那你就只能祈祷上天了。