Android融云坑点

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是获取项目里的字符数组的,

image.png

配置文件rc_configuration.xml里是这样的:

1
2
4
8
16
32
64
128
256
512

导致类型不匹配,获取的个数和数据都是空的,
于是修改类型为string-array;如下;

1
2
4
8
16
32
64
128
256
512

然后服务初始化成功,可以正常连接和收发消息了,而且升级后,就真的关闭通知了,ios也不会收到后台推送通知了,当前升级为5.1.2,
即:api "cn.rongcloud.sdk:im_lib:5.1.2"。
这里总结一下问题,升级替换sdk只关注了它的jar的库文件,没有关心携带的配置文件;
而且官方没有提及这次升级改动配置的地方,这一点很坑;导致排查了很久;

你可能感兴趣的:(Android融云坑点)