全部文档

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

# 集成推送

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

  2. 申请注册 FCM

首先,要有个 Google 开发者账号,然后登录到 Firebase 控制台 (opens new window) 创建 Firebase 项目,如下图:

  1. 如果已经有一个与应用关联的现有 Google 项目(之前集成过 GCM),请点击 Import Google Project。 否则,请点击 Create New Project

  2. 创建之后,点击 Add Firebase to your Android app 并按设置步骤进行操作。如果在导入现有 Google 项目,这可能是自动进行的,只需下载配置文件即可。

  1. 出现提示时,输入应用的包名称。输入应用使用的包名称十分重要。只有将一个应用添加至您的 Firebase 项目时才能进行此设置。

  2. 下载 google-services.json文件(可随时重新下载此文件)。

  3. 最后将下载的 json 文件 copy 到你的 App 的目录下。

上述步骤之后,你可以进入 project setting,之后点击 CLOUD MESSAGING 查看 Server key,将它设置到融云开发者平台上 FCM 密钥配置中

# 导入资源
  1. 首先在根级别的 build.gradle 文件添加 Google 服务插件
dependencies {
    classpath 'com.google.gms:google-services:4.2.0'
}

已复制
1
2
3
4
  1. 在主工程中的 build.gradle 文件中,添加 firebase 依赖
apply plugin: 'com.android.application'

android {
  // ...
}

dependencies {
  api 'com.google.android.gms:play-services:12.0.1'
  api 'com.google.firebase:firebase-messaging:17.6.0'
}

已复制
1
2
3
4
5
6
7
8
9
10
11
  1. 在主工程中的 build.gradle 文件中添加 apply plugin 行,以启用 Gradle 插件:
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
已复制
1
2
  1. build.gradle 文件和之前下载的 google-services.json 文件应该处于同一个目录下面。
  2. AndroidStudio 版本是 2.2+ ,则可以通过 Tools->Firebase. 点击 Cloud Messaging->set up Firebase Cloud Messaging. 之后从准备工作步骤 2 开始集成。不要忘了api 'com.google.android.gms:play-services:12.0.1'
# 添加配置

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

	<!-- [START firebase_service] -->
    <meta-data
      android:name="firebase_messaging_auto_init_enabled"
      android:value="false" />
    <meta-data
      android:name="firebase_analytics_collection_enabled"
      android:value="false" />

    <service
      android:name="io.rong.push.platform.google.RongFirebaseMessagingService"
      android:stopWithTask="false"
      android:exported="false">
           <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
     </service>
     <!-- [END firebase_service] -->
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启用推送服务

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

PushConfig config = new PushConfig.Builder()
        .enableFCM(true)
        .build();
RongPushClient.setPushConfig(config);
已复制
1
2
3
4
# 混淆脚本
-keep public class com.google.firebase.* {*;}
已复制
1

# 通知设置

# 通知显示

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

# 修改内容样式

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

文档是否解决您的问题 ?

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