Firebase 推送通知android ios实现
https://firebase.google.com/docs/查看android ios前端对接流程,比较简单
本文主要讲解后台实现
1、firebase后台创建项目,获取相关参数和配置如下(1)、点击Project Overview -> 项目设置 云消息传递中获取服务器密钥(建议,当然旧版服务器密钥也可以使用)
(2)、服务账号 -> 点击生成新的私钥,获取私钥配置(json文件,丢失后可以重新生成,重新生成后需要替换旧的配置)
(3)、Database -> 选择 Realtime Database 获得数据库url
2、服务端nodejs
(1)、node安装firebase-tools工具
> #命令行: npm install -g firebase-tools --save (全局安装)
> #命令行: firebase login
可能提示错误: Authentication Error: Your credentials are no longer valid.(原因VPN)
解决办法:在firebase-tools文件夹下(全局安装路径(shift+cmd+g):/usr/local/lib/node_modules/firebase-tools/)
找到文件 node_modules/firebase/node_modules/faye-websocket/lib/faye/websocket/client.js
修改如下
var Client = function(_url, protocols, options) {
options = options || {};
// 添加proxy配置
options.proxy = {
origin: 'http://localhost:1087',
};
…
}
> #重新命令行
export http_proxy=http://localhost:1087
export NODE_TLS_REJECT_UNAUTHORIZED=0
firebase login --no-localhost
> #命令行:
export http_proxy=http://localhost:1087
export NODE_TLS_REJECT_UNAUTHORIZED=0
firebase login --no-localhost
前面两行不能少不然又会报错
> #命令行:
firebase deploy
回车就行
(2)、js脚本
> #命令行:
node install firebase
书写脚本server.js(demo自行修改定义)
-------------------------
var firebase = require('firebase');
var request = require('request');
var API_KEY = '服务器密钥';(上述得到)
var token = '前段app打印';
firebase.initializeApp({
serviceAccount: "私钥配置路径./xxxxx.json",
databaseURL: "数据库url--https://xxxxx.firebaseio.com/"
});
var payload = {
to: "/topics/前段主题key 或者 上面定义的token",
notification: {
body: "this is test body",
title: "this this this"
}
}
setTimeout(function (args) {
sendNotificationToUser(payload);
}, 200);
function sendNotificationToUser(message, onSuccess) {
request({
url: 'https://fcm.googleapis.com/fcm/send',
method: 'POST',
headers: {
'Content-Type' :'application/json',
'Authorization': 'key='+API_KEY
},
body: JSON.stringify(message)
}, function(error, response, body) {
if (error) {
console.log('---message send error--', error);
}
else if (response.statusCode >= 400) {
console.log('HTTP Error: '+response.statusCode+' - '+response.statusMessage);
}
else {
console.log('--message send success---')
onSuccess && onSuccess();
}
});
}