在ios7上接收远程通知(静音推送)时执行后台任务



我目前正在构建一个应用程序,利用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分钟。

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

您是否正确配置了plist?

  1. 你需要告诉iOS你是一个远程通知应用,并且你在挂起时请求额外的周期。
  2. UIBackgroundModes须经批准

来自文档:

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

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

最新更新