我目前正在构建一个应用程序,利用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?
- 你需要告诉iOS你是一个远程通知应用,并且你在挂起时请求额外的周期。
-
UIBackgroundModes
须经批准
来自文档:
应用程序的后台模式:UIBackgroundModes
value = remote-notification
应用程序希望在推送通知到达时开始下载内容。使用此通知可以最大限度地减少显示与推送通知相关内容的延迟