0

我计划在我的 iOS 应用程序中通过 FCM 实现静默通知。我发现许多文章和 SO 帖子描述了如何实现这一目标。但我的问题源于我在 FCM文档中找到了这个代码片段。请注意评论的第一行。

func application(_ application: UIApplication,
                 didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult)
                   -> Void) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // Messaging.messaging().appDidReceiveMessage(userInfo)

  // Print message ID.
  if let messageID = userInfo[gcmMessageIDKey] {
    print("Message ID: \(messageID)")
  }

  // Print full message.
  print(userInfo)

  completionHandler(UIBackgroundFetchResult.newData)
}

此代码在标题处理静默推送通知下提供。据我了解,无论应用程序处于什么状态,静默通知都不会出现在屏幕上或以任何方式提醒用户。那为什么会提到点击通知?

我的意图是向 iOS 设备发送静默通知并执行一些后台任务,而无需任何用户交互。后台通知的限制是可以接受的。由于我目前没有苹果开发者帐户的权限来测试这一点,任何人都可以告诉我这是否可以通过 FCM 实现?或者我应该考虑直接使用 APNS 吗?

4

1 回答 1

1

当您的应用程序在前台或后台运行时,系统会调用此方法,这就是注释存在的原因。此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从挂起状态唤醒)并在远程通知到达时将其置于后台状态。但是,如果用户强制退出,系统不会自动启动您的应用程序。在这种情况下,用户必须重新启动您的应用程序或重新启动设备,然后系统才会再次尝试自动启动您的应用程序。

您还可以通过使用 FCM 来发送后台通知,使用仅包含content-available键的 aps 字典创建远程通知,如下所示。您可以在有效负载中包含自定义键,但 aps 字典不得包含任何会触发用户交互的键。

{
   "aps" : {
      "content-available" : 1
   },
   "acme1" : "bar",
   "acme2" : 42
}

代码片段内的注释是旧的和错误的看苹果最新的解释方法

在此处输入图像描述

于 2021-10-14T06:49:55.117 回答