全部文档

( 最近更新时间:2020-04-28 19:00:00 )

# 集成推送

# 准备工作
  1. 集成适配小米推送之前,请确保已经集成了融云 SDK. 详细可参考 融云推送集成指南

  2. 前往 小米开放平台 (opens new window) 注册账号,通过认证后创建应用,并记录下应用的 AppIDAppKeyAppSecret

  3. 前往 融云开发者后台 (opens new window), 在 服务管理 -> 应用标识 -> Android -> 小米推送设置 一栏中,填写上一步在小米开放平台申请的应用 AppSecret通知标题 (手机端接收到小米推送后, 所展示的通知标题)。

小米推送于 2020 年 5 月 1 日起对国内消息实施推送数量限制,如需要使用没有限制的小米“通知消息”推送功能,可向小米平台申请后,将小米平台提供的 channel_id 在 服务管理 -> 应用标识 -> Android -> 小米推送设置 中进行设置即可,“通知消息”推送申请方式,详细查看小米推送限制说明文档 (opens new window)

设置 30 分钟后生效。

# 导入资源

下载融云官网提供的小米推送 SDK , 并 SDK 导入到应用 libs 目录下,然后 右键点击 -> Add as library

# 添加配置

在主工程中的 AndroidManifest.xml 文件下增加如下配置

<!-- 小米 配置开始 < -->
<permission
android:name="${applicationId}.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.MIPUSH_RECEIVE" /> <!-- 小米 配置结束 < -->
在 application 节点增加配置如下的服务和广播:


<!-- 小米 配置开始 < -->
 <service android:name="com.xiaomi.push.service.XMPushService" android:enabled="true" />
 <service android:name="com.xiaomi.mipush.sdk.PushMessageHandler" android:enabled="true" android:exported="true" />
 <service android:name="com.xiaomi.mipush.sdk.MessageHandleService" android:enabled="true" />
 <!--注:此service必须在2.2.5版本以后(包括2.2.5版本)加入-->

 <service
     android:name="com.xiaomi.push.service.XMJobService"
     android:enabled="true"
     android:exported="false"
     android:permission="android.permission.BIND_JOB_SERVICE" />
 <!--注:此service必须在3.0.1版本以后(包括3.0.1版本)加入-->

 <receiver android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" android:exported="true">
   <intent-filter>
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
     <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
 </receiver>
 <receiver android:name="com.xiaomi.push.service.receivers.PingReceiver" android:exported="false">
   <intent-filter>
     <action android:name="com.xiaomi.push.PING_TIMER" />
   </intent-filter>
 </receiver>
 <receiver android:name="io.rong.push.platform.mi.MiMessageReceiver" android:exported="true">
   <intent-filter>
     <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
   </intent-filter>
   <intent-filter>
     <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
   </intent-filter>
   <intent-filter>
     <action android:name="com.xiaomi.mipush.ERROR" />
   </intent-filter>
 </receiver>
 <!-- 小米 配置结束 < -->
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 启用推送服务

在 SDK init 之前, 配置使用小米推送.

PushConfig config = new PushConfig.Builder()
        .enableMiPush("小米 appId", "小米 appKey")
        .build();
RongPushClient.setPushConfig(config);
已复制
1
2
3
4
# 混淆脚本
-dontwarn com.xiaomi.mipush.sdk.**
-keep public class com.xiaomi.mipush.sdk.* {*; }
已复制
1
2
# 冲突处理

当应用已存在 小米推送, 此时接入使用 融云 SDK 内的 , 就会产生冲突.

解决方案:

  1. 创建 MiPushReceiver 继承融云 SDK 中的 MiMessageReceiver. 复写父类方法即可.

  2. 使用 MiPushReceiver 替换应用中原有的三方推送的 Receiver. 并在 AndroidManifest.xml 里注册 MiPushReceiver .

# 通知设置

# 通知显示

接收到推送消息后, 系统会弹出通知, 显示推送消息.

# 修改内容样式

SDK 内部实现了两种通知栏内容显示样式.

  1. 内容为 "您有了一条新消息". 此为默认显示内容.
  2. 显示具体的内容.
  • 只有接收到单人发送的消息通知, 内容则为 “xxx 发了xxx 条消息”
  • 接收到多人的消息通知时, 内容则为 “xxx 个人发送了 xxx 条消息”

三方推送, 由于系统限制. 有些则是一条消息一个通知栏.

两个通知内容可以进行切换设置.

切换步骤

  1. 在 init 后设置内容显示格式.
// 是否显示 Push 内容, @code true} 显示 , {@code false} 不显示
boolean showStatus = true;

RongIM.getInstance().setPushContentShowStatus(boolean showStatus, OperationCallback callback)

已复制
1
2
3
4
5
  1. 提交工单 (opens new window), 通知客服人员开通或关闭显示 Push 通知内容的功能设置.
# 自定义通知

接收到消息后弹出的通知是系统通知, 所以无法自定义通知

