在即时通讯 IM 中集成小米推送

大约 3 分钟

在即时通讯 IM 中集成小米推送

即时通讯 IM SDK 中已经集成了小米推送(基于 MiPush_SDK_Client_6_0_1-C_3rd.aar)相关逻辑,你还需要完成以下步骤。

步骤一 在小米开放平台创建应用

小米开放平台open in new window 创建应用,开启推送服务。详见小米官方网站的 推送服务接入指南open in new window

步骤二 上传推送证书

声网控制台open in new window上传推送证书:

  1. 展开控制台左上角下拉框,选择需要开通即时通讯 IM 服务的项目。

  2. 点击左侧导航栏的全部产品

  3. 在下拉列表中找到即时通讯 IM 并点击。

  4. 即时通讯 IM 页面,进入功能配置标签页。

  5. 推送证书 页签下,点击添加推送证书

  6. 在弹出的对话框中,选择小米页签,配置相关参数,点击保存

image

参数类型是否必需描述
证书名称String填写小米 App ID。
推送密钥String填写小米 App Secret。
应用包名String填写小米 App package name。
Channel IDString填写 Channel ID。
ActionString选择点击通知后的动作。

步骤三 集成小米推送 SDK

  1. 下载 小米推送 SDKopen in new window ,将 aar 包添加到项目中。

  2. 配置 AndroidManifest.xml,详见 官方文档open in new window

    • 推送服务需要的权限列表:
    <!--注:若使用小米推送 SDK 3.6.12 版本,需要添加以下权限-->
    <!-- <uses-permission android:name="android.permission.GET_TASKS"/>-->  
    
    <!--注:以下三个权限在小米推送 SDK 4.8.0 及以上版本不再依赖-->
    <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
    <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />-->
    <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE"/>
    <permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE"
    android:protectionLevel="signature" /> <!--这里 `com.xiaomi.mipushdemo` 改成 app 的包名-->
    <uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" /><!--这里 `com.xiaomi.mipushdemo` 改成 app 的包名-->
    
    • 推送服务需要配置的 service 和 receiver:
    <service
        android:name="com.xiaomi.push.service.XMPushService"
        android:enabled="true"
        android:process=":pushservice" />
    
    <!--注:此 service 必须在小米推送 SDK 3.0.1 版本以后(包括小米推送 SDK 3.0.1 版本)加入-->
    <service
        android:name="com.xiaomi.push.service.XMJobService"
        android:enabled="true"
        android:exported="false"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:process=":pushservice" />
    
    <!--注:com.xiaomi.xmsf.permission.MIPUSH_RECEIVE 这里的包名不能改为 app 的包名-->
    <service
        android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
        android:enabled="true"
        android:exported="true"
        android:permission="com.xiaomi.xmsf.permission.MIPUSH_RECEIVE" />
    
    <!--注:此 service 必须在小米推送 SDK 2.2.5 版本以后(包括小米推送 SDK 2.2.5 版本)加入-->
    <service
        android:name="com.xiaomi.mipush.sdk.MessageHandleService"
        android:enabled="true" />
    
    <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"
        android:process=":pushservice">
        <intent-filter>
            <action android:name="com.xiaomi.push.PING_TIMER" />
        </intent-filter>
    </receiver>
    
  3. 自定义一个继承自即时通讯 IM SDK 中 EMMiMsgReceiver 类的 BroadcastReceiver,并进行注册:

    <receiver android:name=".common.receiver.MiMsgReceiver">
        <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>
    
  4. 在即时通讯 IM SDK 初始化的时候,配置启用小米推送。

    ChatOptions options = new ChatOptions();
    ...
    PushConfig.Builder builder = new PushConfig.Builder(this);
    builder.enableMiPush(String appId, String appKey);
    // 将 pushconfig 设置为 ChatOptions
    options.setPushConfig(builder.build());
    // 初始化 IM SDK
    ChatClient.getInstance().init(this, options);
    
上次编辑于: