持续创作,加速成长!这是我参与「日新计划 6 月更文挑战」的第5天,点击查看活动详情

前语

问题:ios中极光推送退出登陆后还能收到推送的问题

处理办法: 以极光推送为比如,退出登陆时删去别号的即可

设置和删去别号采用递归的办法,假如设置失利就持续重试

I 别号设置、查询及删去操作

以极光推送为比如

docs.jiguang.cn/jpush/clien…

退出登陆时删去别号的即可

1.1 设置别号

  • 设备别号(递归的办法,假如设置失利就持续重试)

判断回来对应的状况码:0 为成功

- (void)setAliaWithblock:(void (^)(id sender))block WithAlis:(NSString *)alis1
{
    if(QCTSession.shareQCTSession.isemptySeeionLocaling){
        return ;
    }
    WEAKSELF
    NSMutableString *alis = [[NSMutableString alloc]init];
    NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
//    NSString *uuid = @"B6C0205B-05B4-466E-B778-A3F789A4F62D";
//    NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    [alis appendFormat:@"%@_",[NSString stringWithFormat:@"%@",_companyId]];
    [alis appendFormat:@"%@_",[NSString stringWithFormat:@"%@",weakSelf.store.id]];
    [alis appendFormat:@"%@",uuid];
    [JPUSHService setAlias:[MD5 MD5ForLower32Bate:alis] completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
        //6017 本次恳求呈现异常参数,恳求无效;
//6027    别号绑定的设备数超越约束    3.3.2 版别新增的错误码;极光于 2020/03/10 对「别号设置」的上限进行约束,最多答应绑定 10 个设备,如需更高上限,请联系商务。
        if (iResCode == 6002 || iResCode == 6014 || iResCode == 6020 || iResCode == 6021 || iResCode == 6022) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [weakSelf setAliaWithblock:block WithAlis:alis];
            });
        } else if(iResCode ==  0){
            //回来对应的状况码:0 为成功,其他回来码请参阅错误码定
            if (block) {
                block([MD5 MD5ForLower32Bate:alis]);
            }
            return ;
        }else{
            NSLog(@"设置别号失利 失利code:%ld",(long)iResCode);
        }
    } seq:[weakSelf.store.id integerValue]];
}

6017 本次恳求呈现异常参数,恳求无效; 6027 别号绑定的设备数超越约束 3.3.2 版别新增的错误码;极光于 2020/03/10 对「别号设置」的上限进行约束,最多答应绑定 10 个设备,如需更高上限,请联系商务。

  • 用法
- (void)setCompanyId:(NSString *)companyId
{
    WEAKSELF
    _companyId = companyId;
    if (companyId != nil && _store != nil) {
            [weakSelf setAliaWithblock:^(id sender) {
                NSLog(@"你注册的别号发给我一下 :setAliaWithblock alis :  %@",sender);
                [weakSelf getAlias];// 运用JPUSHService查询设置成功之后的别号
            } WithAlis:nil];
    }
}

1.2 查询当时设备设置的别号

/**
 查询当时alias
 @param completion 呼应回调
 @param seq 恳求序列号
 */
+ (void)getAlias:(JPUSHAliasOperationCompletion)completion
             seq:(NSInteger)seq;

iOS小技能: 限制账号退出登陆后无法收到推送功能(递归设置和删除别名)

- (void)getAlias{
    [JPUSHService getAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
        NSLog(@" 查询的alis:  %@  iAlias:%@",iAlias,[NSNumber numberWithInteger:iAlias]);
    } seq:1];
}

1.3 删去别号

- (void)deleteAliaWithblock:(void (^)(id sender))block
{
    WEAKSELF
    //Method - deleteAlias:completion:seq:
    [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
        if (iResCode == 6002 || iResCode == 6014 || iResCode == 6020 || iResCode == 6021 || iResCode == 6022) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [weakSelf deleteAliaWithblock:block];
            });
        } else if(iResCode == 0){
//            NSLog(@"铲除别号成功");
            if (block) {
                block(nil);
            }
            return ;
        }else{
            NSLog(@"铲除别号 失利code:%ld",(long)iResCode);
        }
    } seq:[_store.id integerValue]];
}

II iOS 音讯推送的细节回顾(测验工具:SmartPush、PushMeBaby)

iOS小技能: 限制账号退出登陆后无法收到推送功能(递归设置和删除别名)

2.1. 验证音讯推送证书是否有用

能够运用极光后台、或许PushMeBaby、SmartPush

运用PushMeBaby 验证音讯推送证书的有用性 github.com/zhangkn/Pus… 验证出产证书的时候,能够运用ADHot PP 证书打包。(在创建 Provisioning Profile 时,选择了 Ad Hoc 这个选项,这个只能用做分发,而不适用于真机调试。)

  • deviceToken 需求重新获取

