RN友盟推送
简述下这篇文章的背景历史,一个老项目因为打算用ReactNative重构,所以重新用ReactNative弄了友盟推送。友盟官网上也有了ReactNative版的各种库,这点感觉友盟棒棒哒(但是有件事我一定要吐槽一下)。其实说是友盟RN版的,其实所有的库都和原来iOS的一样,就是多了几个JS类,负责在RN中桥接它们的库,不过这个也是正常的。那么所谓的RN版友盟推送,其实也就和普通推送差不多。
但是,我经过亲身实验,觉得开发文档还是很不清楚的,尤其是苹果更新了iOS10以后,推送方法就和有病一样要区分iOS10之前和之后。具体配置就不说了,这个网上内容很多,按照文档上的小心配置,注意不要少了依赖库,就没什么问题。我主要觉得蛋疼的点是下面这个需求:
获取推送内容的userInfo
我们知道友盟推送在官网上可以配置,标题,内容,二级标题等等,更为复杂的也有,暂时不讨论。我们是想在配置中添加自定义参数,通过推送获取到这个参数。那么,友盟的文档来了-----------------
如图所示啊,下面这个方法是iOS10以下才走,但是上面那个方法什么都没说,我用的测试版本是iOS10以上,确实两个方法都不走。
再看图
这个就是友盟给所有的获取信息的方法了,后两个的方法介绍人家写的非常明白:
一.处理前台收到通知的代理方法(的确,我记得前两年友盟还不支持苹果手机在前台的情况下收到推送的,现在已经支持了,这个方法是走的,手机在前台,只要推送消息一来,就自动运行这个方法。)
二.处理后台点击通知的代理方法(咦,和前面那个有点不一样哦,说明说是点击通知的代理方法,经过实际测验也是,手机在后台收到推送后,不走这个方法,当点击以后才收到这个方法)
这我就不开心了,那这些方法根本就不够全面呀,我们先来看一共有多少种情况:
这样我们将实际用户的推送行为分为以下6种情况分别由A,B,C,D,E,F来代替。由于我们暂时只研究iOS10以上的情况,我们把上面友盟给出的IOS10的方法定义为方法一,方法二。
A情况 用户前台收到推送消息,不点击推送栏消息。 那么很自然的走了方法一
B情况 用户前台收到推送消息,并且点击了推送栏消息。此时会走两个方法,没错,先走方法一,后走方法二,也就是所谓的后台点击其实前台点击也是走这个方法
C情况 用户后台收到推送消息,不点击推送栏消息。此时什么方法也不走
D情况 用户后台收到推送消息,点击推送栏消息。此时走方法二。
E情况 用户App杀死的情况,点击推送栏消息进入,此时走方法二。
F情况 用户App杀死的情况,点击应用图标进入,此时什么方法也不走。
我明明记得以前1个方法都搞定了,现在是怎么肥事!大兄得!
那么事情没有结束,我当然会问友盟客服了,我想让他来拯救我这颗千疮百孔的心灵,于是友盟客服告诉我,其实C情况也并不是友盟方法不会走,C情况可以走友盟的静默推送,而且标重点:静默推送在友盟的推送后台配置是无法进行的,需要你们服务器来推送并且要传1个参数@“content-aviliable=1”。
看文档
怎么个事,你们文档不是告诉我当app没有启动或者被杀掉的时候将无法收到静默推送吗!哦哦,那就应该是@“app没有启动”这句话不等于app在后台的情况,那你app没有启动和被杀死不就是1个意思了嘛!!你还用毛线或者!这友盟的文档感觉像阅读理解啊!
再看文档:
你刚刚不是让我传@“content-aviliable”参数么,你们文档说不应该包含其他字段,这是怎么回事……而且这个方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
复制代码
你不是写的iOS10以下走这个方法吗?你们友盟的静默推送不支持iOS10以上?
好了,文章写完了。没错,可能看完的你有些疑惑,我们公司后台还没有弄这些东西,所以我也无法给出最新的实验成果。如果你有好的答案请告诉我。
中间还有一些RN的东西,下次再记录。完。