首页 文章

使用Firebase主题消息的iOS推送通知不会进入设备

提问于
浏览
2

我正在尝试使用node.js向Firebase中的某个主题发送iOS推送通知 . 我跟着this tutorial,但可以't figure out why the notification isn' t进入订阅该主题的设备 . 我能够从控制台发送主题消息, listenForNotificationRequests() 正在成功删除 notificationRequest 个孩子 .

以下是Firebase中通知请求的结构:

example notification request

这是删除了键/ url的node.js代码:

var firebase = require('firebase-admin');
var request = require('request');

var API_KEY = "APIKEYREMOVED"; // Your Firebase Cloud Messaging Server API key

// Fetch the service account key JSON file contents
var serviceAccount = require("./pathToJSON");

// Initialize the app with a service account, granting admin privileges
firebase.initializeApp({
  credential: firebase.credential.cert(serviceAccount),
  databaseURL: "URL_REMOVED"
});
ref = firebase.database().ref();

function listenForNotificationRequests() {
  var requests = ref.child("notificationRequests");
  requests.on("child_added", function(requestSnapshot) {
    var request = requestSnapshot.val();
    sendNotificationToUser(
      request.username,
      request.message,
      function() {
        requestSnapshot.ref.remove();
      }
    );
  }, function(error) {
    console.error(error);
  });
};

function sendNotificationToUser(username, message, onSuccess) {
  request({
    url: "https://fcm.googleapis.com/fcm/send",
    method: "POST",
    headers: {
      "Content-Type" : "application/json",
      "Authorization": "key="+API_KEY
    },
    body: JSON.stringify({
      to : "/topics/user_"+username,
      priority : "high",
      notification: {
        title: message
      }
    })
  }, 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();

非常感谢任何帮助/建议!

编辑:

这是我在Swift中订阅主题的方式:

FIRMessaging.messaging().subscribe(toTopic: "user_\(currentUserID!)")

1 回答

  • 3

    对于遇到这种情况的人,我发现了这个问题 . 我不得不在通知有效负载中添加“文本”,填充通知正文 . 本教程仅包含“ Headers ”,这本身是可选的,但本身并不充分......至少对于我读过的APNS来说 .

    感谢那些回答!

    function sendNotificationToUser(username, message, onSuccess) {
      request({
        url: "https://fcm.googleapis.com/fcm/send",
        method: "POST",
        headers: {
          "Content-Type" : "application/json",
          "Authorization": "key="+API_KEY
        },
        body: JSON.stringify({
          "priority" : "high",
          "notification" : {
            "title": sender,
            "text": message
          },
          "to" : "/topics/user_"+username
        })
      }, function(error, response, body) {
        if (error) { console.error(error); }
        else if (response.statusCode >= 400) { 
          console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage); 
        }
        else {
          onSuccess();
        }
      });
    }
    

相关问题