#pragma mark - 接受到deviceToken
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken:%@", deviceToken);
    NSString *strDeviceTokenTemp = [NSString stringWithFormat:@"%@", deviceToken];
    strDeviceTokenTemp = [strDeviceTokenTemp stringByReplacingOccurrencesOfString:@"<" withString:@""];
    strDeviceTokenTemp = [strDeviceTokenTemp stringByReplacingOccurrencesOfString:@">" withString:@""];
    UITextView *textView =[[UITextView alloc]initWithFrame:self.window.frame];
    [textView setText:strDeviceTokenTemp];
//    [alter addSubview:textView];
    [self.window addSubview:textView];
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken:%@", strDeviceTokenTemp);
    //去除空格
    strDeviceTokenTemp = [strDeviceTokenTemp stringByReplacingOccurrencesOfString:@" " withString:@""];

2.2 app处于后台/被杀死的状况仍可进行言语播报(iOS12.1以上)

  • iOS NotificationServiceExtension完成VoiceBroadcast【app处于后台/被杀死的状况仍可进行言语播报】iOS12.1以上在后台或许被杀死无法语音播报的处理计划

blog.csdn.net/z929118967/…

  1. 付费计划(付费离线SDK+Service Extension):kunnan.blog.csdn.net/article/det…

  2. 免费计划:(本地拼接音频+Service Extension)download.csdn.net/download/u0…

采用语音组成音频文件后,将文件写到AppGroups的Library/Sounds文件夹下,最后更改UNNotificationSound特点来自定义的收款到账语音。

假如无法下载,可通过添加WX:iosrev

  1. 修订版demo下载:

iOS15 音讯推送言语播报【修订版】(处于后台/被杀死的状况仍可进行言语播报)

download.csdn.net/download/u0…

原理: 本地离线组成音频+Service Extension

⭕ 处理离线组成比较本钱贵重问题:采用本地拼接音频完成。

⭕ 处理iOS15之后本地告诉告诉栏弹出屡次的问题:运用Service Extension阻拦音讯推送,修改UNNotificationSound为本地拼接的音频,来防止产生多条横幅。

合并的音频保存在AppGroup

⭕ 处理金额转换为对应的文字的细节问题(numFormatter的兼容处理)

告诉携带 collapse id 参数,将会覆盖掉告诉中心里携带相同 collapse id 的告诉,collapse id 的值不可超越 64 bytes。

2.3 android极光推送设置心跳交互时刻

  • 布景:

对于设备常常离线的处理办法,假如这种状况呈现的几率大的话,主张更新一下SDK,并且将心跳时刻从默许的4m 50s改为更短,例如1m或30s,将改善推送延时状况。

  • 调用办法:有必要再Application的onCreate办法里,在init之前调用。
Bundle bundle = new Bundle();
// 设置心跳30s,心跳间隔默许是4min50s
bundle.putInt("heartbeat_interval", 30);
JCoreManager.setSDKConfigs(this, bundle);

这个主张不要低于30s,因为会增加电量消耗

更多相关内容请看这儿音讯推送开发攻略(对即时性和送达率有要求的场景)

blog.csdn.net/z929118967/…

III 常见问题

3.1 别号绑定的设备数最多几个?

默许一个别号可绑定十个设备,VIP别号绑定设备数可调。

一个设备的概念:app集成sdk之后在设备上装置打开之后,sdk会向极光服务器进行注册,生成一个仅有标识码regid(app+设备绑定)。

问题:重复卸载引起的regid变化,导致依据androidID+账号ID的别号在同一个手机绑定了多台设备。

处理办法一:假如实际状况会呈现这种一直卸载重装APP的状况,主张在每次设置别号之前,先依据androidID,把这个别号删掉,然后再绑定。

处理办法二: 别号依据regid +账号ID生成,而不是androidID。(iOS推荐用IDFV++账号ID生成别号。)

  1. 和IDFA相比,IDFV不会呈现获取不到的场景。
  2. 假如用户将属于此Vendor的所有应用程序都卸载,IDFV的值也会被系统重置。即便重装该Vendor的应用程序,获取到的也是一个全新的IDFV。

iOS安全之【设备信息】设备ID除了运用_idfa、_idfv 还可运用代替计划:运用Keychain 存储UUIDhttps://blog.csdn.net/z929118967/article/details/107958268

3.2 推送回来1011错误码

错误描绘 push api推送回来:

{"code":1011,"message":"cannot find user by this audience or has been inactive for more than 255 days"}

极光控制台推送回来:“错误,没有满足条件的推送方针或推送方针超越255天不活跃,被排除在推送方针之外”

see also

大众号:iOS逆向