iPhone X 未收到 Firebase 通知 FCM

Firebase notifications FCM not received on iPhone X

我有一个 iOS 应用 (Xcode 9 / Swift 4) 使用 Firebase Cloud Messaging 接收 silent push notifications

该应用已发布,但 iPhone X 用户未收到通知

我已经对所有内容进行了三重检查,所有内容都是最新的,包括 Google Pods FirebaseMessaging (3.0.2)

我生成静默推送通知的服务器应用程序 (c#) 也在使用最新版本的 Google APIs (1.34)

所以使用生成通知的应用程序来测试 iPhone 是否收到通知,我得到了以下结果:

这是最糟糕的部分...如果我从 c# 应用程序中获取 iPhone X 令牌并通过 Firebase 控制台发送一条消息,testflight 版本将收到该消息(我想这证明了我发送的令牌是正确的)

我知道我没有提供代码,但确实没有什么可检查的...一切都在 iPhone 6S 上运行完美,甚至在 iPhone X 上,当它连接到 Xcode.

我在想我的服务器 IP 地址无法从 iPhone X 访问,但事实并非如此,因为在应用程序启动期间我连接到服务器并毫无问题地下载数据......就像iPhone X 有某种防火墙来阻止来自我的 IP 的传入消息吗? 即使我知道我在 iPhone X 上拥有应用程序通知权限(我可以从 Firebase 控制台发送消息)我在应用程序中创建了一个日志屏幕并且知道该权限已启用。

我是不是错过了什么???是否需要为 iPhone X 启用我不知道的额外权限?

编辑: iPhoneX iOS 版本 = 11.4

EDIT2: 似乎出于某种原因,iPhone X 需要有效载荷包含 "notification: {"title":"xxx", "body":"xxx"}",这没有意义,因为 iPhone 6S 可以在没有添加有效载荷的情况下接收静默推送通知...现在的问题是向有效载荷添加 "notification" 将使 iOS 在收到通知后立即在托盘上显示通知, 击败了我要发送的 "silent" 通知的目的。

这是之前的有效载荷,它在 iPhone X 上不起作用,但在 iPhone 6S 上起作用(FCM 负责添加 content-available 标签):

{"message": {"token" : "eANw_OLOKXc:APA.....XsMg", "data" : {"content" : "2546|N|495....arg|BATTERY|||||"}}}

这是与 iPhone X 一起使用但会弹出系统通知的那个, 我不想要:

{"message": {"token" : "eANw_OLOKXc:APA.....XsMg", "notification":{"title":"xxx","body":"xxx"},"data" : {"content" : "2546|N|495....arg|BATTERY|||||"}}}

为什么 iPhone 6S 可以在没有 notification 有效负载的情况下工作?以及如何向 iPhone X

发送静默通知

编辑 3: 我想唯一的选择是开始一个新项目并复制问题,因为我被卡住了......我不明白为什么 运行 从 Xcode 绑定的项目使其在 iPhone X 中工作,但是当 运行 没有插入 USB 电缆时,它不会收到通知。 我忘了说 iPhone 6S 也在 iOS 11.4

编辑 4: 我设法在静默通知到达的那一刻直接从 iPhone X 获取一些日志:

Jun 26 01:08:46 MP apsd[9726] <Notice>: APSMessageStore - APSIncomingMessageRecordDeleteMessageForGUID <private>
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: Received incoming message on topic com.mydomain.myapp2 at priority 1
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Received remote notification request C752-66DA [ hasAlertContent: 0, hasSound: 0 hasBadge: 0 hasContentAvailable: 1 hasMutableContent: 0 ]
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Deliver push notification request C752-66DA
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Passing content-available push to Duet
Jun 26 01:08:46 MP SpringBoard(DuetActivityScheduler)[9680] <Notice>: SUBMITTING: <private>
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Error>: Ignoring notification with no alert, sound or badge (com.mydomain.myapp2): C752-66DA
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Not saving push notification C752-66DA to store [ error=Error Domain=UNErrorDomain Code=1401 "Notification has no user-facing content" UserInfo={NSLocalizedDescription=Notification has no user-facing content} ]
Jun 26 01:08:46 MP dasd(DuetActivitySchedulerDaemon)[9752] <Notice>: Submitted Activity: com.apple.pushLaunch.com.mydomain.myapp2:2AD94B <private>
Jun 26 01:08:46 MP dasd(DuetActivitySchedulerDaemon)[9752] <Notice>: Daemon Canceling Activities: {(
    com.apple.pushLaunch.com.mydomain.myapp2:2AD94B
)}
Jun 26 01:08:46 MP dasd(DuetActivitySchedulerDaemon)[9752] <Notice>: CANCELED: com.apple.pushLaunch.com.mydomain.myapp2:2AD94B <private>!

看来 iOS 收到了通知以及数据 (hasContentAvailable: 1),但它没有将其发送到我的应用程序...

此外,为什么会出现此错误:<Error>: Ignoring notification with no alert, sound or badge...静默通知没有警报/声音/徽章!

FirebaseMessaging (3.0.2) 在 11.4 上的推送通知有问题 尝试使用其他版本,例如 3.0.6

我遇到过类似的问题。我将优先级设置为高并添加了以下有效负载。

    let message = {
      notification: {
        title: 'title',
        body: `title`
  }
};
   let options = {
     priority: "high",
     timeToLive: 60 * 60 * 24
};

到目前为止一切正常