我有一个 iOS 应用程序(Xcode 9 / Swift 4)
,它使用Firebase Cloud Messaging
来接收silent push notifications
该应用程序已经发布,但iPhone X用户没有收到通知
我已经三重检查了所有内容,一切都是最新的,包括谷歌豆荚FirebaseMessaging (3.0.2)
生成静默推送通知的服务器应用 (c#( 也使用最新版本的Google APIs (1.34)
因此,使用生成通知的应用程序来测试iPhone是否收到通知,我得到了以下结果:
- 连接到 Xcode 的 iPhone 6S 收到通知
- 运行试飞版的iPhone 6S收到通知
- 运行应用商店版本的iPhone 6S收到通知
- 连接到 Xcode 的 iPhone X 收到通知
- 运行试飞版的 iPhone X 未收到
- 运行应用商店版本的iPhone X不会收到
这是最糟糕的部分......如果我从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
编辑2:似乎出于某种原因,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
...静默通知没有警报/声音/徽章!
我也有类似的问题。我将优先级设置为高并添加了以下有效负载。
let message = {
notification: {
title: 'title',
body: `title`
}
};
let options = {
priority: "high",
timeToLive: 60 * 60 * 24
};
到目前为止,它工作正常。
FirebaseMessaging (3.0.2( 在 11.4 上出现推送通知问题 尝试使用其他版本,例如 3.0.6