在我们的应用程序中,我们希望下载少量数据以响应推送通知.到目前为止,推送通知工作正常,在后台启动应用程序并导致调用didReceiveRemoteNotification.
问题是,在此方法返回之后,应用程序不再获得CPU时间,直到它再次被预先考虑,因此没有机会在后台异步获取该数据.
将此减少到最简单的情况,我仍然无法运行异步代码.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[application setApplicationIconBadgeNumber:1];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[application setApplicationIconBadgeNumber:9];
completionHandler(UIBackgroundFetchResultNewData);
});
}
Run Code Online (Sandbox Code Playgroud)
响应推送,应用程序在后台启动,徽章计数设置为1,但在从主屏幕启动应用程序之前,徽章编号不会设置为9.
在调用完成处理程序之前,iOS是否应该继续运行应用程序,最多30秒?
Info.plist指定了远程通知后台模式,推送有效负载包含'content-available':'1',并且我没有通过在应用切换器中向上滑动来退出应用.
要添加,我们使用Parse使用以下Javascript发送此推送通知:
Parse.Push.send({
where: installationQuery,
data: {
"content-available": 1,
}
}, { success: function() {},
error: function(error) {}
});
Run Code Online (Sandbox Code Playgroud) asynchronous objective-c push-notification apple-push-notifications ios