Nyatanya, Anda tidak perlu menambahkan UIBackgroundModes ke .plist hanya untuk menggunakan notifikasi jarak jauh.
Saya tahu saya sedikit memisahkan ahli waris (jawaban lain sebagian besar bagus, dan mungkin ada sesuatu yang baru pada iOS 11), tetapi pertanyaannya mengacu pada pemberitahuan push yang memerlukan pembaruan latar belakang, dan ternyata tidak.
Perbedaannya di sini, adalah ada dua metode berbeda yang menerima pemberitahuan di AppDelegate;
Yang ini tidak mengharuskan Anda menggunakan UIBackgroundModes:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
Di atas menggantikan yang tidak digunakan lagi pada iOS 11:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
Dan yang satu ini memang membutuhkan kemampuan mode latar belakang:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
Kuncinya di sini, adalah yang pertama (dan yang sudah tidak digunakan lagi diganti) hanya berjalan ketika aplikasi berada di latar depan. Yang terakhir akan berjalan jika aplikasi berada di latar depan ATAU latar belakang. Lihat spesifikasi untuk nugget spesifik ini:
Gunakan metode ini untuk memproses notifikasi jarak jauh yang masuk untuk aplikasi Anda. Tidak seperti metode application (_: didReceiveRemoteNotification :), yang hanya dipanggil saat aplikasi Anda berjalan di latar depan, sistem akan memanggil metode ini saat aplikasi Anda berjalan di latar depan atau latar belakang.
Karenanya, jika Anda memerlukan notifikasi push, putuskan apakah Anda perlu menjalankan di latar belakang - hanya jika Anda memerlukan keduanya, Anda harus menerapkan metode yang disarankan oleh peringatan tersebut.