Dans la présentation «Quoi de neuf avec le multitâche» de la WWDC 2013, il y a une section sur les notifications push silencieuses. Cela semble simple. Selon la présentation, si vous envoyez la charge utile APS avec uniquement le contenu disponible défini sur 1, les utilisateurs ne seront pas informés de la notification.
// A. This doesn't work
{
aps: {
content-available: 1
}
}
Mes tests montrent que cela ne fonctionne pas car aucun push n'est reçu. Mais si j'inclus l'attribut sound mais exclut l'attribut alert, cela fonctionne (bien que plus silencieux).
// B. This works
{
aps: {
content-available: 1,
sound: "default"
}
}
Cependant, si je change l'attribut sonore pour lire un son silencieux, je peux imiter une poussée silencieuse.
// C. This works too.
{
aps: {
content-available: 1,
sound: "silence.wav"
}
}
Est-ce que quelqu'un sait:
- Si c'est un bug?
- Et s'il est correct de supposer que B ou C est traité comme une notification à distance (et non comme un bogue avec Silent Push où vous avez besoin d'un attribut sonore)? Si tel est le cas, cela signifie qu'il n'est pas limité comme le sont les Silent Pushes ... ce qu'Apple corrigera probablement. Je ne devrais donc probablement pas m'y fier.
- Quelle est la limite de débit (N pousse toutes les X secondes, etc.)?
Merci d'avance.
Modifier avec plus d'informations
Pour A, l'état de l'application n'a pas d'importance. La notification n'est jamais reçue.
Il semble que B et C ne fonctionnent que si vous mettez les attributs et les valeurs entre guillemets, comme ci-dessous.
{"aps":{"content-available": 1, "sound":"silent.wav"}}
Et la notification arrive dans l' application: didReceiveRemoteNotification: fetchCompletionHandler: quel que soit l'état.
la source
Background fetch
caseProject Capabilities
>Background Modes
car la première option devrait fonctionner. La transmission silencieuse n'a pas besoin d'un attribut sonore et arrive toujoursapplication:didReceiveRemoteNotification:fetchCompletionHandler:
même si l'application s'exécute en arrière-plan / au premier plan ou n'est pas en cours d'exécution.Réponses:
Cela fonctionne aussi et ne joue pas de son quand il arrive:
{ aps = { "content-available" : 1, sound : "" }; }
ÉDITER
Les personnes ayant ce problème peuvent vouloir consulter ce lien . J'ai participé à un fil de discussion sur le forum des développeurs d'Apple qui passe en revue tous les états de l'application et lorsque des push silencieux sont reçus et non reçus.
la source
Je viens donc de rencontrer ce problème hier, et après avoir essayé d'envoyer une charge utile avec un son réglé sur une chaîne vide, cela provoquait toujours des vibrations / sons sur l'appareil. Finalement, je suis tombé sur un article de blog d'Urban Airship qui suggérait de devoir envoyer:
{ priority: 5 }
dans la notification push, que je n'avais jamais vue. Après avoir parcouru la documentation d'Apple pour les notifications push, je suis tombé sur cette page:
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
Ce qui indique que la priorité doit être définie sur «5» ou «10» et explique:
En fin de compte, nous avons pu obtenir des notifications push silencieuses fonctionnant avec un nombre de badges (et je suppose que vous pourriez même faire de même avec une alerte) avec le format suivant:
aps = { badge = 7; "content-available" = 1; priority = 5; };
la source
J'ai essayé de définir une chaîne vide comme attribut d'alerte et cela a également fonctionné:
{ aps = { "content-available" = 1; "alert" = ""; }; }
Il semble qu'APNS vérifie l'existence de ces attributs dans le but de valider la charge utile push. Fait intéressant, ils ne vérifient pas le contenu réel. Cela semble un peu hacky cependant ...
la source
alert=""
la charge utile a également fonctionné pour moiiOS 9.0
. Lesound=""
n'a pas fonctionné à la place.J'utilise l' outil - Knuff envoie ma notification push à mon appareil.
On dirait:
Ensuite, j'ai essayé ces exemples.
Ils sont tous du travail, mais vous devez définir la priorité 10!
Donc, si vous n'utilisez pas l'outil, vous le notez également.
exemples:
la source
Cela fonctionne pour moi:
{ aps: { content-available: 1 } }
Regardez si vous cochez la
Background fetch
caseProject Capabilities
>Background Modes
la source
Je vois le même problème. Si j'envoie un push avec "content-available": 1 et aucun autre attribut défini, la notification n'est jamais reçue. Lorsque j'ajoute d'autres attributs, cela fonctionne parfaitement.
En tant que solution temporaire, j'ajoute l'attribut du badge car cela n'alerte en aucune façon l'utilisateur, à part l'ajout du badge à l'icône.
Faites-moi savoir si vous avez trouvé une meilleure solution.
la source
La priorité doit être définie comme un élément dans le flux binaire, mais pas dans la chaîne json de charge utile. Apparemment, seul le dernier format de type 2 peut être utilisé pour définir la priorité comme suit:
$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;
Types de format (premier octet) pour le message binaire de notification à distance:
0 - simple (ancien) 1 - amélioré (ancien) 2 - dernier avec plus de paramètres (nouveau)
la source
Argh! Tirant également mes cheveux - ce n'est pas tant une réponse qu'un autre exemple de charge utile qui NE FONCTIONNE PAS. La méthode didReceiveRemoteNotification n'est jamais appelée, bien que si le périphérique est en veille, le texte d'alerte EST affiché.
{"aps": { "alert":"alert!", "sound":"default", "content-available" : 1}, "content-id":21482, "apt":"1" }
"apt" est un champ personnalisé que nous utilisons pour indiquer le type de notification.
la source
Mettre le 'son' à 0 a fonctionné pour moi ... :)
la source
la définition de la priorité sur 5 ne fonctionnait pas pour moi, mais la définition du son ou de l'alerte sur une chaîne vide entraînait le traitement de la notification comme une notification de haute priorité
la source
Nous avons eu le même problème sans notification. Dans notre cas, nous utilisions une poussée silencieuse pour mettre à jour le numéro de badge. Lorsque nous définissons des chaînes vides pour l'alerte (corps et titre) et le son, cela fonctionnerait, mais si l'une des clés n'était pas présente, cela échouait. Voici ce qui a fonctionné, la mise à jour du badge sans son ni alerte (journal du dictionnaire userInfo résultant dans didReceiveRemoteNotification)
{ aps = { alert = { body = ""; title = ""; }; badge = 103; "content-available" = 1; sound = ""; }; }
la source