# 通知点击事件
# 配置跳转界面

融云 SDK 内部已经实现了点击 知栏跳转功能. 点击通知栏时,融云 SDK 会以隐式调用的方式发出相应 intent。所以需要在 AndroidManifest.xml 里进行如下配置:

a. 只有一个联系人发来一条或多条通知时,点击通知默认跳转到会话 Activity。在会话 Activity 中配置如下 intnt-filter 即可跳转到当前 Activity。

<activity
android:name="您的会话 activity"
android:exported="true">
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host=""${applicationId}""
        android:pathPrefix="/conversation/"
        android:scheme="rong" />
</intent-filter>
</activity>

已复制
1
2
3
4
5
6
7
8
9
10
11
12
13

b. 多个联系人发来多条通知时,这些通知会折叠显示,点击该通知会跳转到会话列表 Activity。在 AndroidManifest.xml 的会话列表 Activity 中配置如下 intent-filter 即可跳转到当前 Activity。

<activity
android:name="您的会话列表 activity"
android:exported="true">
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host=""${applicationId}""
        android:pathPrefix="/conversationlist"
        android:scheme="rong" />
</intent-filter>
</activity>
已复制
1
2
3
4
5
6
7
8
9
10
11
12

c. 当从融云开发者后台广播推送-广播消息-推送中,发起远程推送时,该推送通知会独立显示,在 AndroidManifest.xml 里进行如下配置即可跳转到当前 Activity。

<activity
android:name="自定义 activity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait">

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />

    <data
        android:host=""${applicationId}""
        android:pathPrefix="/push_message"
        android:scheme="rong" />
</intent-filter>
</activity>
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 自定义点击跳转

当 SDK 中默认跳转无法满足需求, 可自定义跳转.(对于某些推送, 如果不继承PushMessageReceiver可能会导致通知弹不出来。请一定在项目中继承PushMessageReceiver).

  1. 创建 CustomPushMessageReceiver 集成 PushMessageReceiver 类.
class CustomPushMessageReceiver extends PushMessageReceiver {
    ...
}

已复制
1
2
3
4
  1. 在主工程的 AndroidManifest.xml 中注册广播组件.
  <receiver
            android:name="xxx.CustomPushMessageReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="io.rong.push.intent.MESSAGE_ARRIVED" />
                <action android:name="io.rong.push.intent.MESSAGE_CLICKED" />
                <action android:name="io.rong.push.intent.THIRD_PARTY_PUSH_STATE" />
            </intent-filter>
        </receiver>
已复制
1
2
3
4
5
6
7
8
9
  1. 注册完成广播后, 可在创建的 CustomPushMessageReceiver 类中复写 onNotificationMessageClicked 方法. 在此方法中做拦截, 然后实现跳转逻辑.

参数说明

参数 类型 必填 说明 最低版本
context Context 上下文对象
pushType PushType 推送类型
notificationMessage PushNotificationMessage 推送消息
class CustomPushMessageReceiver extends PushMessageReceiver {
    @Override
    public boolean onNotificationMessageClicked(Context context, PushType pushType, PushNotificationMessage notificationMessage) {
        // 可通过 pushType 判断 Push 的类型
        if (pushType == PushType.XIAOMI) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
        } else if (pushType == PushType.HUAWEI) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
        } else if (pushType == PushType.MEIZU) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
        } else if (pushType == PushType.VIVO) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
        } else if (pushType == PushType.OPPO) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
       
        } else if (pushType == PushType.GOOGLE_FCM) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
        } else if (pushType == PushType.RONG) {
            //实现您自定义的通知点击跳转逻辑
            return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
        } 
        return false;
    }
}

已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 自定义铃声设置

Android 8.0 以上手机需要设置 Channel 后,才能自定义推送铃声,为确保自定义铃声生效,请先创建 Channel,详细查看小米推送开发文档 (opens new window)

Channel 创建成功后,需要在融云开发者后台 (opens new window)按消息类型设置,设置成功后,所有小米手机用户离线状态下接收的该类型消息,都会使用设置的 Channel ID 进行推送,提醒铃声为注册 Channel 时设置的自定义铃声。

注:音频文件需要打包到应用中,存放在应用 raw 目录下,存储的声音文件需要有扩展名,但是不要把扩展名写在uri中。当小米手机接收音视频推送消息时,自动读取设置的文件进行声音提醒。

# 常见问题

# 1、为什么点击通知无法启动应用

​ 这个问题是由于 MIUI 的权限限制引起的,您可以尝试通过以下两个方法解决:

​ a. 手机设置 -》应用管理 -》您的应用 -》权限管理, 打开“允许后台弹出界面”。

​ b. 如果打开 “允许后台弹出界面” 权限后,仍然无法启动应用,请检查您应用的启动时间,如果从点击通知到 startActivity() 的时间超过 3 秒,MIUI 会限制启动。您需要优化应用启动时间,缩短到 3 秒以内。

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助