Apakah notifikasi push jarak jauh perlu menambahkan UIBackgroundModes di Info.plist?

104

Saya telah mengintegrasikan notifikasi push jarak jauh, tetapi saya mendapatkan peringatan ini:

didReceiveRemoteNotification:fetchCompletionHandler:], tetapi Anda masih perlu menambahkan " remote-notification" ke daftar yang didukung UIBackgroundModedi Info.plist.

Versi Xcode saya adalah 8.3.1. Saya sangat ingin menambahkan ini ke Info.plist. Saya telah mengikuti beberapa tutorial juga tetapi mereka tidak menyebutkan ini juga. Apa yang harus saya lakukan?

pengguna1960169
sumber

Jawaban:

245

Ya, Anda harus mengaktifkan Mode Latar Belakang / Notifikasi jarak jauh agar dapat menggunakan notifikasi jarak jauh untuk pembaruan latar belakang.

Cara termudah untuk melakukannya adalah melalui pengaturan proyek. Arahkan ke Target -> Aplikasi Anda -> Kemampuan -> Mode Latar Belakang dan periksa pemberitahuan jarak jauh . Ini secara otomatis akan mengaktifkan pengaturan yang diperlukan.

Daftar dropdown Mode Latar Belakang di Pengaturan Proyek

Tamás Sengel
sumber
3
Saya sudah memeriksa bidang itu tetapi masih mendapatkan kesalahan yang sama.
Anuj
Anuj melihat jawaban saya di bawah ini
Joshua Cleetus
1
Saya tidak setuju dengan jawaban ini. Anda sebaiknya hanya mengaktifkan mode Latar Belakang -> Pemberitahuan jarak jauh jika Anda menggunakan pemberitahuan jarak jauh untuk melakukan pembaruan latar belakang. Silakan merujuk ke dokumen di sini Mengonfigurasi Pemberitahuan Pembaruan Latar Belakang
jzeferino
1
@jzeferino Terima kasih atas pemberitahuannya, saya telah menambahkan beberapa klarifikasi pada jawaban saya. Perhatikan bahwa pertanyaan awal adalah tentang application(_:didReceiveRemoteNotification:fetchCompletionHandler:)fungsi, yang digunakan untuk menangani pengambilan data.
Tamás Sengel
Ini bagus, tetapi menjawab pertanyaan apakah Anda memerlukan kemampuan untuk pembaruan latar belakang, yang tentu saja Anda lakukan. Saya memposting jawaban tentang apakah Anda perlu mengatur kemampuan mode latar belakang hanya untuk pemberitahuan push (spoiler, Anda tidak).
mobob
30

Anda juga dapat mengedit info.plist yang diperlukan (Open As -> Source Code) dan menempel:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
Aleksandr B.
sumber
7
Sekarang secara otomatis ditambahkan oleh Xcode saat memeriksa Pemberitahuan Jarak Jauh dalam Mode Latar Belakang
Vinoth Vino
1
Bukan untuk saya: Versi 11.4.1 (11E503a)
paiego
4

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.

mobob
sumber
3

Itu terjadi pada saya bahkan setelah mengatur mode latar belakang pemberitahuan jarak jauh dalam kemampuan. Masalahnya adalah saya memiliki tiga target, satu untuk produksi, satu untuk qa dan satu untuk pementasan. Saya harus mengatur notifikasi jarak jauh di ketiga target dan itu memperbaiki peringatan.

Joshua Cleetus
sumber