【问题标题】:Unable to send silent push notifications to iOS using FCM无法使用 FCM 向 iOS 发送静默推送通知
【发布时间】:2019-07-21 05:37:21
【问题描述】:

我正在尝试使用 node.js 模块 firebase-admin 7.0.0 和以下代码向 iOS 设备发送静默数据通知:

// load lib
var firebase = require('firebase-admin');

// add API keys
firebase.initializeApp({
    credential: firebase.credential.cert('./certs/firebase-private-key.json')
});

// device token send back from device
var token = '00397db1aa2f1fa625f71deef0c8e8ef0d4427cf60a13c0fb4bd290dcec41f4b';

// data message to send (contains no notification details so should be silent)
var message = {
   data: {
      key1: 'hello',
      key2: 'world'
   }
};

var options = {
    priority: 'high',
    timeToLive: 60 * 60 * 24,
    contentAvailable: true,
    mutableContent: true
};

// send the message
firebase.messaging().sendToDevice(token, message, options).then(function (res) {
    // it worked!
    console.log(res);
})
.catch(function (err) {
    // it failed :(
    console.log(err);
});

我收到一条回复说消息已发送,但它从未到达设备上。而如果我使用NWPusher 发送消息,它工作正常(下面的示例有效负载)

{"aps":{ "content-available": 1,"badge":0, "hello": "there" }}

有什么想法吗?

仅供参考:我还在GitHub开了一张票

【问题讨论】:

  • 你检查了ios静默通知的payload吗
  • 你是指 iOS 文档吗?
  • 是的,我的意思是 ios 标准有效载荷,用于静默通知
  • 只有静默通知不来。?还是正常的通知本身没有来..?
  • 你能补充一下 sendToDevice 函数里面发生了什么

标签: ios firebase apple-push-notifications firebase-cloud-messaging


【解决方案1】:

您的代码看起来正确。您可以在可变内容和可用内容中尝试多种真假组合。 您也可以尝试不发送 mutableContent 字段。但据我记得两者都应该是真的。

其他调试方法是检查从 nodejs 输出的 json。你可以试试同样的 NWPusher 或 PostMan 中的有效载荷。这会给你一些线索。

我已经在邮递员中尝试了以下有效负载,对我来说它工作正常

{"mutable_content":true,"content_available" : true,"priority":"high","registration_ids":["d3-fa7XDQQ4:APA91bEKXbT3HAv6ko9RukcxaB4QBr8zOIT06CBpj9o0Sl6TxsMpTnAMQ86t14foIcuQuDUyzMApbvDORELYyD0WOX3BcfP7ZNtWx9uY0JGm2B7cmdlPoOFs68fe6rz3Q7tq_8Ib7Y4H"]}

【讨论】:

  • @JohnDoherty,您是否尝试过在可变内容和可用内容中结合真假......?
【解决方案2】:

对于无声通知,您需要确保以下几点:

1- 您的有效负载中没有alert 密钥

2- 在你的有效载荷中包含content-available" : 1

3- 启用推送通知的后台模式(选择您的目标 > 功能 > 后台模式 > 远程通知)

样本负载:

{
    "aps" : {
        "content-available" : 1
    },
    "acme1" : "bar",
    "acme2" : 42
}

欲了解更多信息,请查看苹果的参考:Pushing Updates to Your App Silently

【讨论】:

    【解决方案3】:

    对于仍然遇到此问题的任何人,正如 Gokul 所说,代码很好

    只要确保您遵循Apple docs 中的步骤即可

    特别要确保向 AppDelegate 添加正确的回调: application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

    请注意,它与用于处理常规通知的那个不一样application(_:didReceiveRemoteNotification:)

    还要确保在项目设置中的后台模式下打开远程通知,如here 所述:

    【讨论】:

      【解决方案4】:

      这是用于 ios 发送静默的 PHP 版本。请添加 'content-available' => 1 用于静默通知

       $body = array(
         'content-available' => 1,
         'sound' => ''
       ); 
      
      {
        "aps" : {
          "alert" : "Notification with custom payload!",
          "badge" : 1,
          "content-available" : 1
        },
        "data" :{
          "title" : "Game Request",
          "body" : "Bob wants to play poker",
          "action-loc-key" : "PLAY"
        }
      }
      

      【讨论】:

      • 您必须使用旧版本的 API,因为我在使用该有效负载时收到以下错误:Messaging payload contains an invalid "aps" property. Valid properties are "data" and "notification".
      • 我做到了,但由于我提到的错误而失败。正如我所说,您必须使用不同版本的 API
      • 问题不要求 PHP 脚本
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 2020-07-14
      • 1970-01-01
      • 2018-02-17
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多