9月底项目新需求完成提交审核,之后出现了苹果审核团队无法登录演示账户问题,每一次都会因为元数据被拒绝而被审核打回,但是在开发设备和测试设备上反复检验过发现账号都可以登录,问题没办法复现导致项目进度停滞不前,坑。。。。。。。
后来和后台沟通发现问题可能是由于iOS13之后的推送注册问题,在我的项目中,用户在登录时需要输入地区、电话、密码信息,并且网络请求过程中向服务器提交设备的deviceToken,而苹果审核团队提供的问题截图显示它们采用的审核设备很可能是装有最新版本系统的iPad设备,虽然不懂为什么iPhone的app审核要用iPad,但是现阶段也没有更好的推测,只能尝试修改deviceToken的注册写法。没想到使用装有最新版iOS13系统的iPad pro测试发现真的存在和审核一样的无法正常登录的问题,因此针对于iOS13之后苹果更新后推送deviceToken的注册问题,进行了如下的修改。
未修改前的deviceToken获取方案如下:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
//转换deviceToken适配方案(改动前)
NSString * deviceString = [[deviceToken description]stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceString = [deviceString stringByReplacingOccurrencesOfString:@" " withString:@""];
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:deviceString forKey:@"deviceString"];
NSLog(@"deviceToken================%@",deviceString);
}
修改后的deviceToken获取方案是这样:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
//获取deviceToken字符串(改动后)
NSString * deviceString = [self getHexStringForData:deviceToken];
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:deviceString forKey:@"deviceString"];
NSLog(@"deviceToken================%@",deviceString);
}
其中用到的方法是:
//Data转换成16进制字符串(NSData -> HexString)
-(NSString *)getHexStringForData:(NSData *)data {
NSUInteger len = [data length];
char *chars = (char *) [data bytes];
NSMutableString *hexString = [[NSMutableString alloc]init];
for (NSUInteger i = 0; i < len; i++) {
[hexString appendString:[NSString stringWithFormat:@"%0.2hhx", chars[i]]];
}
return hexString;
}
改完之后用装有最新版系统的iPad就可以正常登录了。
个人接触oc时间不长,如果文章有错误欢迎大家讨论。
参考链接:https://yq.aliyun.com/articles/719315