移动推送辅助通道配置

[本页目录]

小米/华为/FCM/OPPO/VIVO/魅族 系统推送支持


1. 相关概念

  • 辅助通道:移动推送针对小米、华为、VIVO、OPPO、魅族等设备管控较严的情况,分别接入了相应的设备厂商推送辅助通道以提高这些设备上的到达率。移动推送优先选择自有通道进行推送消息下发,只有在自有通道断连时才会选择辅助通道下发消息。当辅助通道通过华为、小米等各设备厂商推送服务下发透传消息,消息到达应用后,会经移动推送SDK处理触发onNotification,onMessage回调。设备厂商推送服务在下发透传消息时并不保证会拉起被杀死进程(相关机制可参考小米、华为等各设备厂商推送服务官网),所以辅助通道在进程被杀死情况下无法保证消息一定到达。FCM辅助通道主要可实现在海外网络不可达时,通过该通道进行消息送达,在应用进程杀死情况下的,无法保证消息一定到达。
  • 辅助弹窗:辅助弹窗通过系统通道下发通知,可以在进程被杀死情况下推送成功。由于辅助弹窗通过对应设备上的推送通知实现,因而通过辅助弹窗下发的通知不会触发onNotification回调。当前移动推送已接入小米、华为、OPPO、VIVO、魅族辅助弹窗。其中华为弹窗到达率统计只覆盖用户点击华为弹窗推送通知的场景,未点击部分暂未覆盖;小米弹窗到达率统计覆盖所有场景。

