我使用以下方法在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);
}
答案 0 :(得分:3)
如果您真的需要在后台模式下接收PUSH时执行某些方法/代码,则必须实现application:didReceiveRemoteNotification:fetchCompletionHandler:
要支持此后台模式,请启用Xcode项目中功能标签的后台模式部分中的远程通知选项。
对于触发某个操作的推送通知,通知的有效负载必须包含
content-available
密钥,其值设置为1
。当该密钥存在时,系统会在后台唤醒应用程序(或将其启动到后台)并调用应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler:
方法。您对该方法的实现应该在后台执行您想要的tass。
Check this Doumentation Link too
当远程通知到达时,系统会向用户显示通知并在后台启动应用程序(如果需要),以便可以调用此方法。在后台启动您的应用程序,您可以有时间处理通知并下载与其关联的任何数据,从而最大限度地缩短通知到达和向用户显示数据之间经过的时间。
否则无法在没有用户交互的情况下处理PUSH通知