Pemberitahuan Dorong Diam di iOS 7 tidak berfungsi

87

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:

  1. Jika ini bug?
  2. 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.
  3. 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 .

mkwon
sumber
Apakah itu tidak berfungsi dalam status aplikasi apa pun? Bagi saya, " A " berfungsi selama aplikasi berjalan di latar depan (didReceiveRemoteNotification dipanggil). Tetapi ketika aplikasi tidak berjalan, aplikasi tidak mendapatkan pemberitahuan (Saya hanya mendengar suaranya, ketika saya mencoba " B "). Apakah aplikasi Anda dibangunkan (didReceiveRemoteNotification) di latar belakang saat Anda menggunakan " B " atau " C "?
DerBernie
Saya melihat perilaku serupa, saya pikir itu mungkin karena saya telah mencoba ini untuk sementara waktu dan saya tidak memiliki aplikasi yang diatur dengan benar pada awalnya sehingga Apple mungkin telah membatasi saya sebelum saya mengaturnya dengan benar.
nickthedude
4
Kawan ... Saya berharap saya bisa memberi Anda 10 suara
Michael Wiles
Lihat jika Anda mencentang Background fetchkotak di Project Capabilities> Background Modeskarena opsi pertama harus berfungsi. Silent push tidak memerlukan atribut suara dan selalu masuk application:didReceiveRemoteNotification:fetchCompletionHandler:meskipun aplikasi berjalan di latar belakang / latar depan atau tidak berjalan.
IgniteCoders

Jawaban:

73

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.

CMVR
sumber
Terima kasih untuk tautannya. Ada beberapa topik yang membahas hal ini di Forum ADC. Intinya: ada bug - setelah perangkat dimulai ulang - yang diakui oleh perwakilan Apple harus diperbaiki dalam pembaruan (akhirnya).
SG1
3
Di iOS7 ini berfungsi dengan baik bahkan tanpa tombol suara / peringatan. Konten yang tersedia adalah kunci yang cukup! Namun di iOS8 kami memiliki perilaku yang sangat aneh bahkan ketika kami menyetel kunci peringatan dengan string tidak kosong selain "konten-tersedia": 1 kami hanya mendapatkan spanduk dengan string "peringatan", tetapi "konten tersedia" mengabaikan karena beberapa alasan
malex
Saya telah berhasil meluncurkan aplikasi dari pemberitahuan dengan atau tanpa suara tambahan. Mungkin, menyetel suara, peringatan, atau lencana (kosong atau tidak) menaikkan prioritas pemberitahuan default menjadi 10, sehingga meningkatkan keandalannya. Lihat apa yang dikatakan Apple tentang pans-priority: developer.apple.com/library/ios/documentation/… Prioritas default adalah 10 (tinggi), tetapi ini adalah kesalahan untuk menggunakan ini untuk pemberitahuan push dengan hanya konten yang tersedia kunci. Jadi mungkin defaultnya disetel ke 5 jika hanya kunci konten yang tersedia yang disetel.
emem
1
tidak berfungsi di iOS10. Saya harus mendorong sesuatu untuk "terdengar".
Stony
Bekerja di iOS10 untuk saya. Tetapi tidak berfungsi sekarang di iOS11
Slav
30

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:

Prioritas pemberitahuan. Sediakan salah satu nilai berikut:

10 Pesan push segera dikirim.

Pemberitahuan push harus memicu peringatan, suara, atau lencana di perangkat. Merupakan kesalahan saat menggunakan prioritas ini untuk push yang hanya berisi kunci yang tersedia konten.

5 Pesan push dikirim pada waktu yang menghemat daya pada perangkat yang menerimanya.

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;
    };
Dave Lyon
sumber
Jawaban yang bagus Dave! Prioritas 5 diperbolehkan sementara "menggunakan prioritas ini [10] adalah kesalahan yang hanya berisi kunci yang tersedia konten." developer.apple.com/library/ios/documentation/…
rjobidon
4
Haruskah prioritas dimasukkan dalam payload? IMO itu terpisah satu byte dalam push yang Anda kirim.
Foriger
6
Prioritas tidak ditetapkan dalam payload. Ini diatur dalam notifikasi biner.
Sandy D.
10

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 ...

JaimeFBC
sumber
Solusi dengan alert=""payload ini bekerja untuk saya juga iOS 9.0. Sebaliknya sound=""tidak berhasil.
loretoparisi
5

Saya menggunakan alat- Knuff mengirim pemberitahuan push saya ke perangkat saya.

Sepertinya: masukkan deskripsi gambar di sini

Kemudian, saya mencoba contoh ini.

Semuanya berfungsi! Tetapi Anda harus menetapkan prioritas 10!

Jadi jika Anda tidak menggunakan alat tersebut, Anda juga mencatatnya.


contoh:

  • tidak ada peringatan, tidak ada suara

{
    "aps":{
        "content-available":1,
    }
}

  • hanya waspada

{
    "aps":{
        "content-available":1,
        "alert":""
    }
}

  • hanya suara

{
    "aps":{
        "content-available":1,
        "sound":""
    }
}

wenghengcong
sumber
4

Ini bekerja untuk saya:

{ 
  aps: { 
          content-available: 1 
       }
}

Lihat jika Anda mencentang Background fetchkotak di Project Capabilities>Background Modes

IgniteCoders
sumber
2

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.

Jon C
sumber
1

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)

dev03
sumber
0

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.

perangkat lunak berevolusi
sumber
2
Jika aplikasi berada di latar belakang, dan jika Anda menghapus atribut 'alert', Anda akan menerima callback di application: didReceiveRemoteNotification: fetchCompletionHandler:
mkwon
@mkwon dan jika saya ingin melihat peringatan (push reguler) saat dalam aplikasi panggilan BG +: didReceiveRemoteNotification: fetchCompletionHand‌ ler:? Tnx
DaNLtR
0

Menyetel 'suara' ke 0 berhasil untuk saya ... :)

Alex Zak
sumber
0

menyetel prioritas ke 5 tidak berhasil untuk saya, tetapi menyetel suara atau peringatan ke string kosong memang menyebabkan notifikasi ditangani sebagai prioritas tinggi

Radim
sumber
0

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 = "";
    };
}
Berikan Keberuntungan
sumber