Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Firebase FCM和Google应用程序引擎发送通知_Android_Node.js_Google App Engine_Firebase_Firebase Cloud Messaging - Fatal编程技术网

Android 使用Firebase FCM和Google应用程序引擎发送通知

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

我随后在android设备之间发送通知。我第一次使用GoogleCloudAppEngine来运行这个节点进程,它可以正常工作。我会收到通知,但每个请求会收到两个通知,而不是一个通知。有人能帮我找出原因吗

一些观察结果

  • 在AppEngine仪表板上,我注意到有两个实例。我尝试删除一个,但无法删除

  • 我确认问题不在firebase数据库中。创建notificationRequest时,只会按预期创建一个节点。但可能通过节点脚本向设备发送两个通知

  • 这是我的节点脚本。我通过在终端上执行
    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]