Android 使用Firebase FCM和Google应用程序引擎发送通知
我随后在android设备之间发送通知。我第一次使用GoogleCloudAppEngine来运行这个节点进程,它可以正常工作。我会收到通知,但每个请求会收到两个通知,而不是一个通知。有人能帮我找出原因吗 一些观察结果Android 使用Firebase FCM和Google应用程序引擎发送通知,android,node.js,google-app-engine,firebase,firebase-cloud-messaging,Android,Node.js,Google App Engine,Firebase,Firebase Cloud Messaging,我随后在android设备之间发送通知。我第一次使用GoogleCloudAppEngine来运行这个节点进程,它可以正常工作。我会收到通知,但每个请求会收到两个通知,而不是一个通知。有人能帮我找出原因吗 一些观察结果 在AppEngine仪表板上,我注意到有两个实例。我尝试删除一个,但无法删除 我确认问题不在firebase数据库中。创建notificationRequest时,只会按预期创建一个节点。但可能通过节点脚本向设备发送两个通知 这是我的节点脚本。我通过在终端上执行gcloud ap
gcloud app deploy
部署了这个脚本谢谢大家! 可能的重复我同意这看起来确实像是quesiton@Adam链接的重复。关于问题#1,将应用程序部署到灵活环境(如节点)时的默认设置是。除非另有规定,否则平台将生成新实例,直到满足该最小值。至于推送重复通知,我会遵从。谢谢@Adam和Nicolas。那些链接很有用!
// [START app]
'use strict';
const express = require('express');
const app = express();
var firebase = require('firebase-admin');
var request = require('request');
// Your Firebase Cloud Messaging Server API key
var API_KEY = [my_api_key];
// Fetch the service account key JSON file contents
var serviceAccount = require(__dirname+"/serviceAccountKey.json");
// Initialize the app with a service account, granting admin privileges
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: [my_databaseURL]
});
var ref = firebase.database().ref();
function listenForNotificationRequests() {
var requests = ref.child('notificationRequests');
requests.on('child_added', function(requestSnapshot) {
var request = requestSnapshot.val();
sendNotificationToUser(
request.to_uid,
request.from_username,
request.message,
function() {
console.log("Successfully sent");
requestSnapshot.ref.remove();
}
);
}, function(error) {
console.error(error);
});
};
function sendNotificationToUser(to_uid, from_username, message, onSuccess) {
console.log("sending message `"+message+"`...");
request({
url: 'https://fcm.googleapis.com/fcm/send',
method: 'POST',
headers: {
'Content-Type' :' application/json',
'Authorization': 'key='+API_KEY
},
body: JSON.stringify({
notification: {
title: from_username,
body: message
},
to : '/topics/user_'+to_uid
})
}, function(error, response, body) {
if (error) { console.error(error); }
else if (response.statusCode >= 400) {
console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage);
}
else {
onSuccess();
}
});
}
// start listening
listenForNotificationRequests();
// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
// [END app]