iPhone X上未收到Firebase通知FCM

时间:2018-06-25 20:19:52

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

我有一个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是否收到通知,我得到以下结果:

  • 连接到Xcode的iPhone 6S收到通知
  • 运行testflight版本的iPhone 6S收到通知
  • 运行应用商店版本的iPhone 6S收到通知
  • 连接到Xcode的iPhone X收到通知
  • 运行testflight版本的iPhone X没有收到
  • 运行应用商店版本的iPhone X没有收到

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

我知道我没有提供代码,但实际上没有什么可检查的……在将iPhone束缚到Xcode的iPhone 6S甚至iPhone X上,一切都可以正常工作。

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

我错过了什么吗???我尚不知道的iPhone X是否需要启用其他权限?

编辑:iPhoneX iOS版本= 11.4

EDIT2 :似乎出于某种原因,iPhone X需要有效载荷包含"notification: {"title":"xxx", "body":"xxx"}",这是没有道理的,因为iPhone 6S可以在没有添加有效载荷的情况下接收无提示推送通知...现在的问题是,在有效负载上添加“通知”将使iOS在收到通知后立即在托盘上显示通知,女巫超过了我要传递的“静音”通知的目的。

以下是先前的有效负载,它在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 ...无提示通知没有警报/声音/徽章!

2 个答案:

答案 0 :(得分:4)

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

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

到目前为止一切正常。

答案 1 :(得分:0)

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