1

我目前正在构建一个应用程序,该应用程序利用 iOS 7 的静默推送通知来根据请求在后台唤醒应用程序。

正如我会做的那样,-applicationDidEnterBackground:我启动了一个后台任务,-application:didReceiveRemoteNotification:fetchCompletionHandler:如下所示:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

{

    self.taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

        [[UIApplication sharedApplication] endBackgroundTask:self.taskId];

        self.taskId = UIBackgroundTaskInvalid;



        completionHandler(UIBackgroundFetchResultNewData);

    }];

}

虽然该应用程序成功注册了远程通知并-application:didReceiveRemoteNotification:fetchCompletionHandler:在通知到达时被调用,但该应用程序在返回挂起状态之前仅在后台停留几秒钟,远短于给定的预期执行时间(在调用时-applicationDidEnterBackground:),我认为大约是 3 分钟。

这是预期的行为吗?还是不能使用远程通知?

4

1 回答 1

0

您是否正确配置了 plist?

  1. 您需要告诉 iOS 您是一个远程通知应用程序,并且您在暂停时请求额外的周期。
  2. 有待UIBackgroundModes批准

文档中:

应用程序的后台模式UIBackgroundModes值 =remote-notification

该应用程序希望在推送通知到达时开始下载内容。使用此通知可以最大限度地减少显示与推送通知相关的内容的延迟。

于 2014-07-22T18:37:38.443 回答