在 Cloud Function for Firebase 中设置 Firebase 消息的优先级

Posted

技术标签:

【中文标题】在 Cloud Function for Firebase 中设置 Firebase 消息的优先级【英文标题】:Setting priority Firebase Messaging in Cloud Function for Firebase 【发布时间】:2017-03-31 03:10:56 【问题描述】:

我正在使用 Firebase Messaging 向我的 iPhone 应用程序的用户发送通知。为了不在客户端公开应用程序的消息传递服务器密钥,我使用 Cloud Function for Firebase 将通知发送到特定主题。在此之前,我是从应用程序的客户端完成的,并且能够通过制作这种格式的 JSON 来设置消息的优先级:

// Swift code in iPhone app
let body: [String: Any] = ["to": "/topics/\(currentPet)",
                            "priority" : "high",
                            "notification" : [
                                "body" : "\(events[eventType]) for \(petsName.localizedCapitalized)",
                                "title" : "\(myName.localizedCapitalized) just logged an event",
                                "data" : ["personSent": myId]
                              ]
                           ]

现在在我的云函数中,我正在尝试制作相同通用格式的有效负载,但一直遇到错误:

Messaging payload contains an invalid "priority" property. Valid properties are "data" and "notification".

这是我的有效载荷格式化和发送:

const payload = 
      'notification': 
        'title': `$toTitleCase(name) just logged an event`,
        'body': `$events[eventType] for $toTitleCase(petName)`,
        'sound': 'default',
        'data': userSent 
      ,
      'priority': 'high'
    ;
admin.messaging().sendToTopic(pet_Id, payload);

有人知道我将如何完成设置优先级吗?我应该手动执行HTTP POST 而不是使用admin.messaging().sendToTopic()

【问题讨论】:

【参考方案1】:

来自Firebase Cloud Messaging documentation on sending messages with the Admin SDK:

// Set the message as high priority and have it expire after 24 hours.
var options = 
  priority: "high",
  timeToLive: 60 * 60 * 24
;

// Send a message to the device corresponding to the provided
// registration token with the provided options.
admin.messaging().sendToDevice(registrationToken, payload, options)
  .then(function(response) 
    console.log("Successfully sent message:", response);
  )
  .catch(function(error) 
    console.log("Error sending message:", error);
  );

不同之处在于优先级(以及示例中的 ttl)作为单独的 options 参数而不是在有效负载中传递。

【讨论】:

以上是关于在 Cloud Function for Firebase 中设置 Firebase 消息的优先级的主要内容,如果未能解决你的问题,请参考以下文章

Aftersave Cloud Function for Parse 增加另一个数据表中的值?

我可以在使用 AWS amplify for Cognito 和 DataStore 的同时使用 fire base 来托管我的 Flutter Web 应用程序吗

The Preliminary Contest for ICPC Asia Nanchang 2019

python 命令行工具 fire

mui.fire()触发自定义事件

Spring-Cloud-Function-Spel 漏洞复现