使用Firebase FCM和Google App Engine发送通知

我遵循这个教程在Android设备之间发送通知。 我首次使用Google Cloud App Engine来运行Node进程,并且工作正常。 我收到通知,但每个请求都会收到两个通知,而不是每个通知一个。 有人能帮我找出原因吗?

一些观察

  1. 在App Engine仪表板上,我注意到有两个实例。 我试图删除一个,但不会被删除。 谷歌云应用程序引擎仪表板

  2. 我确认问题不在firebase数据库中。 创buildnotificationRequest时,只会按预期创build一个节点。 但是两个通知可能通过节点脚本发送到设备。

  3. 这是我的节点脚本。 我通过在terminal上执行gcloud app deploy部署了这个脚本。

 // [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] 
  1. 这是如何logging两个请求。 日志示例

谢谢!