一般应用上架遇到的问题均是问题一、问题四,您按方案处理即可。如果实际遇到问题二、问题三,再使用相应解决方案。
问题一:IM SDK 部分 action 不合规
可能出现以下 action 之一不合规:
<action android:name="io.rong.push.intent.action.HEART_BEAT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
解决方案 A:升级 SDK 版本
- 4.1.1版本,升级到 4.1.1.24或更高版本;
- 4.1.2版本,升级到 4.1.2.15或更高版本;
- 5.x 版本,5.1.9.8 版本以下,升级到 5.1.9.8;
- 5.x 版本,5.1.9.8 版本以上,升级到 5.3.4 版本或最新版(在官网 https://www.rongcloud.cn/downloads/history/Android?_sasdk ) 查看最新版本 )
解决方案 B:修改应用程序的 AndroidManifest.xml
复制如下代码到主 App 的 AndroidManifest.xml
文件中即可。
<receiver
android:name="io.rong.push.rongpush.PushReceiver"
android:exported="true"
android:process="io.rong.push">
<intent-filter tools:node="removeAll">
<action android:name="io.rong.push.intent.action.HEART_BEAT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<intent-filter tools:node="removeAll">
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
问题二:IM SDK 后台自启动 processNextBroadcast
示例:
com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1391)
com.android.server.am.BroadcastQueue$BroadcastHandler.handleMessage(BroadcastQueue.java:176)
android.os.Handler.dispatchMessage(Handler.java:106)
android.os.Looper.loop(Looper.java:164)
android.os.HandlerThread.run(HandlerThread.java:65)
com.android.server.ServiceThread.run(ServiceThread.java:46)
解决方案:关闭 RongPush 自启动:
客户端需要在下列两个时机调用以下三个方法:
- 调用
init
方法之前; - 调用
connect
回调连接成功后。
备注:4.x 和 5.x 处理方案相同;这三个方法调用顺序可以不分前后。
RongPushClient.cancelPushHeartBeat()
RongPushClient.stopService()
RongPushClient.stopRongPush()
问题三:IM SDK 无详细堆栈或 HeartbeatReceiver
自启动
示例:
堆栈:io.rong.imlib.HeartbeatReceiver、或无详细自启动堆栈。
解决方案:关闭后台心跳自启动
RongIMClient.getInstance().cancelSDKHeartBeat();
此方法在初始化之前、连接成功之后,分别调用一次即可,所有版本均适用**
注意:初始化之前调用此代码,需要添加 try catch
try {
RongIMClient.getInstance().cancelSDKHeartBeat();
} catch (Exception e) {
}
问题四:小米推送 SDK 应用自启动
报错堆栈示例:
com.xiaomi.push
com.xiaomi.push.service.receivers.NetworkStatusReceiver
action=android.net.conn.CONNECTIVITY_CHANGE
com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1391)
com.android.server.am.BroadcastQueue$BroadcastHandler.handleMessage(BroadcastQueue.java:176)
android.os.Handler.dispatchMessage(Handler.java:106)
android.os.Looper.loop(Looper.java:164)
android.os.HandlerThread.run(HandlerThread.java:65)
com.android.server.ServiceThread.run(ServiceThread.java:46)
解决方案:根据小米推送官方要求,更新注册的小米推送服务
请在主工程的 AndroidManifest.xml
中去掉 com.xiaoxi.push.service.receivers.NetworkStatusReceiver
,如下图红圈所示:
小米推送 SDK 文档中已经去掉该 Receiver。融云集成文档也已同步更新去掉此 Receiver。
问题五:音视频 SDK io.rong.callkit
自启动
如果 io.rong.callkit
引起自启动;或者如下 Action触发自启动;或如下Action不合规
<action android:name="android.intent.action.PHONE_STATE" />
解决方案
复制如下代码到主 App 的 AndroidManifest.xml
文件中即可。
<receiver
android:name="io.rong.callkit.util.RTCPhoneStateReceiver"
android:exported="true">
<intent-filter tools:node="remove">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>