跳转至

小米

准备工作

一 前往小米开放平台 注册账号,通过认证后创建应用,并记录下应用的 AppID、AppKey、AppSecret。

二 前往融云开发者后台,在“应用标识 -> Android -> 小米推送设置” 一栏中,填写上一步在小米开放平台申请的应用 AppSecret 以及通知标题。

设置 AppSecret 后,即表示开通小米推送功能,在小米 ROM 上面会优先使用系统级别的小米推送,从而提高推送到达率。如不想使用小米推送,将设置项保存为空即可,设置后 2 小时内生效。

小米推送通知标题,是指手机端接收到小米推送后需要展示的通知标题。

接入流程

导入推送 SDK

请从小米开放平台 或者融云官网下载小米 SDK ,并将小米 SDK jar 导入到你的应用 module 的 libs 目录下,然后右键-》Add as library

添加推送配置

在应用 module 的 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>
 <!-- 小米 配置结束 < -->
启用推送服务

最后,在调用融云初始化 API (即 RongIM.init() 或 RongIMClient.init()) 之前,新建一个 PushConfig 对象,通过 PushConfig.Builder.enableMiPush() 配置小米推送,并通过 RongPushCient.setPushConfig() 设置到 SDK 中。

PushConfig config = new PushConfig.Builder()
        .enableMiPush("", "")
        .build();
RongPushClient.setPushConfig(config);
RongIM.init(this);

至此,小米推送适配完成。 现在可以将 APP 安装至小米设备上,进行消息推送的测试。

推送通知事件

一 通知方式

由于小米的透传推送,要求应用在后台处于启动状态,这样不能保证推送的及时性,所以在使用小米推送时,我们默认使用的是小米通知栏推送方式,即由小米系统直接弹出通知。所以不支持自定义通知显示。

二 捕捉通知到达事件

您可以通过融云 SDK 快速集成时,自定义的广播接收器的 onNotificationMessageArrived() 来捕捉通知到达事件。如下所示:

public class 自定义的广播接收器 extends PushMessageReceiver {
  @Override
  public boolean onNotificationMessageArrived(Context context, PushType pushType, PushNotificationMessage pushNotificationMessage) {
    //此时通知已由小米系统弹出并显示,仅可以在此处捕捉 pushNotificationMessage 中的相关信息。
    return false;
  }
  ...
}
备注 :上面事件的回调,需要用户打开自启动权限。

三 自定义通知点击事件

使用小米推送时,在小米手机上点击推送通知,默认打开会话列表页面。

您也可以通过融云 SDK 快速集成时,自定义的广播接收器的 onNotificationMessageClicked() 回调中,自定义通知点击事件。如下所示:

public class 自定义的广播接收器 extends PushMessageReceiver {
  ...
  @Override
  public boolean onNotificationMessageClicked(Context context, PushType pushType, NotificationMessage message) {
    //实现您自定义的通知点击跳转逻辑
    return true; // 此处返回 true. 代表不触发 SDK 默认实现,您自定义处理通知点击跳转事件。
  }
}

冲突处理

如果应用本身的业务体系已接入了小米推送,在通过融云接入小米推送时,会导致继承自小米 PushMessageReceiver 的自定义广播和融云 MiMessageReceiver 冲突。

这时候需要将继承自小米 PushMessageReceiver 的广播改为继承自融云 SDK 中的 MiMessageReceiver。在回调事件中判断如果是融云业务,调用父类方法,否则调用自身业务逻辑。另

外还需要在 AndroidManifest.xml 里将 MiMessageReceiver 改为您自定义的广播接收器名称。