如何在没有用户交互的情况下在后台接收iOS通知

时间:2017-08-17 05:40:01

标签: ios objective-c notifications appdelegate

我使用以下方法在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);
} 

1 个答案:

答案 0 :(得分:3)

如果您真的需要在后台模式下接收PUSH时执行某些方法/代码,则必须实现application:didReceiveRemoteNotification:fetchCompletionHandler:

It is stated in Documentation

  

要支持此后台模式,请启用Xcode项目中功能标签的后台模式部分中的远程通知选项。

     

对于触发某个操作的推送通知,通知的有效负载必须包含content-available密钥,其值设置为1。当该密钥存在时,系统会在后台唤醒应用程序(或将其启动到后台)并调用应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler:方法。您对该方法的实现应该在后台执行您想要的tass。

Check this Doumentation Link too

  

当远程通知到达时,系统会向用户显示通知并在后台启动应用程序(如果需要),以便可以调用此方法。在后台启动您的应用程序,您可以有时间处理通知并下载与其关联的任何数据,从而最大限度地缩短通知到达和向用户显示数据之间经过的时间。

否则无法在没有用户交互的情况下处理PUSH通知