Dalam presentasi WWDC 2013 "What's New with Multitasking", ada bagian tentang Silent Push Notifications. Sepertinya lurus ke depan. Menurut presentasi, jika Anda mengirim payload APS hanya dengan set konten yang tersedia ke 1, pengguna tidak akan diberi tahu tentang notifikasi tersebut.
// A. This doesn't work
{
aps: {
content-available: 1
}
}
Pengujian saya menunjukkan bahwa ini tidak berfungsi karena tidak ada push yang diterima. Tetapi jika saya menyertakan atribut suara tetapi tidak menyertakan atribut peringatan, itu berfungsi (meski tidak diam lagi).
// B. This works
{
aps: {
content-available: 1,
sound: "default"
}
}
Namun, jika saya mengubah atribut suara untuk memutar audio senyap, saya dapat meniru dorongan diam.
// C. This works too.
{
aps: {
content-available: 1,
sound: "silence.wav"
}
}
Apakah ada yang tahu:
- Jika ini bug?
- Dan apakah benar untuk mengasumsikan bahwa B atau C diperlakukan sebagai Notifikasi Jarak Jauh (dan bukan bug dengan Silent Push di mana Anda memerlukan atribut suara)? Jika demikian, ini berarti kecepatannya tidak terbatas seperti Silent Pushes ... yang kemungkinan besar akan diperbaiki Apple. Jadi saya mungkin tidak harus mengandalkannya.
- Berapa batas kecepatannya (N mendorong setiap X detik, dll)?
Terima kasih sebelumnya.
Edit dengan lebih banyak informasi
Untuk A, status aplikasi tidak menjadi masalah. Pemberitahuan tidak pernah diterima.
Sepertinya B dan C hanya berfungsi jika Anda menyertakan atribut dan nilai dalam tanda kutip, seperti di bawah ini.
{"aps":{"content-available": 1, "sound":"silent.wav"}}
Dan pemberitahuan tersebut tiba di application: didReceiveRemoteNotification: fetchCompletionHandler: apa pun statusnya .
sumber
Background fetch
kotak diProject Capabilities
>Background Modes
karena opsi pertama harus berfungsi. Silent push tidak memerlukan atribut suara dan selalu masukapplication:didReceiveRemoteNotification:fetchCompletionHandler:
meskipun aplikasi berjalan di latar belakang / latar depan atau tidak berjalan.Jawaban:
Ini juga berfungsi dan tidak mengeluarkan suara saat tiba:
{ aps = { "content-available" : 1, sound : "" }; }
EDIT
Orang yang mengalami masalah ini mungkin ingin melihat tautan ini . Saya telah berpartisipasi dalam utas di forum Pengembang Apple yang membahas semua status aplikasi dan ketika dorongan diam diterima dan tidak diterima.
sumber
Jadi saya baru saja menemukan masalah ini kemarin, dan setelah mencoba mengirim muatan dengan suara yang disetel ke string kosong, itu masih menyebabkan getaran / suara pada perangkat. Akhirnya, saya menemukan posting blog dari Urban Airship yang menyarankan untuk mengirim:
{ priority: 5 }
di notifikasi push, yang belum pernah saya lihat. Setelah membaca dokumen Apple untuk pemberitahuan push, saya menemukan halaman ini:
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
Yang menunjukkan bahwa prioritas harus ditetapkan sebagai "5" atau "10", dan menjelaskan:
Pada akhirnya, kami bisa mendapatkan notifikasi push senyap yang berfungsi dengan jumlah badge (dan saya curiga Anda bahkan dapat melakukan hal yang sama dengan peringatan) dengan format berikut:
aps = { badge = 7; "content-available" = 1; priority = 5; };
sumber
Saya telah mencoba mengatur string kosong sebagai atribut peringatan dan itu juga berfungsi:
{ aps = { "content-available" = 1; "alert" = ""; }; }
Sepertinya APNS sedang memeriksa keberadaan atribut ini untuk tujuan memvalidasi muatan push. Menariknya, mereka tidak memeriksa konten sebenarnya. Tampaknya sedikit hacky ...
sumber
alert=""
payload ini bekerja untuk saya jugaiOS 9.0
. Sebaliknyasound=""
tidak berhasil.Saya menggunakan alat- Knuff mengirim pemberitahuan push saya ke perangkat saya.
Sepertinya:
Kemudian, saya mencoba contoh ini.
Semuanya berfungsi! Tetapi Anda harus menetapkan prioritas 10!
Jadi jika Anda tidak menggunakan alat tersebut, Anda juga mencatatnya.
contoh:
sumber
Ini bekerja untuk saya:
{ aps: { content-available: 1 } }
Lihat jika Anda mencentang
Background fetch
kotak diProject Capabilities
>Background Modes
sumber
Saya melihat masalah yang sama. Jika saya mengirim push dengan "content-available": 1 dan tidak ada atribut lain yang disetel, notifikasi tidak akan pernah diterima. Saat saya menambahkan atribut lain, ini berfungsi dengan sempurna.
Sebagai pekerjaan sementara saya menambahkan atribut lencana karena ini tidak mengingatkan pengguna dengan cara apa pun selain menambahkan lencana ke ikon.
Beri tahu saya jika Anda telah menemukan solusi yang lebih baik.
sumber
Prioritas harus disetel sebagai satu item dalam aliran biner tetapi tidak dalam string json payload. Ternyata hanya format tipe 2 terbaru yang dapat digunakan dalam pengaturan prioritas sebagai berikut:
$token = chr(1) . pack('n', 32) . pack('H*', $deviceToken); $payload = chr(2) . pack('n', strlen($json)) . $json; $identifier = chr(3) . pack('n', 4) . pack('N', $notification); $expiration = chr(4) . pack('n', 4) . pack('N', time()+86400); $priority = chr(5) . pack('n', 1) . chr($priority); $frame_data = $token.$payload.$identifier.$expiration.$priority; $frame_length = strlen(bin2hex($frame_data))/2; $msg = chr(2) . pack('N', $frame_length) . $frame_data;
Jenis format (byte pertama) untuk pesan biner notifikasi jarak jauh:
0 - sederhana (lama) 1 - ditingkatkan (lama) 2 - terbaru dengan lebih banyak parameter (baru)
sumber
Argh! Juga menarik rambut saya - ini bukan jawaban yang lain sebagai contoh lain dari muatan yang TIDAK berhasil. Metode didReceiveRemoteNotification tidak pernah dipanggil, meskipun jika perangkat sedang tidur, teks peringatan IS ditampilkan.
{"aps": { "alert":"alert!", "sound":"default", "content-available" : 1}, "content-id":21482, "apt":"1" }
"apt" adalah bidang khusus yang kami gunakan untuk menunjukkan jenis pemberitahuan.
sumber
Menyetel 'suara' ke 0 berhasil untuk saya ... :)
sumber
menyetel prioritas ke 5 tidak berhasil untuk saya, tetapi menyetel suara atau peringatan ke string kosong memang menyebabkan notifikasi ditangani sebagai prioritas tinggi
sumber
Kami memiliki masalah yang sama dengan tidak ada Pemberitahuan yang dikirimkan. Dalam kasus kami, kami menggunakan dorongan diam-diam untuk memperbarui nomor lencana. Ketika kita mengatur string kosong untuk alert (body and title) dan sound, itu akan bekerja, tetapi jika salah satu tombol tidak ada maka gagal. Inilah yang berhasil, memperbarui lencana tanpa suara atau peringatan (log dari kamus userInfo yang dihasilkan di didReceiveRemoteNotification)
{ aps = { alert = { body = ""; title = ""; }; badge = 103; "content-available" = 1; sound = ""; }; }
sumber