全部文档

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

# 功能描述

IMLib 中已经内置了推送功能 RongPush. RongPush 是通过在云端和客户端之间维护一条稳定可靠的长链接通道,从云端发送各类消息至客户端并以通知形式展现的服务。应用被杀掉或者调用了 SDK 中的 disconnect 方法后, 也想接收到消息, 那就需要集成推送功能.

  • 国内应用

    由于国内手机厂商的限制, RongPush 在国内部分机型上无法存活. 为了更好的推送体验, 应用需集成手机厂商的三方推送. 目前融云以适配集成了 小米华为魅族OPPOvivo 三方推送.

  • 国外应用

    国外应用需集成 FCM.

  1. SDK 2.9.9 版本开始,融云推送功能进行升级,集成方式请参考以下文档说明。如使用的是 2.9.9 之前的 SDK 集成可参考 集成文档 (opens new window).
  2. 须先集成融云 IMKitIMLib SDK , 才能正常使用推送功能.

# 推送通道策略

SDK 内部优先注册使用当前机型厂商的三方推送, 三方推送注册成功, 则会使用三方推送; 当没有集成三方推送或集成失败, 则会使用融云推送.

融云推送属于应用级别的推送,会受系统各种权限限制,需在设置里打开自启动权限和通知权限,或者勾选 信任此应用 等,以提高推送到达率。

# 集成推送

  1. 集成 IMLib SDK. 详细可查看 IMLib 快速集成

  2. 融云开发者后台 -> 应用标识 -> Android -> ApplicationID 一栏填写应用的唯一标识。

# 启用推送服务

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

PushConfig config = new PushConfig.Builder()
        .build();
RongPushClient.setPushConfig(config);
已复制
1
2
3
# 混淆脚本

详细可参考 混淆

# 通知设置

# 通知显示

SDK 内部已经实现了接收到 RongPush 推送消息后显示通知栏的逻辑.

# 修改内容样式

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 中默认通知栏无法满足需求, 可自定义通知栏.

  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 类中复写 onNotificationMessageArrived 方法. 在此方法中做拦截, 然后实现跳转逻辑.

参数说明

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

已复制
1
2
3
4
5
6
7
8
9
10
11
12
# 通知点击事件
# 配置跳转界面

融云 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

文档是否解决您的问题 ?

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