切换到在线后,iOS 上仅显示最后一条通知

问题描述 投票:0回答:2

关于 Firebase 文档,我有(我想)可折叠消息。 我在 Android 上也遇到了类似的问题,但从有效负载中删除整个

notification
对象后,它开始工作。 但在 iOS 上发送(仅)数据作为有效负载的通知没有任何帮助 - 只有在将网络从离线切换到在线后才会出现最后一个通知。

老实说,我尝试了很多不同的方法(有或没有 apns 标头,没有 apns 等),但我看到了一个死胡同。救命!

目前,我的有效负载看起来:

message: {
  token: 'some token',
  data: {
    title: 'some title',
    body: 'some body',
    content_available: 'true',
    priority: 'high'
  }
}

我正在使用 Rest API

发送

我正在使用:

System:
    OS: macOS 12.7.4
    CPU: (8) x64 Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
    Memory: 3.49 GB / 16.00 GB
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 16.17.1 - ~/.nvm/versions/node/v16.17.1/bin/node
    Yarn: 1.22.19 - ~/.nvm/versions/node/v16.17.1/bin/yarn
    npm: 9.8.1 - ~/.nvm/versions/node/v16.17.1/bin/npm
    Watchman: 2024.01.22.00 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.15.2 - /Users/darek/.rvm/gems/ruby-2.6.5/bin/pod
  SDKs:
    iOS SDK:
      Platforms: DriverKit 22.2, iOS 16.2, macOS 13.1, tvOS 16.1, watchOS 9.1
    Android SDK: Not Found
  IDEs:
    Android Studio: 2022.3 AI-223.8836.35.2231.10671973
    Xcode: 14.2/14C18 - /usr/bin/xcodebuild
  Languages:
    Java: 11.0.21 - /usr/local/opt/openjdk@11/bin/javac
  npmPackages:
    @react-native-community/cli: Not Found
    react: 18.2.0 => 18.2.0
    react-native: 0.71.17 => 0.71.17
    react-native-macos: Not Found

"@notifee/react-native": "7.8.0",

and

"@react-native-firebase/analytics": "19.2.2",
"@react-native-firebase/app": "19.2.2",
"@react-native-firebase/messaging": "19.2.2",
(also tried 18.8.0, 18.9.0)
ios firebase react-native firebase-cloud-messaging react-native-firebase
2个回答
0
投票

已尝试多种选项来解决上述问题。特别是当遇到通过 Firebase 向 iOS 设备发送推送通知的问题时。

您可能需要解决的第一件事是确保您的 Firebase 项目设置正确,特别是 APNs 身份验证密钥iOS 推送通知证书

关于您的有效负载,看起来基本正确,但有几点需要澄清:

  • 确保 content_available 字段设置为 true(没有 引号)而不是“真实”。
  • 对于以下通知,优先级字段应设置为高: 应立即交付。但是,由于您正在使用 仅数据通知,优先级可能不会影响您的情况 直接地。尽管如此,正确设置它还是一个很好的做法。
  • 在您的有效负载中,您使用数据字段来发送自定义数据 到应用程序。这应该可以正常工作,但请记住,在 iOS 上, 如果应用程序处于 后台或已终止 ,则仅数据通知 可能不会向用户显示任何内容。你需要 处理传入的数据并决定如何在您的应用程序中显示它 应用程序。

根据您的设置,这是修改后的有效负载示例:

{
  "message": {
    "token": "some token",
    "data": {
      "title": "some title",
      "body": "some body",
      "content_available": true,
      "priority": "high"
    }
  }
}

如果在确保上述几点后您仍然遇到问题,则需要更深入地了解 iOS 设置的具体情况:

  • 您是否正确处理 iOS 应用程序中的传入通知?
  • 确保您已在应用程序委托中实现了必要的方法,以便在应用程序处于前台、后台或终止时处理传入通知。
  • 验证您的 Firebase iOS SDK 设置是否正确,包括初始化代码和 Info.plist 中的任何必要配置。
  • 收到通知时,检查 Xcode 控制台中是否有任何错误日志或警告。 如果您涵盖了所有这些方面,但问题仍然存在,那么提供有关如何处理 iOS 应用程序中的通知以及您遇到的任何错误消息的更多详细信息可能会有所帮助。这将有助于更准确地诊断问题。

0
投票

您所描述的 iOS 行为是预期的。

如果设备离线,APNS 可能会合并应用程序的消息并仅传送最新的

  • 如果 APN 没有立即发送通知,无论是出于设备电源考虑还是因为目标处于离线状态,它可能会合并同一捆绑包 ID 的通知。

iOS 上的推送通知不提供送达保证。它们不应被视为应用程序从服务器获取数据的替代方案。无声推送通知可以用作触发器,告诉您的应用程序从服务器获取数据。

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