GCM、小米、华为推送

Google 推送集成

必备条件

  • GCM 主要针对于国外用户;
  • GCM 要求设备安装有 Google Play 服务和 Google Play 商店。

设置露脸云 Android 推送证书

第 1 步:登录Google 开发平台,创建你的应用名称,应用 ID。

第 2 步:创建成功得到一个对应的 project number。

第 3 步:点击左侧 Credentials —create service key,得到 API key。

在露脸云管理后台配置证书

登录露脸云管理后台,选择你的应用—选择推送证书—新增证书,证书的名称要求填写从 Google 后台创建项目生成的 project number,证书秘钥为创建 server key 生成的 API key。

Android 客户端代码配置

在 AndroidManifest.xml 配置。

小米推送集成

需求

在大部分小米设备上,APP 默认不在系统的自启动名单里,APP 放后台后很快就被系统给杀死,没有自启动权限导致 service 不能自动重启;亦或是用户手动杀死 APP,在小米系统上 APP 基本也不能再自动重启。为了在上述情况下还能在小米手机上收到消息,需要集成小米推送(露脸云 SDK 只会在长连接是系统级别服务的小米手机上启用小米推送),这样手机在后台时也能更省电。

设置小米推送证书

进入小米推送的后台,创建一个应用,完成后得到 AppID、AppKey、AppSecret。然后,登录露脸云管理后台进行设置。

客户端配置

在 AndroidManifest.xml 中配置权限及相应 service 声明等。

    <!-- GCM特别权限 -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
 
    <!-- 此处me.chatgame.demo改成app的包名 -->
    <permission
        android:name="me.chatgame.demo.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
 
   <!-- 此处me.chatgame.demo改成app的包名 -->
    <permission
        android:name="me.chatgame.demo.permission.MIPUSH_RECEIVE"
        android:protectionLevel="signature" />
 
    <!-- 此处me.chatgame.demo改成app的包名 -->
    <uses-permission android:name="me.chatgame.demo.permission.MIPUSH_RECEIVE" />
 
    <application>
        <!-- 推送监听服务 -->
        <service
            android:name="me.chatgame.mobilecg.PushService"
            android:exported="false"
            android:label="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" />
        <!-- 注:此service必须在2.2.5版本以后(包括2.2.5版本)加入 -->
        <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>
        <receiver
            android:name="me.chatgame.mobilecg.pushreceiver.XiaomiPushReceiver"
            android:exported="true">
 
            <intent-filter>
                <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.xiaomi.mipush.ERROR" />
            </intent-filter>
        </receiver>
 
    </application>

小米推送需要开发者配置小米的AppId和AppKey, 通过CGSDKClientCreator的configXiaomiPush(xiaomiAppId, xiaomiAppKey)方法,则可以将AppId和AppKey配置到SDK中,具体用法可参见demo程序。

华为推送集成

需求

同小米推送,在华为设备上app被kill后还能继续收到消息

设置华为推送证书

进入华为开发者后台,创建应用,配置push。创建完成后,会自动生成的APP ID及APP SECRET,进入露脸云管理后台,选择你的应用—>选择推送证书。

客户端配置

在 AndroidManifest.xml 中配置权限及相应 service 声明等。

    <application>
        <!-- 华为推送相关-->
        <receiver android:name="me.chatgame.mobilecg.handler.pushservice.HuaweiPushReceiver">
            <intent-filter>
                <!-- 必须,用于接收token-->
                <action android:name="com.huawei.android.push.intent.REGISTRATION" />
                <!-- 必须,用于接收消息-->
                <action android:name="com.huawei.android.push.intent.RECEIVE" />
 
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.huawei.android.pushagent.PushEventReceiver"
            android:process=":pushservice">
            <intent-filter>
                <action android:name="com.huawei.android.push.intent.REFRESH_PUSH_CHANNEL" />
                <action android:name="com.huawei.intent.action.PUSH" />
                <action android:name="com.huawei.intent.action.PUSH_ON" />
                <action android:name="com.huawei.android.push.PLUGIN" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
 
                <data android:scheme="package" />
            </intent-filter>
        </receiver>
 
        <receiver
            android:name="com.huawei.android.pushagent.PushBootReceiver"
            android:process=":pushservice">
            <intent-filter>
                <action android:name="com.huawei.android.push.intent.REGISTER" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
            <meta-data
                android:name="CS_cloud_version"
                android:value="\u0032\u0035\u0035\u0039" />
        </receiver>
    </application>

GCM

通过GCM来保活

GCM配置

在 AndroidManifest.xml 中配置权限及相应 service 声明等。

    <application>
        <!-- Google Push 相关 -->
        <receiver
            android:name="me.chatgame.mobilecg.GcmBroadcastReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
 
                <category android:name="me.chatgame.demo" />
            </intent-filter>
        </receiver>
 
        <service
            android:name="me.chatgame.mobilecg.GcmIntentService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
 
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" /> <!-- 此处version换成开发者自己的 -->
 
    </application>