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 值会变化。

原文地址:https://www.cnblogs.com/ljcgood66/p/13819564.html