handleBackgroundTasks не вызывается для обновления осложнений на Apple Watch - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь обновить услугу моего приложения на Apple Watch. Но handleBackgroundTasks: метод не вызывается.

Когда приложение входит в фоновый режим, у меня есть

-(void)applicationDidEnterBackground {

   //update the complications
   [self updateComplicationData];

   //schedule the next time the complications should be updated
   [self scheduleNextComplicationBackgroundRefreshTask];
}

, который вызывает этот метод для планирования обновления усложнения

-(void)scheduleNextComplicationBackgroundRefreshTask{

    NSDictionary *backgroundRefreshUserInfo = @{@"reason": @"Bakcground Complication Refresh"};
    NSDate * fireDate = [NSDate dateWithTimeIntervalSinceNow: (NSTimeInterval) 60];

    //scheduling the refresh
    [[WKExtension sharedExtension] scheduleBackgroundRefreshWithPreferredDate:fireDate userInfo:backgroundRefreshUserInfo scheduledCompletion:^(NSError *error){

        if (error == nil) {
            NSLog(@"successfully scheduled background refresh task");
        } else {
            NSLog(@"unable to schedule background refresh task, error:%@", error);
        }
    }];
}

Я получаю «успешно запланированный фоновый refre sh задача "сообщение после вызова этого метода. Но тогда мой handleBackgroundTasks: метод никогда не вызывается.

-(void)handleBackgroundTasks:(NSSet<WKRefreshBackgroundTask *> *)backgroundTasks{

    NSLog(@"Handle background task is called");

    for (WKRefreshBackgroundTask *task in backgroundTasks) {

        if ([[WKExtension sharedExtension] applicationState] == WKApplicationStateBackground) {

            // Background Refresh
            if ([task isKindOfClass:[WKApplicationRefreshBackgroundTask class]]){

                NSDictionary *userInfo = (NSDictionary *)[task userInfo];
                if ([[userInfo objectForKey:@"reason"] isEqualToString:RESEAON_BACKGROUND_REFRESH]) {

                    [self updateComplicationData];
                    [self scheduleNextComplicationBackgroundRefreshTask];
                }

            }else if ([task isKindOfClass:[WKWatchConnectivityRefreshBackgroundTask class]]) {

            }else if ([task isKindOfClass:[WKSnapshotRefreshBackgroundTask class]]){

            }else if ([task isKindOfClass:[WKURLSessionRefreshBackgroundTask class]]) {

            }
        }

    [task setTaskCompleted];
    }
}
...