全部产品

Google推送通道集成

介绍如何介入Google推送通道。

获取GCM/FCM服务器密钥

  1. Firebase创建项目,在左侧导航栏选择Cloud Messaging,进入Google推送服务。

  2. 在当前项目下新增App,下载对应App的google-services.json文件。

    google

  3. 记录2步骤中下载的json文件中的”project_number”, “mobilesdk_app_id”这两个key对应的value, 分别记录为sendId/applicationId, 下文通道初始化过程中需要用到。

  4. 在Firebase控制台的项目设置中获取服务器密钥。

    google2

控制台配置密钥

登录移动推送控制台,设置您的GCM/FCM服务器密钥,设置方法参见配置厂商通道密钥

通道集成

  1. 准备工作

    请阅读Android SDK版本说明,下载对应版本SDK或获取最新SDK配置信息。

  2. 添加依赖

    注意

    如果使用辅助通道扩展包V3.2.0及以上版本,需要将推送SDK升级到V3.2.0及以上版本。

    说明

    • 建议使用Maven集成。

    • 3.2.0及以上版辅助通道扩展包以aar形式透出,省却manifest文件配置,减少出错概率。

    • 方式一:手动集成

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

      repositories {
          flatDir {
              dirs 'libs' //this way we can find the .aar file in libs folder
          }
      }
      ...
      dependencies {
          ......
          compile(name: 'alicloud-android-third-push-x.x.x', ext: 'aar')
          compile(name: 'alicloud-android-third-push-fcm-x.x.x', ext: 'aar')
        compile ('com.google.firebase:firebase-messaging:17.6.0')
      }
    • 方式二:Maven集成

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

      allprojects {
          repositories {
              maven {
                  url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
              }
          }
      }

      gradle添加依赖:

      dependencies {
          compile 'com.aliyun.ams:alicloud-android-third-push:x.x.x'
          compile 'com.aliyun.ams:alicloud-android-third-push-fcm:x.x.x'
      }
  3. 混淆配置

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

    # GCM/FCM通道
    -keep class com.google.firebase.**{*;}
    -dontwarn com.google.firebase.**
  4. 初始化

    注意

    • 接入前手机必须安装Google Paly Services,否则注册不成功,大部分国内Android手机的谷歌服务已被剥离。

    • 辅助通道注册务必在Application中执行且放在推送SDK初始化代码之后,否则可能导致辅助通道注册失败。

    将以下代码加入你application.onCreate()方法中初始通道。

    //GCM/FCM辅助通道注册
    GcmRegister.register(this, sendId, applicationId); //sendId/applicationId为已获得的参数

    本方法不会自动判断是否支持Google系统推送,需自行判断;或者在其他厂商通道初始化都返回false的情况下再执行。

  5. Android 8+适配

    自Android 8.0(API Level 26)起,Android推出了NotificationChannel机制,旨在对通知进行分类管理。如果用户App的targetSdkVersion大于等于26,且并未设置NotificaitonChannel,那么创建的通知是不会弹出显示。

    请参见Android 8.0以上设备接收不到推送通知进行适配。

  6. 初始化成功验证

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

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

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

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

GCM/FCM场景说明

使用原生Android系统

  • 常规使用时,应用前台运行,或者多任务管理中关闭应用(杀进程),或者应用后台运行,都可以使用GCM/FCM通道推送到。

  • 设置应用管理强制关闭应用,应用将无法自启动,所以此时推送无法收到,可以看到如下日志提示,意思是强制关闭的应用不能唤起。

    GCM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.aliyun.emas.pocdemo (has extras) }
  • 开启电池性能优化时,可以设置是否允许应用后台运行:允许后台运行时,推送通道不受影响,应用是否杀进程都可以收到推送。不允许后台运行时,杀进程操作,系统会当成强制关闭应用来处理应用的运行状态,此时可能无法收到推送。

使用设备厂商的Android系统

国内部分厂商定制了Android系统,在这些系统中会把杀进程操作,当成强制关闭应用来处理,最终会导致GCM/FCM通道无法送达。此时建议接入对应厂商通道来提高应用杀进程后的推送到到达率,比如华为、小米等。

辅助通道常见问题

Android端辅助通道和弹窗问题的排查步骤

Android端辅助通道SDK与其他厂商SDK冲突

Android端阿里云移动推送与其他注册厂商如何同时获取regId

Android端辅助通道收到推送通知后单击通知无法打开相应Activity

Android端辅助弹窗启动报解析body异常

在集成移动推送辅助通道后显示“register not in main process,return”