Ketika aplikasi Pesan iOS resmi Apple terbuka dan di latar depan, pesan baru dari kontak lain memicu stok, spanduk peringatan pemberitahuan iOS asli. Lihat gambar di bawah.
Apakah ini mungkin di aplikasi pihak ke-3 di App Store? Lokal dan / atau Pemberitahuan Push untuk aplikasi Anda saat aplikasi Anda terbuka dan di latar depan ?
Saat menguji aplikasi saya , pemberitahuan diterima tetapi tidak ada UI peringatan iOS yang ditampilkan .
Tetapi perilaku ini terlihat di aplikasi Pesan resmi Apple:
The Local dan Remote Pemberitahuan Panduan Pemrograman mengatakan:
Saat sistem operasi mengirimkan notifikasi lokal atau notifikasi jarak jauh dan aplikasi target tidak berjalan di latar depan , sistem operasi dapat menyajikan notifikasi kepada pengguna melalui peringatan , nomor lencana ikon, atau suara.
Jika aplikasi berjalan di latar depan saat notifikasi dikirimkan, delegasi aplikasi akan menerima notifikasi lokal atau jarak jauh.
Jadi ya, kami dapat menerima data notifikasi saat berada di latar depan. Tapi saya tidak melihat cara untuk menyajikan UI pemberitahuan pemberitahuan iOS asli .
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// I know we still receive the notification `userInfo` payload in the foreground.
// This question is about displaying the stock iOS notification alert UI.
// Yes, one *could* use a 3rd party toast alert framework.
[self use3rdPartyToastAlertFrameworkFromGithub]
}
Apakah Message menggunakan API pribadi untuk menampilkan peringatan saat berada di latar depan?
Untuk tujuan pertanyaan ini, mohon jangan menyarankan pop-up alert "toast" pihak ketiga di github atau dll. Saya hanya tertarik jika ini dapat dilakukan dengan menggunakan stock, native iOS Lokal atau UI notifikasi Push Notification saat Anda aplikasi terbuka dan di latar depan .
UNUserNotificationCenter.current().delegate = self
dalamapplication(_:willFinishLaunchingWithOptions:)
atauapplication(_:didFinishLaunchingWithOptions:)
metodeUntuk menampilkan pesan banner saat aplikasi berada di latar depan, gunakan metode berikut.
iOS 10+, Swift 3+ :
sumber
AppDelegate
. Itu harus diletakkan untuk objek apa pun yang sesuaiUNUserNotificationCenterDelegate
. Karena itu, sebagian besar pengembang membuatAppDelegate
penyesuaian merekaUNUserNotificationCenterDelegate
. @YoavR.EDIT:
Peringatan latar depan sekarang dapat dilakukan di iOS 10! Silakan lihat jawaban ini .
Untuk iOS 9 dan yang lebih lama:
Tampaknya tidak mungkin untuk menampilkan peringatan pemberitahuan iOS stok saat aplikasi Anda terbuka dan di latar depan. Messages.app harus menggunakan API pribadi.
The
UIApplicationDelegate
metode akan masih disebut, memungkinkan aplikasi Anda untuk merespon pemberitahuan lokal atau remote:Namun, UI spanduk pemberitahuan pemberitahuan bawaan iOS tidak akan ditampilkan seperti di Messages.app Apple, yang harus menggunakan API Pribadi.
Hal terbaik yang dapat Anda lakukan adalah menggulung spanduk peringatan Anda sendiri atau menggunakan kerangka kerja yang sudah ada:
Saya telah membuka radar untuk perilaku ini di sini:
rdar://22313177
sumber
toastAlertFromGithub
jika Anda menyarankan perpustakaan pihak ketiga ini untuk digunakan!Untuk menampilkan pemberitahuan saat Aplikasi terbuka, kita perlu menanganinya secara manual. Jadi yang saya lakukan di bawah ini adalah menangani notifikasi setelah diterima.
Tambahkan semua di bawah ini di AppDelegate.m
Beri tahu saya jika ini adalah solusi yang baik. Bekerja dengan baik untuk saya tetapi saya tidak yakin apakah ini cara yang benar.
sumber
Berikut adalah kode untuk menerima Pemberitahuan Push ketika aplikasi di latar depan atau di tahap terbuka, iOS 10 & Swift 2.3
Jika Anda perlu mengakses userInfo dari kode penggunaan notifikasi:
notification.request.content.userInfo
Metode
userNotificationCenter(_:willPresent:withCompletionHandler:)
ini hanya dipanggil jika Anda menambahkan ke payload atributcontent-available:1
. Muatan terakhir harus seperti ini:sumber
userNotificationCenter(_:willPresent:withCompletionHandler:)
akan dipanggil saat aplikasi Anda berjalan di latar depan. Jadi TIDAK masalah dengan " konten-tersedia ", yang terkait dengan " pengambilan latar belakang ".Saya dapat menampilkan pemberitahuan push saat aplikasi aktif untuk iOS 10.
Pemberitahuan push dari server harus senyap .
Saat menerima pemberitahuan jarak jauh dari server, Anda mengirim pemberitahuan lokal dan menyetel nilai untuk keyPath: shouldAlwaysAlertWhileAppIsForeground = True
sumber
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
benar? (dengan "Ya" dan tidak benar)Anda dapat menangani sendiri notifikasi tersebut dan menampilkan peringatan kustom. Aplikasi seperti Viber, Whatsapp, dan BisPhone menggunakan pendekatan ini.
Salah satu contoh lansiran ubahsuaian pihak ketiga adalah CRToast .
Coba jadwalkan pemberitahuan lokal saat aplikasi Anda berada di latar depan, dan Anda akan melihat bahwa tidak ada peringatan stok iOS yang ditampilkan:
sumber
Versi Swift 3
Ini menunjukkan peringatan saat aplikasi berada di latar depan.
Implementasi ApplicationDelegate dari
UNUserNotificationCenterDelegate
sumber
Untuk menampilkan Pemberitahuan lokal, ini adalah opsi terbaik. perlu lebih sedikit kode untuk wright "BRYXBanner" https://cocoapods.org/pods/BRYXBanner
sumber
BRYXBanner
kerangka tampaknya tidak menggunakan saham iOS pemberitahuan banner.Jika target penerapan Anda> = iOS10, gunakan UNUserNotification seperti di bawah-
sumber