Node.js实现FCM推送服务器端

FCM是google官方的消息推送方案,要求手机安装Google Play services才能使用,国内手机一般没有这个东西,所以现阶段只适用于只在国外使用的app。
FCM全称是Firebase Cloud Messaging,Firebase是很多工具的集合,FCM只是其中一项。
服务器端实现起来很简单,以下是步骤:

一、在Firebase中配置项目和app

  1. 注册、登录google账号。
  2. 打开Firebase console。
  3. 添加一个项目,点左侧菜单overview右边的⚙️图标,弹出菜单点project settings,点Service Accounts标签,点下面的Generate New Private Key按钮,会下载一个json文件(每次生成文件名都不一样,本文用serviceAccountKey.json表示这个文件),保存起来一会用。
  4. 在项目中添加app,把包名写对就行了,包名就是android studio里的applicationId,sha1和sha256指纹不需要,当然想添加也行。
  5. 下载app对应的google-services.json,将来要添加到安卓app里。

二、服务器端实现

  1. 安装admin sdk,npm install firebase-admin --save
  2. 把刚才下载的serviceAccountKey.json放到一个地方,记住路径。
  3. 写代码,按照官方初始化SDK文档、官方发送消息文档来:
var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
});

admin.messaging().sendToDevice(tokens, payload)
.then(resp => {//发送成功
}).catch(err => {/*处理错误*/});

三、安装测试安卓app,验证能否收到消息

  1. 下载Firebase官方示例github代码库,把刚才下载的google-services.json复制到messaging/app文件夹下。
  2. 用文本编辑器把build.gradle里的compileSdkVersion、buildToolsVersion、com.android.support:appcompat版本改成已经安装的最新版,避免长时间下载。
  3. 打开messaging项目,applicationId替换成刚才添加app时设置的applicationId,编译,安装到模拟器上。如果编译时提示找不到com.google.firebase:firebase-core,需要用SDK Manager更新最新版的Google Repository。
  4. 点app里的Log Token按钮,这个模拟器设备的token就会显示在logcat中。也可以用真机测试,如果真机无法USB调试,稍微修改以下代码添加一个EditText,修改Log Token的click事件,把token显示到EditText里,然后手动复制,用微信等工具传给电脑。

四、运行服务器端代码

运行服务器端代码,admin.messaging().sendToDevice(tokens, payload),tokens写刚才用测试app生成的token,payload参考官方发送消息文档,大致像这样:

var payload = {
  notification: {
    title: "$GOOG up 1.43% on the day",
    body: "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."
  },
  data: {
    stock: "GOOG",
    open: “829.62”,
    close: "635.67"
  }
};

注意data里的值都必须是字符串,官方文档的写法有错误,open后面不能是整数。如果有的值不是字符串,可以简单地用JSON.stringify转成字符串。

测试app应该能收到消息了。如果正在运行的时候收到消息,不会在系统的通知栏弹出,只会在logcat里记录消息内容。完全杀进程以后收到消息,会在系统通知栏显示消息,点击打开app。

你可能感兴趣的:(Node.js实现FCM推送服务器端)