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)")
}
}
また、許可されたバックグラウンドタスクスケジューラ識別子(BGTaskSchedulerPermittedIdentifiers)の下のinfo.plistファイルでタスクIDをホワイトリストに登録することを忘れないでください。
あなたが書いたコードのブロックを追加しました。しかし、いくつか問題があります。
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に何を書き込む必要がありますか?
どうもありがとう