2020年,极光推送,别名推送居然收不到了
前言:最近公司新增业务,需要区别推送,那肯定就是极光的别名推送了,测试的时候发现以前可以现在不行了
原因:原来是极光做了调整,好吧,都怪自己不常看站内信吧!
解决办法:
1、由于对别名的限制,客户端会注册不了别名,所以,当注册不了别名时,就是 JPUSHService setAlias 时返回码不为0时给后台发个请求,让后台清理一下别名绑定的设备,然后客户端再延迟2秒再次注册一下别名即可。
+ (void)JPUSHServiceSetAlias:(NSString*)alias { [JPUSHService setAlias:alias completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) { NSLog(@"**********code:%ld content:%@ seq:%ld", iResCode, iAlias, seq); if (iResCode != 0) { // 6027 绑定别名失败 6014 请求繁忙 [MyAPIClient postData:[API myDeleteAliasPath] params:@{} success:^(id data) { dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)); dispatch_after(delayTime, dispatch_get_main_queue(), ^{ [JPUSHService setAlias:alias completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) { NSLog(@"-----------code:%ld content:%@ seq:%ld", iResCode, iAlias, seq); } seq:0]; }); } failure:^(NSError *error) { }]; } } seq:0]; }
2、当退出时解绑别名
[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) { // 回调返回的 tags 为 nil。返回对应的状态码:0 为成功,其他返回码请参考错误码定义。seq 为调用时传入的会话序列号 } seq:0];
注:客户端初始化极光推送的时候,最好上传IDFA,因为iOS客户端卸载重装就会算是一个新设备。
鉴于 iOS 系统设计上限制设备唯一标识,所以极光一直使用 Device Token 作为标识,也因为极光推送本身就是需要 Device Token 这个值才可能运作的。
iOS 9 版本之后,每次卸载后重装都会导致 Device Token 变化,所以对于极光后台来说,都只能被识别为新用户。
极光 SDK 新版本增加了 IDFA 选项,在集成初始化 SDK 时可选把 IDFA 这个值设置进来,这样极光后台就优先根据 IDFA 值来识别用户,从有一定的可能性应用被卸载后重装还能识别回老设备。
IDFA 是广告标识符,是 iOS 专门为广告跟踪唯一地识别用户而设计的。在 iOS 设备上,设备 -> 隐私 -> 广告这个页面,有一个设置项:限制广告跟踪。默认是未选中状态的,即是关闭状态,是不限制的。用户可以选中,从而限制广告跟踪。设置项之外还有一个按钮:还原广告标识符…。如果用户点击了这个按钮,则 IDFA 值会变化。