iOS 模拟器中的静默通知

Nig*_*LxD 7 background-process push-notification ios ios-simulator swift

我一直在研究 iOS 中的后台执行。其中一种方法是无声通知。

无声通知(又名后台推送)可用于将应用程序从挂起状态唤醒并更新内容。从 Xcode 11.4 开始,可以模拟常规用户通知,如此处所述。然后,从 Xcode 14 开始,那些拥有 Apple Silicon Mac 笔记本电脑的用户将能够从 APNS 本身向模拟器发送通知......太棒了。

但这篇文章是关于无声通知的。

使用的 .apns 文件是,

{
    "Simulator Target Bundle": "com.example.IOSBackgroundExec",
    "aps": {
        "content-available": 1
    }
}
Run Code Online (Sandbox Code Playgroud)

在项目设置中,“签名和功能”选项卡下启用“远程通知”,并添加推送通知。无声通知不需要用户许可。

当应用程序被唤醒时,应该调用以下委托方法。

// Handling silent remote notification
    
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        
    NSLog(AppDelegate.TAG + "application(_:didReceiveRemoteNotification:fetchCompletionHandler:)")

    // Some work
        
    completionHandler(.newData)
}
Run Code Online (Sandbox Code Playgroud)

问题):

  1. 当我拖放 .apns 文件时,不会调用委托方法。我知道后台获取和后台处理无法在模拟器中进行测试,因为它们的调度取决于系统条件,而这超出了模拟器的范围。那么静默通知也无法在模拟器中测试吗?
  2. 根据文档,通过用户强制退出,用户从应用程序切换器中滑动应用程序被引用?即使刷完 WhatsApp 后,只要有互联网连接,您仍然会收到传入消息的通知,对吗?

此外,如果您启用了远程通知后台模式,系统会启动您的应用程序(或将其从挂起状态唤醒),并在远程通知到达时将其置于后台状态。但是,如果用户强制退出,系统不会自动启动您的应用程序。

环境:Xcode 14.2、iOS 模拟器 16.x

Nig*_*LxD 1

到目前为止我得到的答案:

  1. 我无法通过将 .apns 文件放入模拟器来模拟后台通知。如果您有硅 Mac(如问题中所链接),应该可以通过 APNS 进入模拟器。
  2. 通过从应用程序切换器中滑动应用程序来强制退出应用程序后,我观察到有时后台推送会起作用,有时则不起作用(我已在此处发布了有关这种不明确行为的信息)...但正如官方记录的那样,它不应该起作用,所以让我们继续吧。最近,在最新版本的 iOS(撰写本文时为 16.4)中,用户从应用程序切换器中滑动应用程序后,后台推送无法正常工作......所以这可能是一个错误,并在最新更新中得到了解决。

如果有人有不同的观察结果,请告诉我。

更新(来自评论):即使使用硅 Mac,也观察到后台推送不起作用。警报通知虽然有效。

  • 我有 Mac,只有警报可以工作,背景不行,他们有一个错误,像往常一样 (2认同)