iOS中didReceiveRemoteNotification的两个委托方法有什么区别?

时间:2017-03-10 11:54:32

标签: ios objective-c push-notification

我已经在我的iOS应用中实现了Push Notification。我可以看到delegate的两种didReceiveRemoteNotification方法,如下面的方法:这两种方法有什么区别?

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { }

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  completionHandler(UIBackgroundFetchResultNewData);
}

4 个答案:

答案 0 :(得分:3)

第一个在iOS 10.0中被弃用,使用第二个。第二个信息

  

即使由于远程通知而启动或恢复了应用程序,也会调用此方法。将首先调用相应的委托方法。请注意,此行为与application:didReceiveRemoteNotification:形成对比,在这种情况下不会调用,如果实现此方法,则不会调用此行为。

第一个

  

使用UserNotifications Framework - [UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]或 - [UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]用于用户可见通知,以及 - [UIApplicationDelegate应用程序:didReceiveRemoteNotification:fetchCompletionHandler:]用于静默远程通知

答案 1 :(得分:1)

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { }**

当您的应用收到远程通知时调用。此方法在iOS 10.0中已弃用

有关详情,请点击here

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo     fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {   completionHandler(UIBackgroundFetchResultNewData); }**

告诉应用程序已收到远程通知,表明有数据要提取。

有关详情,请点击here

答案 2 :(得分:0)

以下方法更新一次

此委托方法为具有“远程通知”后台模式的应用程序提供了一个机会,可以获取适当的新数据以响应传入的远程通知。您应该在完成该操作后立即调用fetchCompletionHandler,以便系统可以准确估计其功率和数据成本。

即使由于远程通知而启动或恢复了应用程序,也会调用此方法。将首先调用相应的委托方法。请注意,此行为与application:didReceiveRemoteNotification:形成对比,在这种情况下不会调用,如果实现此方法,则不会调用此行为。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo     fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
 {
   completionHandler(UIBackgroundFetchResultNewData);
 }

答案 3 :(得分:0)

您的应用需要处理所有可能的推送通知递送状态:

您的应用刚刚推出

您的应用只是从背景到前景

您的应用已在前台运行

  1. 您可以使用以下代码判断您的应用是否刚刚被带到didReceiveRemoteNotification的前台:在iOS 10.0中弃用

    • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
  2. 告诉应用程序已收到远程通知,表明有数据要提取。使用此方法处理应用程序的传入远程通知。与仅在应用程序在前台运行时调用的application:didReceiveRemoteNotification:方法不同,当您的应用程序在前台或后台运行时,系统会调用此方法。此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从暂停状态唤醒),并在远程通知到达时将其置于后台状态。但是,如果用户强行退出,系统不会自动启动您的应用。在这种情况下,用户必须重新启动您的应用程序或重新启动设备,然后系统才会再次尝试自动启动您的应用。

    • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult result))completionHandler;
  3. 另外

      

    下载操作完成时要执行的块。调用此块时,传入最能描述下载操作结果的获取结果值。您必须调用此处理程序,并应尽快执行此操作。有关可能值的列表,请参阅UIBackgroundFetchResult类型。