====== 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 介绍]]