簡體   English   中英

iOS后台獲取不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM