推送

网易云通信 Cocos2dx SDK 1.2.0 引入华为和小米推送,当用户杀掉进程或者云信服务器无法连接到客户端时,使用手机厂商系统级推送提醒用户消息到达。系统级别的推送(小米、华为等)的相比其他推送(个推、极光)的优势在于,系统推送在相应的厂商系统上拥有稳定的系统级长连接,可以做到随时接受推送消息。Unity SDK 只提供接收消息推送的通道,对推送通知的处理如应用内跳转等逻辑需要应用根据实际情况自己实现。

厂商推送 条件说明 推送SDK版本 云信SDK版本
小米 支持全系列 MIUI 3.6.0 1.5.0
华为 EMUI4.1及以上并同时满足华为移动服务版本 2.5.2 及以上 2.5.2.300 1.5.0

遵循按需使用的原则,云信 SDK 并不包含第三方推送SDK,开发者按照自己需求自行导入推送SDK。集成一个系统级推送的步骤可以简要归纳如下:

完成上述过程,编译Apk安装到支持该系统级推送的手机上,登陆成功并且杀掉进程,使用其他账号对其发送消息,查看通知栏推送。

注意: demo 仅仅是提供集成示例,具体应用需要开发者参考实际需求进行开发。云信SDK本身只需要得到token,推送sdk其他的功能需求开发者可以自行去开发。

下面详细介绍每个推送平台的配置。

小米推送

集成小米推送需要以下几个步骤:

准备工作

小米推送证书管理

在Android推送证书一栏选择添加证书,随后在如下图所示的弹出框中填写对应的信息,其中应用包名填写开发者 Android 应用的包名,AppSecret 填写第一步在小米官网创建应用所获取的 AppSecret。

添加小米推送证书

接入流程

快速接入只需要2步,详细可参考小米推送Android SDK使用指南

1. AndroidManifest.xml 配置

首先,在权限配置里面,有2处需要改成开发者自己的 APP 包名,已经配置过的条目则无须添加。

<!--配置权限,已经配置过的条目则无须添加-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE"/>

<!--以下两处 {你的包名} 改开发者App的包名-->
<permission android:name="{你的包名}.permission.MIPUSH_RECEIVE"
            android:protectionLevel="signature" />
<uses-permission android:name="{你的包名}.permission.MIPUSH_RECEIVE" />

下面这些配置直接拷贝到AndroidManifest.xml。

<!--配置的service和receiver-->
<service
    android:name="com.xiaomi.push.service.XMJobService"
    android:enabled="true"
    android:exported="false"
    android:permission="android.permission.BIND_JOB_SERVICE"
    android:process=":pushservice" />

<service
    android:name="com.xiaomi.push.service.XMPushService"
    android:enabled="true"
    android:process=":pushservice" />

<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" />

<!--org.cocos2dx.cpp 替换成你的包名-->
<receiver
    android:name="org.cocos2dx.cpp.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>
<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>

2. 上传token和证书

简单来说,在cocos2dx的android studio 工程中,通过推送sdk获取得到token,然后通过jni机制将token传递给云信sdk,在登录成功之后将得到的token和云信后台配置的证书名传递给服务器。Cocos2dx Demo 提供了获取小米推送token的示例,参考demo 源码。

至此,小米推送接入完成,现在可以在小米设备上进行消息推送的测试。

华为推送

华为推送从新版 HMS 包开始采用了和小米推送相似的系统级连接方案,但是依赖于EMUI版本和华为移动服务版本,经过大量测试表明,EMUI4.1及以上并同时满足华为移动服务版本 20502000 以上时比较稳定能收到通知栏推送消息。

集成华为推送需要以下几个步骤:

准备工作

在Android推送证书一栏选择添加证书,随后在弹出框中填写对应的信息,其中应用包名填写开发者 Android 应用的包名,AppSecret 填写第一步在华为官网创建应用所获取的 AppSecret,请开发者谨记证书名,这个会在 SDK初始化推送的时候使用。

接入流程

快速接入华为推送只需要2步,详细可参考华为推送接入文档

AndroidManifest.xml 配置可参考 配置manifest文件

1. 配置华为推送appid

在AndroidManifest.xml中,Application节点添加配置appid

<!-- 填入华为推送平台配置的应用appid -->
<meta-data
    android:name="com.huawei.hms.client.appid"
    android:value="{你的华为推送appid}" />

2. 在Application节点下增加2个receiver,用来接收广播信息

 <!-- 第三方相关 :接收Push消息(注册、Push消息、Push连接状态)广播 -->
<receiver android:name="com.netease.hwpushwrapper.PushBroadcastReceiver">
    <intent-filter>
        <!-- 必须,用于接收token -->
        <action android:name="com.huawei.android.push.intent.REGISTRATION"/>
        <!-- 必须,用于接收消息 -->
        <action android:name="com.huawei.android.push.intent.RECEIVE"/>
        <!-- 可选,用于点击通知栏或通知栏上的按钮后触发onEvent回调 -->
        <action android:name="com.huawei.android.push.intent.CLICK"/>
        <!-- 可选,查看push通道是否连接,不查看则不需要 -->
        <action android:name="com.huawei.intent.action.PUSH_STATE"/>
    </intent-filter>
</receiver>
<receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver" >
    <intent-filter>
        <!-- 接收通道发来的通知栏消息,兼容老版本PUSH -->
        <action android:name="com.huawei.intent.action.PUSH" />
    </intent-filter>
</receiver>

3. 获取token和上传

通过华为推送sdk接口获取得到token,同样是通过jni机制将token传递给云信sdk,通过接口nim::User::UpdatePushToken将在云信管理后台配置的证书和token提交到云信服务器。具体参考demo源码。

注意:该函数需要在登录成功以后才能调用。

至此,华为推送接入完成,现在可以在满足条件的华为设备上进行消息推送测试。

上传推送Token

完成推送配置获取到推送Token后需要将配置信息上传到网易云信服务器,服务器才能正确下发推送消息。该接口需要在登录成功后才能调用。

static void UpdatePushToken(const std::string& cer_name, const std::string& token, int type);
参数 说明
cer_name 在云信后台配置的证书名称
token 获取得到的小米或者华为推送的token
type 默认填0,预留字段
//通过小米或者华为推送sdk获取得到 token
std::string token = "xxxxxx";
std::string cerName = "对应配置的证书名";
nim::User::UpdatePushToken(cerName,token,0);