特定のスケジュールされた時間にアプリでバックグラウンド フェッチを実行しようとしています。私はiOSにこれを自分で整理させるという考えを持っていたので、(AppDelegateで):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil]];
}
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
そして(AppDelegateでも)
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSDate *now = [NSDate date];
if ((([now timeIntervalSinceDate:lastCheckTime]/60) > 60)||(!lastCheckTime)) { //don't update more than once every hour
lastCheckTime = now;
[notificationUpdate getStatusUpdateWithCompletionHandler:completionHandler];
} else {
completionHandler(UIBackgroundFetchResultNewData);
}
}
Xcode でバックグラウンド チェックを手動で起動すると、これは完全に機能します。残念ながら、そのままにしておくと完全には機能しません。
getStatusUpdate 関数を実行する時間をスケジュールしたり、特定の時間にバックグラウンド フェッチを発生させたりするにはどうすればよいですか (実際の使用例では、目覚まし時計のように、ユーザーが定義した時間にアプリがチェックします。これは常に実行され、バッテリーをかみ砕くものではありません)
アラームのスケジュール設定について、インターネット上で多くの情報を見つけました (ここを含む - CoreLocation を使用してバックグラウンド フェッチを起動することを提案した例をここで見つけました - これが機能するかどうかはわかりませんが、電力節約の理由から、私はその考えが好きではありません.) -しかし、これはアラートを画面に表示するだけであり、アラートを表示したくありません-少なくとも、ステータスの更新を確認する前ではありません.
いつものように、どんな助けも非常にありがたく受け取られます (しかし、答えは、私がやりたいことをすることができないということです!)。