Google推送通道集成

本文介绍如何接入Google推送通道。

准备工作

  • 已经按照Android SDK接入完成了移动推送SDK的接入。

  • 已经在Firebase创建项目,如未创建请登录Firebase创建项目,在左侧导航栏选择Cloud Messaging,进入Google推送服务。在当前项目下新增App,下载对应App的google-services.json文件。记录google-services.json文件中的”project_number”, “mobilesdk_app_id”,“project_id”,“current_key”这四个key对应的value, 分别记录为sendId/applicationId/projectId/apiKey。

    google

  • 已经在Firebase控制台的项目设置中获取服务器密钥。如未获取请参考:

    image

  • 已经在EMAS控制台配置了GCM/FCM服务器密钥,如未配置,请登录EMAS移动推送控制台,设置您的GCM/FCM服务器密钥,设置方法参见配置厂商通道密钥

第一步:将SDK添加到您的应用

我们提供了Maven依赖和本地依赖两种集成方式,方便您根据需要将SDK添加到您的应用中。

说明
  • 建议开发者采用Maven依赖方式进行集成,配置简单,不容易出问题,后续更新方便。

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

  • 3.2.2版本之前,OPPO通道依赖包已内置在alicloud-android-third-push-oppo中,无需单独添加。

1 Maven依赖方式

在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradl)中,在dependencies中添加SDK依赖。

重要
dependencies {
    implementation 'com.aliyun.ams:alicloud-android-third-push:x.x.x'
    implementation 'com.aliyun.ams:alicloud-android-third-push-fcm:x.x.x'
}

2 本地依赖方式

2.1 下载SDK

参考下载和集成SDK,选择移动推送进行下载,将SDK包内所有文件拷贝至您的模块(应用级)的<project>/<app-module>/libs目录下。

2.2 添加SDK依赖

2.2.1 配置本地SDK目录

在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle)中,添加本地SDK文件目录地址。

repositories {
  flatDir {
    dirs 'libs'
  }
}

2.2.2 添加SDK依赖

在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle)中,的dependencies中添加SDK依赖。

dependencies {
    implementation(name: 'alicloud-android-third-push-x.x.x', ext: 'aar')
    implementation(name: 'alicloud-android-third-push-fcm-x.x.x', ext: 'aar')
    implementation ('com.google.firebase:firebase-messaging:x.x.x')
}

第二步:配置使用SDK

1 SDK初始化

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

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

  • 移动推送SDK版本为3.7.7之前的用户,在升级过程中,需更新代码中的sendId、applicationId、projectId、apiKey参数,参数获取方式请参见:GCM/FCM场景说明

通过如下方式进行初始化:

//GCM/FCM辅助通道注册
//sendId/applicationId/projectId/apiKey 请查看准备工作中的信息
GcmRegister.register(applicationContext, sendId, applicationId, projectId, apiKey);
//GCM/FCM辅助通道注册
//sendId/applicationId/projectId/apiKey 请查看准备工作中的信息
GcmRegister.register(applicationContext, sendId, applicationId, projectId, apiKey); 
说明

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

2 混淆配置

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

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

第三步:接入验证

1 打开SDK日志

val pushService = PushServiceFactory.getCloudPushService()
//仅适用于Debug包,正式包不需要此行
pushService.setLogLevel(CloudPushService.LOG_DEBUG)
CloudPushService pushService = PushServiceFactory.getCloudPushService();
//仅适用于Debug包,正式包不需要此行
pushService.setLogLevel(CloudPushService.LOG_DEBUG);      

2 确认成功方法

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

05-19 19:18:44.530 19153-19177/com.xxx D/MPS:GcmRegister: fcm token is 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:[......]

后续步骤

您已经可以通过EMAS后台将推送通知通过辅助通道推送到手机通知栏,但是要处理点击通知后的逻辑,只能通过辅助弹窗来接收推送数据,详情请参见辅助弹窗接入

重要
  • 使用移动推送进行厂商通道推送时(使用移动推送控制台或者OpenAPI进行推送时),服务端请必须参考辅助弹窗文档进行服务端配置,服务端参数不设置,不会给厂商通道进行推送。

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"