环信FCM推送详细步骤
集成FCM推推送
准备的地址有 :https://firebase.google.com
1.firebase官网选择我们自己创建的项目
![2182683b2ad3aeab7800779f9747ae78.png](https://www.imgeek.net/uploads/article/20230921/2182683b2ad3aeab7800779f9747ae78.png)
2.点到这个设置按键
![a7bf03de143094594739a5dc5c2d071a.png](https://www.imgeek.net/uploads/article/20230921/a7bf03de143094594739a5dc5c2d071a.png)
3.我们打开到项目设置->常规 拉到最下面有一个“您的应用” 点击下载json文件,json文件的使用是客户端放在安卓项目的app目录下
![969ef1c277d16f3a64bcd298c77a2260.png](https://www.imgeek.net/uploads/article/20230921/969ef1c277d16f3a64bcd298c77a2260.png)
4.首先环信需要的信息有 项目设置中-> 服务账号 生成新的私钥 生成的文件我们要上传到环信的管理后台证书部分(V1)
![24556f7c8dd5da800de4ff7cdba3c695.png](https://www.imgeek.net/uploads/article/20230921/24556f7c8dd5da800de4ff7cdba3c695.png)
5.点击上传证书会选择你下载的文件,注意!! 名称是由你设置的项目名称的json文件 并不是 google-services.json
![443309fea8f1d285379dae236ff1cec6.png](https://www.imgeek.net/uploads/article/20230921/443309fea8f1d285379dae236ff1cec6.png)
6.项目名称 是你的发送者ID 这个id 我们在firebase官网中的项目设置-〉常规 -〉您的项目->的项目编号就是您的SenderID 填写到环信官网即可 另外客户端的 google-services.json 这个文件 打开后 project number 也是SenderID
![97a80c4ab44d149c0e4a91e3008d8f67.png](https://www.imgeek.net/uploads/article/20230921/97a80c4ab44d149c0e4a91e3008d8f67.png)
7.将我们下载好的 google-services.json 文件放到app的目录下 (文件获取可以反回步骤3 查看)
![46fa54ad0d8118953145902ed26a2e25.png](https://www.imgeek.net/uploads/article/20230921/46fa54ad0d8118953145902ed26a2e25.png)
8.打开build的根目录添加 :
buildscript {
dependencies {
// classpath 'com.android.tools.build:gradle:7.2.2'
classpath 'com.google.gms:google-services:4.3.8'
}
}
dependencies {
// classpath 'com.android.tools.build:gradle:7.2.2'
classpath 'com.google.gms:google-services:4.3.8'
}
}
![9f5b25780fd8e33fb6f5421688c4bd8b.png](https://www.imgeek.net/uploads/article/20230921/9f5b25780fd8e33fb6f5421688c4bd8b.png)
9.build.gradle.app部分添加:
implementation platform('com.google.firebase:firebase-bom:28.4.1')
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-messaging'
![e4dc65fe85d9d44d656f019421b29250.png](https://www.imgeek.net/uploads/article/20230921/e4dc65fe85d9d44d656f019421b29250.png)
10.对应好appkey 以及我们的客户端初始化fcm的senderID
![16e0f4e50721ce55b60858ae399bda9a.png](https://www.imgeek.net/uploads/article/20230921/16e0f4e50721ce55b60858ae399bda9a.png)
11.在登陆前 初始化以后 添加以下代码:
EMPushHelper.getInstance().setPushListener(new PushListener() {
@Override
public void onError(EMPushType pushType, long errorCode) {
EMLog.e("PushClient", "Push client occur a error: " + pushType + " - " + errorCode);
}
@Override
public boolean isSupportPush(EMPushType pushType, EMPushConfig pushConfig) {
if(pushType==EMPushType.FCM)
{
return GoogleApiAvailabilityLight.getInstance().isGooglePlayServicesAvailable(MainActivity.this)
== ConnectionResult.SUCCESS;
}
return super.isSupportPush(pushType, pushConfig);
}
});
@Override
public void onError(EMPushType pushType, long errorCode) {
EMLog.e("PushClient", "Push client occur a error: " + pushType + " - " + errorCode);
}
@Override
public boolean isSupportPush(EMPushType pushType, EMPushConfig pushConfig) {
if(pushType==EMPushType.FCM)
{
return GoogleApiAvailabilityLight.getInstance().isGooglePlayServicesAvailable(MainActivity.this)
== ConnectionResult.SUCCESS;
}
return super.isSupportPush(pushType, pushConfig);
}
});
![6d92624f930cc0ead06de6e7df2a25be.png](https://www.imgeek.net/uploads/article/20230921/6d92624f930cc0ead06de6e7df2a25be.png)
12.登陆成功后的第一个页面添加 :
if(GoogleApiAvailabilityLight.getInstance().isGooglePlayServicesAvailable(NewAcitivty.this) != ConnectionResult.SUCCESS) {
return;
}
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (!task.isSuccessful()) {
EMLog.d("PushClient", "Fetching FCM registration token failed:"+task.getException());
return;
}
// 获取新的 FCM 注册 token
String token = task.getResult();
EMClient.getInstance().sendFCMTokenToServer(token);
}
});
return;
}
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (!task.isSuccessful()) {
EMLog.d("PushClient", "Fetching FCM registration token failed:"+task.getException());
return;
}
// 获取新的 FCM 注册 token
String token = task.getResult();
EMClient.getInstance().sendFCMTokenToServer(token);
}
});
![22e04594928e0dee49161e32d46a24c8.png](https://www.imgeek.net/uploads/article/20230921/22e04594928e0dee49161e32d46a24c8.png)
13.清单文件注册sevices 主要是为了继承FCM的服务 必要操作!
![71ec783a8985e09d20483e8a58a33dfe.png](https://www.imgeek.net/uploads/article/20230921/71ec783a8985e09d20483e8a58a33dfe.png)
添加代码: 重写onMessageReceived
收到消息后 就在这个方法中 自己调用 本地通知 因为fCM的推送只有唤醒
public class FireBaseservice extends FirebaseMessagingService {
@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
super.onMessageReceived(message);
if (message.getData().size() > 0) {
String alter = message.getData().get("alter");
Log.d("", "onMessageReceived: " + alter);
}
}
@Override
public void onNewToken(@NonNull String token) {
Log.i("MessagingService", "onNewToken: " + token);
// 若要对该应用实例发送消息或管理服务端的应用订阅,将 FCM 注册 token 发送至你的应用服务器。
if(EMClient.getInstance().isSdkInited()) {
EMClient.getInstance().sendFCMTokenToServer(token);
}
}
}
@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
super.onMessageReceived(message);
if (message.getData().size() > 0) {
String alter = message.getData().get("alter");
Log.d("", "onMessageReceived: " + alter);
}
}
@Override
public void onNewToken(@NonNull String token) {
Log.i("MessagingService", "onNewToken: " + token);
// 若要对该应用实例发送消息或管理服务端的应用订阅,将 FCM 注册 token 发送至你的应用服务器。
if(EMClient.getInstance().isSdkInited()) {
EMClient.getInstance().sendFCMTokenToServer(token);
}
}
}
14.准备测试 这个时候我们就要验证我们的成果了 首先要看自己登录到环信后 是否有绑定证书 借用环信的即时推送功能查看是否有绑定证书
这个时候看到登录了证书还是没有绑定上 那肯定是客户端出现问题了
![1b10522256c6748097bf7928a7a4d88b.png](https://www.imgeek.net/uploads/article/20230921/1b10522256c6748097bf7928a7a4d88b.png)
15.检查错误 看到提示了com.xxxx.play 安装 这个是因为 你的设备没有打开 VPN 或者VPN不稳定,所以你首先要确定VPN打开并且 稳定 然后我们在重新登录测试
![fd2bfec1fbc28df539ba611df197978d.png](https://www.imgeek.net/uploads/article/20230921/fd2bfec1fbc28df539ba611df197978d.png)
16.这个时候我们在借用即时推送查看 看看有没有绑定到环信 看到该字样就证明你的证书已经绑定上了 直接杀掉进程离线 测试离线推送,(一定要在清单文件注册的谷歌服务中 重新的onMessageReceived 中写入本地通知展示 不然fcm的推送只有唤醒)
![136b53805c6d1b2d7b8cad3cc44e2686.png](https://www.imgeek.net/uploads/article/20230921/136b53805c6d1b2d7b8cad3cc44e2686.png)