web-dev-qa-db-ja.com

iOS 13 Objective-Cバックグラウンドタスクリクエスト

Objective-Cとバックグラウンドタスクのリクエストに関する質問があります。

IOS 13ではバックグラウンドモードに制限されています。

アプリが30秒以上バックグラウンドで実行されません。

IOS 13で変更されたバックグラウンドモード.

次のように、objective-cでバックグラウンドタスクを登録する必要があります。

BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.SO.apprefresh", using: nil) { task in
    self.scheduleLocalNotification()
    self.handleAppRefreshTask(task: task as! BGAppRefreshTask)
}

アプリがバックグラウンドになるときのスケジュールが必要です

func scheduleAppRefresh() {
    let request = BGAppRefreshTaskRequest(identifier: "com.SO.apprefresh")
    request.earliestBeginDate = Date(timeIntervalSinceNow: 2 * 60) // App Refresh after 2 minute.
    do {
        try BGTaskScheduler.shared.submit(request)
    } catch {
        print("Could not schedule app refresh: \(error)")
    }
}
3
Hakan Turkmen

また、許可されたバックグラウンドタスクスケジューラ識別子(BGTaskSchedulerPermittedIdentifiers)の下のinfo.plistファイルでタスクIDをホワイトリストに登録することを忘れないでください。

1
Grisu

あなたが書いたコードのブロックを追加しました。しかし、いくつか問題があります。

appdelegate.m内のすべてのコード:

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    self.viewController = [[MainViewController alloc] init];
    return [super application:application didFinishLaunchingWithOptions:launchOptions];

}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"The code runs through here!");
}





static NSString* TaskID = @"com.SO.apprefresh";

-(void)configure {
    [[BGTaskScheduler sharedScheduler] registerForTaskWithIdentifier:TaskID
                                                          usingQueue:nil
                                                       launchHandler:^(BGTask *task) {
        [self scheduleLocalNotifications];
        [self handleAppRefreshTask:task];
    }];
}

-(void)scheduleLocalNotifications {
    //do things
}
-(void)handleAppRefreshTask:(BGTask *)task {
    //do things with task
}


-(void)scheduleAppRefresh {
    BGAppRefreshTaskRequest *request = [[BGAppRefreshTaskRequest alloc] initWithIdentifier:TaskID];
    request.earliestBeginDate = [NSDate dateWithTimeIntervalSinceNow:2*60];
    NSError *error = NULL;
    BOOL success = [[BGTaskScheduler sharedScheduler] submitTaskRequest:request error:&error];
    if (!success) {
        NSLog(@"Failed to submit request: %@",error);
    }
}


@end

バックグラウンドプロセスを宣言するにはどうすればよいですか?またはappdelegate.hに何を書き込む必要がありますか?

どうもありがとう

0
Hakan Turkmen