适用于iOS的Firebase FCM静默推送通知

问题描述 投票:11回答:4

我在iOS上遇到静音通知问题。

当我的申请处于后台时,我不会收到FCM发送的无声通知。但是,如果我尝试直接发送到APNS,则会成功收到通知。

这是发送给FCM的JSON:

{ 
"to" : "<token>",
"priority": "high",
"content_available": true,
"data" : {
  "<key>" : "<string>",
  "<key2>" : "<string>"
}

}

这是直接发送给APNS的JSON:

{
  "aps": {
    "content-available": 1
  },
  "<key>": "<string>",
  "<key>": "<string>"
}

我已经尝试删除“优先级”键,因为我看到有人说如果已经设置了“content_available”,我不应该设置优先级。它没用。

  1. 我在XCode> Capabilities中启用了“推送通知”。
  2. 我在XCode> Capabilities中的后台模式中选中了“远程通知”。
  3. 当应用程序处于前台时,有时当应用程序处于后台时,FCM通知正常工作。
ios firebase notifications apple-push-notifications firebase-cloud-messaging
4个回答
14
投票

删除“通知”键值对并添加“content_available”:true

它看起来像这样

{ 
    "to" : "...",
    "priority": "high",
    "content_available": true,
    "data" : {
      ....
    }
}

这应该使它成为一个静默的APNS,你需要处理相应的APNS委托方法。

您将需要通过委托处理此问题请参阅此firebase文档以获取详细信息:https://firebase.google.com/docs/cloud-messaging/concept-options


3
投票

我找到了一个解决方法。我在“通知”字段中为“声音”设置了一个空值,即使应用程序在后台,也会传送静默通知。

{ 
    "to" : "...",
    "priority": "high",
    "notification": {
        "sound": ""
    },
    "data" : {
      ....
    }
}

我的预感是Apple不允许以“高”优先级和某种方式“通知”的无声通知:{“声音”:“”}欺骗APNS,这个通知不是一个沉默的通知。


1
投票

我正在使用nodejs处理Firebase静默推送通知。当我尝试下面的代码时,它工作正常。当我添加“priority”时:“high”和“content_available”:true,它给出了以下错误。

工作在下面的代码

const admin = require('firebase-admin');
const serviceAccount ="...."; //service account path
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

let  fcmToken = "...."; // Your token
let message ={
    "token": fcmToken,
    "data": {
        "updateApi": "activity"
    }
} 

admin.messaging().send(message)
  .then((response) =>{
    console.log('Successfully sent notification:', response);
})
  .catch((error) =>{
    console.log('Error while sending notification:', error);
});

在消息对象中添加优先级和content_available时出错

{ code: 'messaging/invalid-argument',
     message: 'Invalid JSON payload received. Unknown name "priority" at \'message\': Cannot find field.\nInvalid JSON payload received. Unknown name "content_available" at \'message\': Cannot find field.' },
  codePrefix: 'messaging' }

-2
投票

请按照文档中的说明关注documentation for server side并为json进行设置。我之前遇到过类似的问题并解决了这个问题。

    {
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "priority" : "high",
  "content_available": true,
  "notification" : {
    "body" : "",
    "title" : "",
    "icon" : "new"
  },
  "data" : {
    "volume" : "3.21.15",
    "contents" : "http://www.news-magazine.com/world-week/21659772"
  }
}

content_available = true和body,title empty执行任务。

© www.soinside.com 2019 - 2024. All rights reserved.