FCM服务器 admin-SDK接入指引
前言
完成了初步测试,基本功能已经可以运用,因此整理一套相对完善的服务端接入指引
部分资料参考自
FCM服务端 - 谷歌云推送 - “errorCode“: “SENDER_ID_MISMATCH“-故障记录
前置操作
由于是Google服务因此当你在国内本地搭建环境时需要翻墙,需要为代码配置代理的服务的端口。
FCM集成
官网提供了使用起来非常方便的sdk,https://firebase.google.com/docs/admin/setup
并且有详细的接入流程。
admin-sdk导入
我采用了方便的maven进行sdk集成
<dependency> <!-- 谷歌推送依赖 -->
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>6.10.0</version>
</dependency>
初始化sdk
为了能在非Google环境下进行凭据确认,我采用设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量的ADC确认方法。
将 GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为包含服务帐号密钥的 JSON 文件的文件路径。
可以手动设置环境变量或者控制台:
set GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
环境变量配置后需重启使得配置生效(也许有些情况下不用,但是我测试时需要重启否则读不到这个值)
//sdk的初始化语句;
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
测试方案
集成后可以先测试一下是否集成成功,直接运行初始化函数,如果不报错表示json文件的路径和里面的几个关键字段是正确的(服务帐号密钥的 JSON 文件不要自己去编辑,理论上直接下载的就一定是正确的)。
然后可以进行进一步测试,查看是否能够沟通FCM服务器,检验sdk运行情况,这里我提供一个思路:
//设置环境
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setServiceAccountId(client_email)
.build();
FirebaseApp.initializeApp(options);
CreateRequest request = new CreateRequest()
.setEmail("user2@example.com")
.setEmailVerified(false)
.setPassword("secretPassword")
.setPhoneNumber("+11234567892")
.setDisplayName("John Doe")
.setPhotoUrl("http://www.example.com/12345678/photo.png")
.setDisabled(false);
UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());
这段代码的功能为创建用户,用这种方式可以验证拥有的权限文件是否可用,如果成功将获得成功打印,如果失败请自行排查bug
参考思路:https://firebase.google.com/docs/auth/admin/manage-users
初始化单个或多个应用
单个应用初始很简单,如果在需要情况下也可以根据需求初始多个应用
// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);
// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");
System.out