Aslında, yalnızca uzak bildirimleri kullanmak için UIBackgroundModes'u .plist'e eklemenize gerek yoktur.
Mirasçıları biraz ayırdığımı biliyorum (diğer cevap çoğunlukla harika ve belki de iOS 11'den itibaren yeni bir şey var), ancak soru arka plan güncellemelerini gerektiren push bildirimlerine atıfta bulunuyor ve bunlar değil.
Buradaki ayrım, AppDelegate'te bildirimleri kabul eden iki farklı yöntem olmasıdır;
Bu, UIBackgroundModes kullanmanızı gerektirmez:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
Yukarıdakiler, iOS 11'den itibaren kullanımdan kaldırılanların yerini alır:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
Ve bu, arka plan modları yeteneği gerektirir:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
Buradaki kilit nokta, eski olanın (ve değiştirildiği kullanımdan kaldırılanın) yalnızca uygulama ön plandayken çalıştığıdır. İkincisi, uygulama ön plandaysa VEYA arka plandaysa çalışacaktır. Bkz spec bu özel külçe için:
Uygulamanıza gelen uzaktan bildirimleri işlemek için bu yöntemi kullanın. Yalnızca uygulamanız ön planda çalışırken çağrılan uygulamanın (_: didReceiveRemoteNotification :) yönteminin aksine, sistem, uygulamanız ön planda veya arka planda çalışırken bu yöntemi çağırır.
Bu nedenle, push bildirimlerine ihtiyacınız varsa, arka planda çalıştırmanız gerekip gerekmediğine karar verin - yalnızca her ikisine de ihtiyacınız varsa, uyarı tarafından önerilen yöntemi uygulamalısınız.