Saya memicu pengambilan latar belakang dengan menggunakan content-available
bendera pada pemberitahuan push. Saya memiliki fetch
dan remote-notification
UIBackgroundModes
mengaktifkan.
Berikut ini adalah implementasi yang saya gunakan di AppDelegate.m saya:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"Remote Notification Recieved");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Looks like i got a notification - fetch thingy";
[application presentLocalNotificationNow:notification];
completionHandler(UIBackgroundFetchResultNewData);
}
Ketika aplikasi berjalan di latar belakang, itu berfungsi dengan baik. (Pemberitahuan diterima dan aplikasi memicu pemberitahuan lokal "sepertinya saya mendapat pemberitahuan", seperti yang harus dilakukan kode di atas).
Namun, ketika aplikasi tidak berjalan dan pemberitahuan push diterima dengan content-available
bendera, aplikasi tidak diluncurkan dan didRecieveRemoteNotification
metode delegasi tidak pernah dipanggil.
Video WWDC Whats New With Multitasking (# 204 dari WWDC 2013) menunjukkan ini:
Dikatakan bahwa aplikasi "diluncurkan ke latar belakang" ketika pemberitahuan push diterima dengan content-available
bendera.
Mengapa aplikasi saya tidak diluncurkan ke latar belakang?
Jadi pertanyaan sebenarnya adalah:
Apakah iOS akan melakukan tugas latar belakang setelah pengguna keluar dari aplikasi secara paksa?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions