如何在没有用户交互的情况下在后台接收 iOS 通知
Posted
技术标签:
【中文标题】如何在没有用户交互的情况下在后台接收 iOS 通知【英文标题】:How to receive iOS notifications in background without user interaction 【发布时间】:2017-08-17 05:40:00 【问题描述】:我使用以下方法在AppDelegate
中接收通知。当用户在前台时,通知按预期接收。但是如果用户在后台通知将收到(在 AppDelegate 中)通知
仅当用户点击弹出窗口时。当应用程序在后台运行时,如何在不涉及用户点击的情况下接收通知。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
NSLog( @"Handle push from foreground" );
// custom code to handle push while app is in the foreground
[[ACBRemoteNotificationManger sharedManager] addNotificationFromUNNotification:notification];
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler
NSLog( @"Handle push from background or closed" );
// if you set a member variable in didReceiveRemoteNotification, you will know if this is from closed or background
NSLog(@"%@", response.notification.request.content.userInfo);
【问题讨论】:
您是否在推送通知中设置content-available:1
?
@Paulw11:- 我是 FCM 的新手请告诉我在哪里设置 content-available:1 ?很困惑,请给我演示代码。谢谢
【参考方案1】:
如果这确实是您在后台模式下接收 PUSH 时执行某些方法/代码的要求,您必须实现 application:didReceiveRemoteNotification:fetchCompletionHandler:
It is stated in Documentation
要支持这种后台模式,请在 Xcode 项目的功能选项卡的后台模式部分启用远程通知选项。
对于触发某个操作的推送通知,通知的有效负载必须包含
content-available
键,其值设置为1
。当该键存在时,系统会在后台唤醒应用程序(或将其启动到后台)并调用应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler:
方法。您对该方法的实现应该在后台执行您想要的任务。
Check this Doumentation Link too
当远程通知到达时,系统会向用户显示通知并在后台启动应用程序(如果需要),以便它可以调用此方法。在后台启动您的应用可以让您有时间处理通知并下载与其相关的任何数据,从而最大限度地减少通知到达和向用户显示该数据之间的时间。
否则在没有用户交互的情况下无法处理 PUSH 通知
【讨论】:
以上是关于如何在没有用户交互的情况下在后台接收 iOS 通知的主要内容,如果未能解决你的问题,请参考以下文章
当通知到达并且应用程序在后台没有用户交互时,如何在 React Native 中执行操作?
在没有任何用户控制或交互的情况下在 iPhone 上播放全屏视频?