在我們的應用程序中,我們希望下載少量數據以響應推送通知。到目前爲止,推送通知運行正常,在後臺啓動應用程序並導致調用didReceiveRemoteNotification。直到應用程序在應用程序中發現時才執行異步代碼:didReceiveRemoteNotification:fetchCompletionHandler:
問題是,在此方法返回後,應用程序不會再獲得更多的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);
});
}
針對一推,應用程序在後臺啓動,並徽章計數設置爲1,但直到應用程序被從主屏幕推出的徽章數量未設置爲9。
iOS應該不會繼續運行應用程序,直到完成處理程序被調用,最多30秒?
Info.plist具有指定的遠程通知背景模式,推送有效負載包含'content-available':'1',並且我不會通過在應用程序切換器中向上滑動來退出應用程序。
要添加,我們使用解析使用下面的JavaScript發送此推送通知:
Parse.Push.send({
where: installationQuery,
data: {
"content-available": 1,
}
}, { success: function() {},
error: function(error) {}
});
你試過這個:http://stackoverflow.com/questions/16295953/dispatch-after-is-limited-to-10-seconds? – anhtu