成功sendToDevice后,Firebase云消息传递不起作用

我使用Firebase云端function通过云端消息向iOS设备发送通知。 sendToDevice方法工作良好,并返回成功承诺,在Firebase函数日志中没有任何错误或警告,但在iOS上,不显示通知。 如果我通过Firebase通知信息中心发送通知,该通知很有用,并且会在设备上显示通知。 我不知道我在哪里可以有bug。 有可能是iOS应用程序端的错误,即使它像我说的那样工作?

Firebaseconfiguration:

  var functions = require('firebase-functions'); var admin = require('firebase-admin'); var config = functions.config(); admin.initializeApp(functions.config().firebase); 

部分云function:

 APP.services.firebase.admin.database().ref('tokens/' + userId).once('value', function(snapshot) { var userDevicesTokens = []; snapshot.forEach(function(childSnapshot) { userDevicesTokens.push(childSnapshot.key) }); if (userDevicesTokens.length === 0) { console.warn('No tokens for user'); return; } var payload = { data: { title: options.title, text: options.text, type: options.type, } }; APP.services.firebase.admin.messaging().sendToDevice(userDevicesTokens, payload) .then(function(response) { console.log("Successfully sent message:", response); }) .catch(function(error) { console.log("Error sending message:", error); }); }) 

Firebase云端函数日志:

 11: 52: 43.952 AM info newChatMessageTrigger Successfully sent message: { results: [{ messageId: '0:15016....' }], canonicalRegistrationTokenCount: 0, failureCount: 0, successCount: 1, multicastId: 589.... } 11: 52: 22.760 AM outlined_flag newChatMessageTrigger Function execution took 604 ms, finished with status: 'ok' 11: 52: 22.252 AM outlined_flag newChatMessageTrigger Billing account not configured.External network is not accessible and quotas are severely limited.Configure billing account to remove these restrictions 11: 52: 22.252 AM outlined_flag newChatMessageTrigger Function execution started 

我认为这是你的有效载荷的问题。

尝试使用您的Firebasefunction一次这个有效载荷,并让我知道你是否收到iOS的通知。

 var payload = { data: { title: "Welcome to ChitChat Group", message: "You may have new messages" } }; 

我写信给Firebase支持,问题是消息types。 在Firebase中,我们有两种types的消息:数据和通知。 在这种情况下,我们应该使用types通知( 参见文档 )。

有效载荷应该如下所示:

 var payload = { notification: { title: options.title, body: options.text, }, data: { type: options.type, } };