当前知识库站点已不再维护。请移步新版知识库:https://help.rongcloud.cn/

小米应用上架问题处理方案

发布时间: 2023-03-23 12:05

回答:


整体建议:

一般上架均是问题一、四,按方案处理即可;如果实际遇到问题二、三后,再使用相应解决方案

IM SDK

问题一,提示以下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" />

解决方案1

4.x版本,升级到4.1.2.11;

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=fNw  查看最新版本 )

解决方案2

复制如下代码到主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>


问题二,后台自启动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,在connect回调连接成功后调用如下代码

RongPushClient.cancelPushHeartBeat()
RongPushClient.stopService()
RongPushClient.stopRongPush()

备注:4.x和5.x处理方案相同;这3个方法调用顺序可以不分前后;


问题三,无详细堆栈或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 中红圈内的Receiver:

备注:该Receiver是在小米推送SDK新版集成文档中已经去掉(https://dev.mi.com/console/doc/detail?pId=2774#_1_2)

融云集成文档也将会同步更新去掉此Receiver。

image.png




RTC 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>