2. 配置应用

  • 小米开放平台 注册你的App, 得到相应的小米AppID,小米AppKey,小米AppSecert。在控制台应用配置设置你的小米AppSecert。(注意:最新的小米开放平台是分开 push 功能的,需要在 push 功能区 开通/启用 推送功能

  • 华为开发者联盟 注册 App,应用审核通过后,能够得到华为的AppID和AppSecert。在控制台应用配置中设置你的应用 AppID 和 AppSecert。(注意:最新的华为开放平台是分开push功能的,需要在push功能区 开通/启用 推送功能),华为后台添加消息回执回调地址,https://agoo-ack.m.taobao.com/hw/

    https 证书填入以下内容:

    <pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

    1. -----BEGIN CERTIFICATE-----
    2. MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
    3. A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
    4. b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
    5. MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
    6. YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
    7. aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
    8. jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
    9. xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
    10. 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
    11. snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
    12. U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
    13. 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
    14. BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
    15. AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
    16. yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
    17. 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
    18. AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
    19. DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
    20. HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
    21. -----END CERTIFICATE-----

    </pre>

  • FCM推送平台 创建项目(注:Google已将GCM推送迁移至firebase,改称FCM)。接入前提手机必须安装google play services, 否则注册不成功, 大部分国内的手机是谷歌服务被剥离了:

    • 在Firebase控制台需要先创建一个项目,然后再在项目下新增App

    • 下载对应App的google-services.json文件, 我们只需要这个json文件中的”project_number”, “mobilesdk_app_id”这两个key对应的value, 分别记录为sendId/applicationId, 下面注册过程中需要用到:

    • 在Firebase控制台获取服务器密钥,并将其设置在移动推送控制台中的GCM/FCM服务器密钥域内。当前只支持老版服务器密钥

  • OPPO开放平台 注册OPPO企业开发者账号,添加应用并开通oppo推送服务,目前应用需满足:1.在oppo市场上架,2.评级为A,才能使用推送服务,具体政策可咨询oppo客服。同样需要在控制台应用配置设置你的OppoAppkey和OppoMasterSecret(AppServerSecret )。

  • VIVO开放平台 注册账号及创建应用(注:vivo需要企业开发者账号),审核通过后,能够得到应用的AppID、AppKey和AppSecret。在控制台应用配置中设置你的VIVO应用AppID、AppKey以及AppSecret。

  • Flyme 开放平台 注册账号及创建应用,审核通过后,能够得到应用的AppID和AppSecret。在控制台应用配置中设置你的应用AppID和AppSecret,同时一定要在Flyme控制台上设置回执地址为:http://agoo-ack.m.taobao.com/mz/https://agoo-ack.m.taobao.com/mz/ ,否则可能会收不到推送消息。

3. 下载扩展包

3.1 手动集成

将辅助通道扩展包下载解压后拷贝到你项目的Lib目录下,下载地址。如果使用辅助通道扩展包v3.0.4及以上版本,需要将推送SDK升级到v3.0.11及以上版本。新版辅助通道扩展包以aar形式透出,省却manifest文件配置,减少出错概率。

将辅助通道扩展包放置到app module的libs路径下,并在app module的build.gradle文件中添加如下配置:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. repositories {
  2. flatDir {
  3. dirs 'libs' //this way we can find the .aar file in libs folder
  4. }
  5. }
  6. ...
  7. dependencies {
  8. ......
  9. compile(name: 'alicloud-android-third-push-3.0.8', ext: 'aar')
  10. }

</pre>

3.2 Maven集成

  • 项目顶层build.gradle中添加Maven仓库地址:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. allprojects {
  2. repositories {
  3. maven {
  4. url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
  5. }
  6. }
  7. }

</pre>

  • gradle添加依赖:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. dependencies {
  2. compile 'com.aliyun.ams:alicloud-android-third-push:3.0.9@aar'
  3. }

</pre>

OPPO、魅族、VIVO 通道 需使用 v3.0.9 版本,另外每个平台对应用接入的要求不同,请查看各平台官网说明.

3.3 Firebase依赖

如需配置GCM/GCM通道还需要添加Firebase SDK依赖:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. dependencies {
  2. ......
  3. compile ('com.google.firebase:firebase-messaging:17.6.0')
  4. }

</pre>

3.4 Huawei依赖

如需配置华为通道还需要添加华为推送SDK依赖:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. dependencies {
  2. ......
  3. compile 'com.aliyun.ams:huawei-push:2.6.3.305'
  4. compile 'com.aliyun.ams:huawei-push-base:2.6.3.305'
  5. }

</pre>

同时在AndroidManifest文件中添加如下配置:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. <meta-data
  2. android:name="com.huawei.hms.client.appid"
  3. android:value="appid=华为开放平台申请的ID信息" />

</pre>

3.5 魅族依赖

如需配置魅族通道还需要添加魅族推送SDK依赖:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. dependencies {
  2. ......
  3. compile 'com.aliyun.ams:meizu-push:3.8.3-fix'
  4. }

</pre>

3.6 VIVO依赖

在AndroidManifest文件中添加如下配置:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. <meta-data
  2. android:name="com.vivo.push.api_key"
  3. android:value="请填写vivo平台上注册应用的appKey" />
  4. <meta-data
  5. android:name="com.vivo.push.app_id"
  6. android:value="请填写vivo平台上注册应用的appID" />

</pre>

4. Proguard配置

  • 如果集成推送SDK的工程开启代码混淆,在Proguard配置的基础上,需要添加以下辅助通道的Proguard配置。

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. # 小米通道
  2. -keep class com.xiaomi.** {*;}
  3. -dontwarn com.xiaomi.**
  4. # 华为通道
  5. -keep class com.huawei.** {*;}
  6. -dontwarn com.huawei.**
  7. # GCM/FCM通道
  8. -keep class com.google.firebase.**{*;}
  9. -dontwarn com.google.firebase.**
  10. # OPPO通道
  11. -keep public class * extends android.app.Service
  12. # VIVO通道
  13. -keep class com.vivo.** {*;}
  14. -dontwarn com.vivo.**
  15. # 魅族通道
  16. -keep class com.meizu.cloud.** {*;}
  17. -dontwarn com.meizu.cloud.**

</pre>

5. 在应用中初始化辅助通道

将以下代码加入你application.onCreate()方法中初始通道。注意:辅助通道注册务必在Application中执行且放在推送SDK初始化代码之后,否则可能导致辅助通道注册失败

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. // 注册方法会自动判断是否支持小米系统推送,如不支持会跳过注册。

  2. MiPushRegister.register(applicationContext, "小米AppID", "小米AppKey");

  3. // 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。

  4. HuaWeiRegister.register(application);

  5. //GCM/FCM辅助通道注册

  6. GcmRegister.register(this, sendId, applicationId); //sendId/applicationId为步骤获得的参数

  7. // OPPO通道注册

  8. OppoRegister.register(applicationContext, appKey, appSecret); // appKey/appSecret在OPPO开发者平台获取

  9. // 魅族通道注册

  10. MeizuRegister.register(applicationContext, "appId", "appkey"); // appId/appkey在魅族开发者平台获取

  11. // VIVO通道注册

  12. VivoRegister.register(applicationContext);

</pre>

本方法会自动判断是否支持小米系统推送,如不支持会跳过注册。

6. 在日志中查看初始化情况

华为通道初始化成功,可以看到以下日志:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. 11-11 22:21:33.671 30248-30324/com.xxx E/MPS:HuaWeiRegister: HuaWeiRegister checkDevice flag=true //确认是华为的手机
  2. 11-11 22:21:33.674 30248-30324/com.xxx E/MPS:HuaWeiRegister﹕ Register huawei push............ //开始注册华为手机
  3. 11-11 22:21:33.714 29643-30328/com.xxx E/MPS:HuaWeiRegister﹕ huawei register success,token = 08657430243125472000000411000001

</pre>

小米通道初始化成功,可以看到以下日志:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. 12-09 22:20:39.710 19566-19566/com.xxx E/MPS:MiPushRegister: MiPushRegister checkDevice flag=true //确认是小米的手机
  2. 12-09 22:20:39.712 19566-19566/com.xxx E/MPS:MiPushRegister: Register mipush. //开始注册小米
  3. 12-09 22:20:40.596 19566-19733/com.xxx E/MPS:MiPushRegister: XiaoMi register success. //小米注册成功 regid=d//igwEhgBGCI2TG6lWqlCesc0I6xE1wUhNCBXQ8uNOi/dDZioYXVysbrVrvRmyEVPn9nWz92D28IzYbA1RzoGDyTzYZwXKfBHEQkrey4G8=

</pre>

GCM/FCM通道初始化成功,可以看到以下日志:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. 05-19 19:18:44.530 19153-19177/com.xxx D/MPS:GcmRegister: token from register: eWIXLYCNP0Q:APA91bFUAgxj6XYf5okyoCBnRPw1UwITndzXrvPDgbdI2N44PYm17hFEBiNXNQJrJ8bOG_xjw3c3UPDAhzNMTLNjlAKcjUanKyLA6E3k4wEmgZuhgUT02UMmMvH2LVA1L2Z4-l-cT_Ug

</pre>

OPPO通道是否注册成功, 可以通过过滤MPS:oppo关键字查看, 注册成功会打印onRegister regid=****相关日志, 否则检查参数是否正确填入;

VIVO通道是否注册成功, 可以通过过滤MPS:vivo关键字查看, 注册成功会打印getRegId regId:****相关日志, 否则检查参数是否正确填入;

收到小米通道下行的消息:(需要将sdk日志等级设置到DEBUG)

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. 12-09 22:24:34.065 19566-25042/com.xxx D/MPS:MiPushReceiver: onReceiveMessage,msg=[{"f":262,"b":"{\"content\"\ ... ... ,"i":"f__-rnje3_OH74gE|VG0g3kwMnGADAGrXZku1FFW5"}]

</pre>

收到GCM/FCM通道下发的消息:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. 05-19 19:20:04.900 19153-20391/com.alibaba.push2 D/MPS:GcmRegister: onReceiveMessage payload msg:[......]

</pre>

若小米通道注册失败(未看到小米注册成功日志),请查看系统日志(logcat设置NoFilters),以PushService|BroadcastQueue为正则式进行过滤,示例如下图:

注1:如果控制台配置了小米/华为的信息,app需要加对应的jar包依赖,不然会有crash的风险。

客户端接入完毕,服务端推送时如果设备无法收到推送,可先查看 移动推送Android SDK:Android辅助通道和弹窗排查步骤

7. 辅助弹窗

  • 当前部分国产品牌设备管控严格,接入推送功能的App进程在后台被清理后,收不到推送通知;接入辅助弹窗后,可以借助对应品牌的系统通道,保证App后台被清理后,仍能收到推送通知;
  • 当前辅助弹窗已接入小米、华为、OPPO、VIVO、魅族(小米辅助弹窗:v2.3.0及以上支持;华为辅助弹窗:v3.0.8及以上支持;OPPO辅助弹窗:v3.1.4及以上支持);
  • 当前华为辅助弹窗仅支持Emotion UI(华为定制ROM)4.1级以上版本的设备;

7.1 客户端

  • 该功能的使用需要接入推送辅助通道,确保使用最新的辅助通道扩展包,具体参考上文;

  • 辅助弹窗送达的通知展示效果,和普通通知相同;

  • 服务端指定辅助弹窗通道推送时,一定要指定通知点击后要打开的Activity,该Activity需继承自抽象类AndroidPopupActivityMiPushSystemNotificationActivity已废弃,小米、华为、OPPO等厂商通道弹窗统一继承AndroidPopupActivity),否则无法获取到通知的相关信息,并且会影响通知到达率的统计;

  • AndroidPopupActivity中提供抽象方法onSysNoticeOpened(),实现该方法后可获取到辅助弹窗通知的标题内容额外参数,在通知点击时触发,原本的通知回调onNotification()onNotificationOpened()不适用于辅助弹窗;

  • 指定打开的托管弹窗Activity在AndroidManifest.xml中注册时需要声明属性:android:exported=true

  • 接入如下所示:

<pre class="prettyprint linenums prettyprinted" data-spm-anchor-id="a2c4g.11186623.2.i45.738e5b3bmRrvUC" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. import com.alibaba.sdk.android.push.AndroidPopupActivity;

  2. public class PopupPushActivity extends AndroidPopupActivity {

  3. static final String TAG = "PopupPushActivity";

  4. @Override

  5. protected void onCreate(Bundle savedInstanceState) {

  6. super.onCreate(savedInstanceState);

  7. }

  8. /**

  9. * 实现通知打开回调方法,获取通知相关信息

  10. * @param title 标题

  11. * @param summary 内容

  12. * @param extMap 额外参数

  13. */

  14. @Override

  15. protected void onSysNoticeOpened(String title, String summary, Map<String, String> extMap) {

  16. Log.d("OnMiPushSysNoticeOpened, title: " + title + ", content: " + summary + ", extMap: " + extMap);

  17. }

  18. }

</pre>

7.2 服务端

  • OpenAPI 2.0的推送高级接口提供了AndroidPopupActivityAndroidPopupTitleAndroidPopupBody三个参数,分别用于设置辅助弹窗通知打开时跳转的Activity、通知标题以及通知内容(注意:StoreOffline参数也需要设置为true);

  • 辅助弹窗仅对后台进程被清理的小米/华为/VIVO/OPPO/魅族 设备生效,对非接入厂商通道设备和在线的设备不生效;

  • 当辅助弹窗生效时,推送接口的TitleBodyAndroidActivity以及额外参数设置中的功能性设置(如声音、震动等)都不起作用;

  • <pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

    1. PushRequest pushRequest = new PushRequest();
    2. // 其余设置省略
    3. // 通知
    4. pushRequest.setPushType("NOTICE");
    5. // 标题
    6. pushRequest.setTitle(dateFormat.format(new Date()));
    7. // 内容
    8. pushRequest.setBody("PushRequest body");
    9. // 额外参数
    10. pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
    11. // 设置辅助弹窗打开Activity
    12. pushRequest.setAndroidPopupActivity("*****");
    13. // 设置辅助弹窗通知标题
    14. pushRequest.setAndroidPopupTitle("*****");
    15. // 设置辅助弹窗通知内容
    16. pushRequest.setAndroidPopupBody("*****");

    </pre>

7.3 场景解析

以下几种普通推送结合辅助弹窗推送的场景,帮助您快速理解辅助弹窗功能的配置。

客户端配置

客户端有Main、Second两个Activity,MainActivity为App打开主页面,SecondActivity extends AndroidPopupActivity;

  • 普通通知回调配置:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. public class MyMessageReceiver extends MessageReceiver {
  2. /**
  3. * 推送通知的回调方法
  4. * @param context
  5. * @param title
  6. * @param summary
  7. * @param extraMap
  8. */
  9. @Override
  10. public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
  11. Log.d(TAG, "Receive notification, title: " + title + ", content: " + summary + ", extraMap: " + extraMap);
  12. }
  13. }

</pre>

  • MainActivity定义:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. package com.alibaba.push.testdemo;

  2. public class MainActivity extends Activity {

  3. @Override

  4. protected void onCreate(Bundle savedInstanceState) {

  5. Log.d(TAG, "Main");

  6. }

  7. }

</pre>

  • SecondActivity定义:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. package com.alibaba.push.testdemo;

  2. import com.alibaba.sdk.android.push.AndroidPopupActivity;

  3. public class SecondActivity extends AndroidPopupActivity {

  4. /**

  5. * 辅助弹窗指定打开Activity回调

  6. * @param title 标题

  7. * @param content 内容

  8. * @param extraMap 额外参数

  9. */

  10. @Override

  11. protected void onSysNoticeOpened(String title, String content, Map<String, String> extraMap) {

  12. Log.d(TAG, "Receive XiaoMi notification, title: " + title + ", content: " + content + ", extraMap: " + extraMap);

  13. }

  14. }

</pre>

场景1:普通推送打开App + 辅助弹窗

服务端配置如下:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. PushRequest pushRequest = new PushRequest();
  2. // 其余设置省略
  3. // 通知
  4. pushRequest.setPushType("NOTICE");
  5. // 标题
  6. pushRequest.setTitle("hello");
  7. // 内容
  8. pushRequest.setBody("PushRequest body");
  9. // 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
  10. pushRequest.setAndroidOpenType("APPLICATION");
  11. // 设置辅助弹窗打开Activity
  12. pushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");
  13. // 设置辅助弹窗通知标题
  14. pushRequest.setAndroidPopupTitle("hello2");
  15. // 设置辅助弹窗通知内容
  16. pushRequest.setAndroidPopupBody("PushRequest body2");
  17. // 设定android类型设备通知的扩展属性
  18. pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");

</pre>

推送结果:

  • 非小米、华为等厂商通道设备和在线设备

    • 收到普通推送通道弹出的通知,点击后打开App,进入首页MainActivity,如果设备在前台,保持当前界面不变;
    • onNotification()回调输出Receive notification, title: hello, content: PushRequest body, extraMap: {k1=android, k2=v2}
  • 清理进程后的小米、华为等厂商通道设备

    • 辅助弹窗通道弹出通知,点击后跳转到SecondActivity
    • onSysNoticeOpened()回调输出Receive XiaoMi notification, title: hello2, content: PushRequest body2, extraMap: {k1=android, k2=v2}

场景2:普通推送打开Activity + 辅助弹窗

服务端配置如下:

<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; padding: 10px; margin: 0px 0px 25px; overflow: auto; font: 14px/1.45 "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; background: rgb(247, 247, 247); overflow-wrap: break-word; white-space: pre-wrap;">

  1. PushRequest pushRequest = new PushRequest();
  2. // 其余设置省略
  3. // 通知
  4. pushRequest.setPushType("NOTICE");
  5. // 标题
  6. pushRequest.setTitle("hello");
  7. // 内容
  8. pushRequest.setBody("PushRequest body");
  9. // 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
  10. pushRequest.setAndroidOpenType("ACTIVITY");
  11. // 指定普通推送要打开的Activity
  12. pushRequest.setAndroidActivity("com.alibaba.push.testdemo.SecondActivity");
  13. // 设置辅助弹窗打开Activity
  14. pushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");
  15. // 设置辅助弹窗通知标题
  16. pushRequest.setAndroidPopupTitle("hello2");
  17. // 设置辅助弹窗通知内容
  18. pushRequest.setAndroidPopupBody("PushRequest body2");
  19. // 设定android类型设备通知的扩展属性
  20. pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");

</pre>

推送结果:

  • 非小米、华为等厂商通道设备和在线设备

    • 收到普通推送通道弹出的通知,点击后跳转到SecondActivity
    • onNotification()回调输出Receive notification, title: hello, content: PushRequest body, extraMap: {k1=android, k2=v2}
  • 清理进程后的小米、华为等厂商通道设备

    • 辅助弹窗通道弹出通知,点击后跳转到SecondActivity
    • onSysNoticeOpened()回调输出Receive XiaoMi notification, title: hello2, content: PushRequest body2, extraMap: {k1=android, k2=v2}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容