====== FCM推送升级 ====== ---- ==== 说明 ==== *Google官方推出了GCM的升级版通知工具FCM([[https://firebase.google.com/|Firebase Cloud Messaging]]),并强烈建议开发者使用FCM。 *新注册项目已不能使用GCM推送服务,所以新项目只能使用FCM推送功能。 *Google官方称会继续维护GCM推送,所以SDK中仍然保留GCM推送功能,之前使用GCM推送的项目可以继续使用GCM推送。GCM相关配置详见[[im:200androidclientintegration:115thirdpartypush|第三方推送集成]] *该文档中所指环信SDK Demo为SDK v3.3.5所对应官方Demo ==== 必备条件 ==== * FCM 使用针对于国外用户; * FCM 要求设备安装有 Google Play 服务和 Google Play 商店。 ---- ==== 继续使用GCM推送 ==== SDK中仍然保留GCM推送相关功能,由于GCM依赖库和FCM依赖库版本必须对应(否则会出现类冲突的错误),所以需要删除libs目录下的google-play-services.jar文件,环信官方SDK demo文件位置如下图所示。 {{:im:200androidcleintintegration:3.3.5_google_jar.png?direct&400|删除google-service.jar}} 并把''compile 'com.google.android.gms:play-services-gcm:11.4.0'''该行配置放在项目相应的build.gradle文件中,SDK demo中的该配置在easeui/build.gradle中,如下: dependencies { // 添加此行 compile 'com.google.android.gms:play-services-gcm:11.4.0' } ==== GCM升级FCM ==== === - 服务端 === 1.登录[[https://console.firebase.google.com/|Firebase管理后台]] 2.在Firebase欢迎界面选择 **Import Google Project**。 3.在项目列表中选择你的GCM项目并选择 **Add Firebase**。 4.在Firebase欢迎界面选择 **Add Firebase to your Android App**。 5.选择应用类型后需要输入包名、项目昵称、SHA-1,然后点击 **Register App**。 6.进入引导页,如下图,点击按钮下载google-services.json文件到本地。//注意该json文件在Android项目中的放置位置。// {{:im:200androidcleintintegration:3.3.5_config_download.png?direct&400|}} 7.跳过引导页,点击Cloud Messaging tab页,复制Server Key和Sender ID。 {{:im:200androidcleintintegration:3.3.5_cloud_messaging.png?direct&400|}} 8.登录[[http://console.easemob.com/|环信管理后台]],选择你的应用—选择推送证书—新增证书,证书的名称要求填上方复制Sender ID,证书秘钥填写上方复制的Server Key。 {{:im:200androidcleintintegration:3.3.5_certificate_add.png?direct&600|}} {{:im:200androidcleintintegration:3.3.5_certificate_add_success.png?direct&600|}} === - 移动端 === 1. AndroidManifest.xml 中删除GCM相关权限配置 2.添加Google Play Service相关依赖库 用于检查设备是否支持Google Play Service,只有支持的设备才支持Google推送服务。 删除libs目录下的google-play-services.jar文件,环信官方SDK demo文件位置如下图所示: {{:im:200androidcleintintegration:3.3.5_google_jar.png?direct&400|删除google-service.jar}} 并把''compile 'com.google.android.gms:play-services-base:11.4.0'''该行配置添加到项目相应的build.gradle文件中,SDK demo中的配置在easeui/build.gradle中,如下: dependencies { // 添加此行 compile 'com.google.android.gms:play-services-base:11.4.0' } ''注意:Google推送相关依赖库版本必须对应(该文档中均为:11.4.0),否则可能会出现类冲突的错误。'' 3.在project-level的build.gradle中添加FCM相关库文件配置: buildscript { repositories { jcenter() } dependencies { // 添加此行 classpath 'com.google.gms:google-services:3.1.1' } } allprojects { repositories { // 添加此行 maven { url 'https://maven.google.com' } } } 4.在app-level的build.gradle中添加FCM相关库文件配置: dependencies { // 添加此行,Google Firebase cloud messaging compile 'com.google.firebase:firebase-messaging:11.4.0' } // 此行添加在文件末尾 apply plugin: 'com.google.gms.google-services' ''注意:Google推送相关依赖库版本必须对应(该文档中均为:11.4.0),否则可能会出现类冲突的错误。'' 5.放置下载的google-services.json在app-level的根目录下 {{:im:200androidcleintintegration:3.3.5_config_location.png?direct&400|}} 6.实现一个继承自FirebaseMessagingService的自定义service,该类用于FCM在后台进行接收应用推送消息的处理。并把该service注册到AndroidManifest.xml中。 自定义FirebaseMessagingService: public class EMFCMMSGService extends FirebaseMessagingService { private static final String TAG = "EMFCMMSGService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); if (remoteMessage.getData().size() > 0) { String message = remoteMessage.getData().get("alert"); Log.i(TAG, "onMessageReceived: " + message); } } } AndroidManifest.xml: 7.实现一个继承自FirebaseInstanceIdService的自定义service,该类用于监听FCM token的创建和更新。一个设备对应一个FCM token,该token用于服务端向该设备推送消息,所以该token创建或更新后需及时上传至环信服务器。 自定义FirebaseInstanceIdService: public class EMFCMTokenRefreshService extends FirebaseInstanceIdService { private static final String TAG = "FCMTokenRefreshService"; @Override public void onTokenRefresh() { super.onTokenRefresh(); String token = FirebaseInstanceId.getInstance().getToken(); Log.i(TAG, "onTokenRefresh: " + token); // Important, send the fcm token to the server EMClient.getInstance().sendFCMTokenToServer(token); } } AndroidManifest.xml: 8.将Sender ID(即创建Google推送证书时填写的证书名称)在SDK初始化前通过options.setFCMNumber(string)接口设置到options里''options.setFCMNumber(senderId)''。 9.使用 FCM 时需要在退出登录时解绑设备 token,调用''EMClient.getInstance().logout(true)''或者''EMClient.getInstance().logout(true,callback)''方法,如果是被踢的情况下,则要求设置为 false。 ==== 新用户集成FCM ==== === - 服务端 === 1.登录[[https://console.firebase.google.com/|Firebase管理后台]] 2.在Firebase欢迎界面点击 **Add Project**,输入相应内容并点击 **Create Project**。 3.在Firebase欢迎界面选择 **Add Firebase to your Android App**。 4.选择应用类型后需要输入包名、项目昵称、SHA-1,然后点击 **Register App**。 5.进入引导页,如下图,点击按钮下载google-services.json文件到本地。//注意该json文件在Android项目中的放置位置。// {{:im:200androidcleintintegration:3.3.5_config_download.png?direct&400|}} 6.跳过引导页,点击Cloud Messaging tab页,复制Server Key和Sender ID。 {{:im:200androidcleintintegration:3.3.5_cloud_messaging.png?direct&400|}} 7.登录[[http://console.easemob.com/|环信管理后台]],选择你的应用—选择推送证书—新增证书,证书的名称要求填上方复制Sender ID,证书秘钥填写上方复制的Server Key。 {{:im:200androidcleintintegration:3.3.5_certificate_add.png?direct&600|}} {{:im:200androidcleintintegration:3.3.5_certificate_add_success.png?direct&600|}} === - 移动端 === 1.添加Google Play Service相关依赖库 用于检查设备是否支持Google Play Service,只有支持的设备才支持Google推送服务。 把''compile 'com.google.android.gms:play-services-base:11.4.0'''该行配置添加到项目相应的build.gradle文件中,SDK demo中的配置在easeui/build.gradle中,如下: dependencies { // 添加此行 compile 'com.google.android.gms:play-services-base:11.4.0' } ''注意:Google推送相关依赖库版本必须对应(该文档中均为:11.4.0),否则可能会出现类冲突的错误。'' 2.在project-level的build.gradle中添加FCM相关库文件配置: buildscript { repositories { jcenter() } dependencies { // 添加此行 classpath 'com.google.gms:google-services:3.1.1' } } allprojects { repositories { // 添加此行 maven { url 'https://maven.google.com' } } } 3.在app-level的build.gradle中添加FCM相关库文件配置: dependencies { // 添加此行,Google Firebase cloud messaging compile 'com.google.firebase:firebase-messaging:11.4.0' } // 此行添加在文件末尾 apply plugin: 'com.google.gms.google-services' ''注意:Google推送相关依赖库版本必须对应(该文档中均为:11.4.0),否则可能会出现类冲突的错误。'' 4.放置下载的google-services.json在app-level的根目录下 {{:im:200androidcleintintegration:3.3.5_config_location.png?direct&400|}} 5.实现一个继承自FirebaseMessagingService的自定义service,该类用于FCM在后台进行接收应用推送消息的处理。并把该service注册到AndroidManifest.xml中。 自定义FirebaseMessagingService: public class EMFCMMSGService extends FirebaseMessagingService { private static final String TAG = "EMFCMMSGService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); if (remoteMessage.getData().size() > 0) { String message = remoteMessage.getData().get("alert"); Log.i(TAG, "onMessageReceived: " + message); } } } AndroidManifest.xml: 6.实现一个继承自FirebaseInstanceIdService的自定义service,该类用于监听FCM token的创建和更新。一个设备对应一个FCM token,该token用于服务端向该设备推送消息,所以该token创建或更新后需及时上传至环信服务器。 自定义FirebaseInstanceIdService: public class EMFCMTokenRefreshService extends FirebaseInstanceIdService { private static final String TAG = "FCMTokenRefreshService"; @Override public void onTokenRefresh() { super.onTokenRefresh(); String token = FirebaseInstanceId.getInstance().getToken(); Log.i(TAG, "onTokenRefresh: " + token); // Important, send the fcm token to the server EMClient.getInstance().sendFCMTokenToServer(token); } } AndroidManifest.xml: 7.将Sender ID(即创建Google推送证书时填写的证书名称)在SDK初始化前通过options.setFCMNumber(string)接口设置到options里''options.setFCMNumber(senderId)''。 8.使用 FCM 时需要在退出登录时解绑设备 token,调用''EMClient.getInstance().logout(true)''或者''EMClient.getInstance().logout(true,callback)''方法,如果是被踢的情况下,则要求设置为 false。 ==== 推送服务测试 ==== 为了确保推送服务的成功集成,可按如下步骤进行测试, - 运行app并进行登录 - 杀掉该app进程(通过Android任务列表滑动结束进程,不是按Home键让app进入后台) - 向该登录账号发送消息,app会收到通过推送服务送达的消息 ---- 上一页:[[im:200androidclientintegration:115thirdpartypush|第三方推送集成]] 下一页:[[im:200androidclientintegration:130demoandsdkdownload|Demo 介绍]]