在集成极光 iOS SDK 之后,进行初始化,发现初始化无法成功,无法取到 registrationID ,设置别名标签等均失败,开启 debug 查看日志发现如下信息:

2018-07-10 14:50:57.886692+0800 JIGUANG | W - [JIGUANGSessionController] 连接被关闭
2018-07-10 14:50:57.886794+0800 JIGUANG | W - [JIGUANGSessionController] connect close by remote
2018-07-10 14:50:59.897764+0800 JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 103.229.215.29,port 7006
2018-07-10 14:51:00.054259+0800 JIGUANG | I - [JIGUANGRegistration] 
----- register info -----
Appkey: ××××××××××××××//私密信息已替换
token:××××××××××××××××//私密信息已替换
 advertisingIdentifier:
2018-07-10 14:51:00.086093+0800 JIGUANG | W - [JIGUANGSessionController] 连接被关闭
2018-07-10 14:51:00.086402+0800 JIGUANG | W - [JIGUANGSessionController] connect close by remote
2018-07-10 14:51:02.104463+0800 JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 103.229.215.29,port 7006
2018-07-10 14:51:02.236434+0800 JIGUANG | I - [JIGUANGRegistration] 

日志中一直出现连接成功、连接被关闭的打印,重试多次依旧无法注册成功。

经过多方排查定位,最终发现开发者实现了 NSMutableData(Safe) 这个可变类型的类别,其处理方式导致了该问题的出现。

  • 极光 SDK 有对数据进行加密,加密后数据的长度发生了变化,按照开发者的写法,会切断极光的数据,导致后台无法解密从而出现连接断开的现象,不提倡开发者使用,需要注意类别的实现。

  • 极光的加密做法并不会导致崩溃,开发者实现的这个类别是防止崩溃的,对于不会崩溃的也做同样的处理,就会带来意想不到的后果,也就是说开发者这样写是有漏洞的,如果硬是要加,可以修改优化下。

只要按下图注释代码即可成功注册,也可以另行自己做优化处理: