[英]iOS background fetch not working
我想每隔30分鍾從服務器中提取一些數據,並設置本地通知來提醒用戶,我實現了以下代碼以執行此操作。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSString *value = [[NSUserDefaults standardUserDefaults]objectForKey:@"bgFetch"];
if ([Utilities isInternetConnectionAvailable]) {
if ([self.window.rootViewController isKindOfClass:[HomeViewController class]]){
HomeViewController *homeController = (HomeViewController*)self.window.rootViewController;
[homeController fetchDatawithCompletionHandler:^(UserData *userData, NSString *errorResponse) {
if (userData) {
if (![homeController isNotificationAvailvableForTheData:userData]) {
[homeController scheduleLocalNotificationForUserData:userData];
completionHandler(UIBackgroundFetchResultNewData);
}
}else{
completionHandler(UIBackgroundFetchResultFailed);
}
}];
}else{
completionHandler(UIBackgroundFetchResultNoData);
}
}else{
completionHandler(UIBackgroundFetchResultFailed);
}
}
我還啟用了后台獲取功能,並在plist中添加了關鍵的“必需的后台模式”。 當我幾個小時后檢查時,未設置任何本地通知。 我在哪里做錯了?
我面臨着同樣的問題。 每當我通過XCode模擬后台提取時,無論在模擬器還是在真實設備上,后台提取都能正常工作。 如果我拔下電話並像往常一樣使用它。 我沒有收到通知,或者我的代碼沒有執行。 解決方案非常簡單,我認為“模擬后台提取”的區別在於您的應用程序處於不同於日常工作的階段。 要使其工作,只需在后台線程上分派代碼即可。 我只是將代碼包裝在其中:
DispatchQueue.global(qos: .background).async
而且有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.