2021-06-02
本来项目已经集成了rongcloud的sdk,能用可是有些api和ios功能有差距,
发送本地媒体文件,关闭了通知,
var msc = MessageConfig()
msc.isDisableNotification = true
message.messageConfig = msc
ios还能收到后台推送通知;
于是就升级了,出现了连接初始化服务异常。
RongIMClient.connect(token, new RongIMClient.ConnectCallback() {
/**
* 连接融云成功
* @param userid 当前 token 对应的用户 id
*/
@Override
public void onSuccess(String userid) {
// joinToRoom();
// 如果是token失效, 重新获取token
Log.i(TAG, "MyApplication-->RongIMClient connect =======onSuccess");
}
/**
* 连接融云失败
* @param connectionErrorCode 错误码,可到官网 查看错误码对应的注释
*/
@Override
public void onError(RongIMClient.ConnectionErrorCode connectionErrorCode) {
Log.i(TAG, "MyApplication-->RongIMClient connect=======onError");
}
@Override
public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus databaseOpenStatus) {
Log.i(TAG, "MyApplication-->RongIMClient onDatabaseOpened");
}
});
就连这种最基本的连接回调都没有,你没听错,连error回调方法都不回调;超时也没有,
这就很纳闷了;
最后一路跟踪idea的jar代码,找到了问题所在;
在ConnectionService中,初始化服务里有一段代码;
void initService(Context context, NativeObject obj, String akey) {
。。。
Resources resources = context.getResources();
this.mReconnectInterval = resources.getStringArray(resources.getIdentifier("rc_reconnect_interval", "array", context.getPackageName()));
int length = this.mReconnectInterval.length;
RLog.i("ConnectionService", "mReconnectInterval " + length);
if (length == 0 || this.mReconnectInterval[0] == null) {
throw new IllegalArgumentException("rc_reconnect_interval must have a value and the type of the field must be string-array");
}
if (length > 10) {
throw new IllegalArgumentException("The numbers of rc_reconnect_interval must less than 10");
}
。。。
}
这个getStringArray是获取项目里的字符数组的,
配置文件rc_configuration.xml里是这样的:
<integer-array name="rc_reconnect_interval">
<item>1</item>
<item>2</item>
<item>4</item>
<item>8</item>
<item>16</item>
<item>32</item>
<item>64</item>
<item>128</item>
<item>256</item>
<item>512</item>
</integer-array>
导致类型不匹配,获取的个数和数据都是空的,
于是修改类型为string-array;如下;
<string-array name="rc_reconnect_interval">
<item>1</item>
<item>2</item>
<item>4</item>
<item>8</item>
<item>16</item>
<item>32</item>
<item>64</item>
<item>128</item>
<item>256</item>
<item>512</item>
</string-array>
然后服务初始化成功,可以正常连接和收发消息了,而且升级后,就真的关闭通知了,ios也不会收到后台推送通知了,当前升级为5.1.2,
即:api "cn.rongcloud.sdk:im_lib:5.1.2"。
这里总结一下问题,升级替换sdk只关注了它的jar的库文件,没有关心携带的配置文件;
而且官方没有提及这次升级改动配置的地方,这一点很坑;导致排查了很久;