In der Präsentation "Was ist neu bei Multitasking?" Der WWDC 2013 gibt es einen Abschnitt über stille Push-Benachrichtigungen. Es scheint einfach zu sein. Laut Präsentation werden Benutzer nicht über die Benachrichtigung benachrichtigt, wenn Sie die APS-Nutzdaten nur mit dem verfügbaren Inhalt auf 1 senden.
// A. This doesn't work
{
aps: {
content-available: 1
}
}
Meine Tests haben gezeigt, dass dies nicht funktioniert, da kein Push empfangen wird. Aber wenn ich das Sound-Attribut einbinde, aber das Alert-Attribut ausschließe, funktioniert es (obwohl es nicht mehr still ist).
// B. This works
{
aps: {
content-available: 1,
sound: "default"
}
}
Wenn ich jedoch das Soundattribut ändere, um ein leises Audio abzuspielen, kann ich einen leisen Push nachahmen.
// C. This works too.
{
aps: {
content-available: 1,
sound: "silence.wav"
}
}
Weiß jemand:
- Ist das ein Fehler?
- Und wenn es richtig ist anzunehmen, dass B oder C als Remote-Benachrichtigung behandelt wird (und nicht als Fehler bei Silent Push, bei dem Sie ein Sound-Attribut benötigen)? Wenn ja, bedeutet dies, dass die Rate nicht wie bei Silent Pushes begrenzt ist ... was Apple wahrscheinlich beheben wird. Also sollte ich mich wahrscheinlich nicht darauf verlassen.
- Was ist das Ratenlimit (N drückt alle X Sekunden usw.)?
Danke im Voraus.
Mit weiteren Informationen bearbeiten
Für A spielt der Status der Anwendung keine Rolle. Eine Benachrichtigung wird nie empfangen.
Es scheint, als ob B und C nur funktionieren, wenn Sie die Attribute und Werte wie unten in Anführungszeichen setzen.
{"aps":{"content-available": 1, "sound":"silent.wav"}}
Und die Benachrichtigung kommt in der Anwendung an: didReceiveRemoteNotification: fetchCompletionHandler: unabhängig vom Status.
quelle
Background fetch
aktivieren, da die erste Option funktionieren sollte. Silent Push benötigt kein Soundattribut und kommt immer an, auch wenn die Anwendung im Hintergrund / Vordergrund ausgeführt wird oder nicht ausgeführt wird.Project Capabilities
Background Modes
application:didReceiveRemoteNotification:fetchCompletionHandler:
Antworten:
Dies funktioniert auch und spielt keinen Ton ab, wenn er eintrifft:
BEARBEITEN
Personen mit diesem Problem möchten möglicherweise diesen Link überprüfen . Ich habe an einem Thread im Entwicklerforum von Apple teilgenommen, der alle App-Status abdeckt und wenn stille Pushs empfangen und nicht empfangen werden.
quelle
Ich bin gestern auf dieses Problem gestoßen, und nachdem ich versucht hatte, eine Nutzlast mit einem Sound zu senden, der auf eine leere Zeichenfolge eingestellt war, verursachte es immer noch Vibrationen / Geräusche auf dem Gerät. Schließlich stolperte ich über einen Blog-Beitrag von Urban Airship, in dem vorgeschlagen wurde, Folgendes zu senden:
in der Push-Benachrichtigung, die ich noch nie gesehen hatte. Nachdem ich Apples Dokumente nach Push-Benachrichtigungen durchsucht hatte, stolperte ich über diese Seite:
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
Dies zeigt an, dass die Priorität auf "5" oder "10" gesetzt werden sollte, und erklärt:
Letztendlich konnten wir stille Push-Benachrichtigungen mit einer Ausweisanzahl (und ich vermute, Sie könnten dasselbe sogar mit einer Warnung tun) mit dem folgenden Format erhalten:
quelle
Ich habe versucht, eine leere Zeichenfolge als Alarmattribut festzulegen, und es hat auch funktioniert:
Es scheint, als würde APNS die Existenz dieser Attribute prüfen, um die Push-Nutzdaten zu validieren. Interessanterweise überprüfen sie nicht den tatsächlichen Inhalt. Es scheint ein bisschen hacky ...
quelle
alert=""
in der Nutzlast hat auch bei mir funktioniertiOS 9.0
. Dassound=""
hat stattdessen nicht funktioniert.Ich benutze das Tool - Knuff sende meine Push-Benachrichtigung an mein Gerät.
Es sieht aus wie:
Dann habe ich dieses Beispiel ausprobiert.
Sie sind alle Arbeit! Aber Sie müssen die Priorität 10 setzen!
Wenn Sie das Tool also nicht verwenden, notieren Sie es auch.
Beispiele:
quelle
Das funktioniert bei mir:
Überprüfen Sie, ob Sie das Kontrollkästchen
Background fetch
inProject Capabilities
> aktivierenBackground Modes
quelle
Ich sehe das gleiche Problem. Wenn ich einen Push mit "content-available": 1 sende und keine anderen Attribute festgelegt sind, wird die Benachrichtigung nie empfangen. Wenn ich andere Attribute hinzufüge, funktioniert es perfekt.
Als vorübergehende Umgehung füge ich das Ausweisattribut hinzu, da dies den Benutzer in keiner Weise alarmiert, außer das Ausweis zum Symbol hinzuzufügen.
Lassen Sie mich wissen, wenn Sie eine bessere Lösung gefunden haben.
quelle
Die Priorität sollte als ein Element im Binärstrom festgelegt werden, jedoch nicht in der Payload-JSON-Zeichenfolge. Anscheinend kann nur das neueste Typ 2-Format zum Festlegen der Priorität wie folgt verwendet werden:
Formattypen (erstes Byte) für die Remote-Benachrichtigungs-Binärnachricht:
0 - einfach (alt) 1 - erweitert (alt) 2 - aktuell mit mehr Parametern (neu)
quelle
Argh! Ich ziehe mir auch die Haare aus - dies ist weniger eine Antwort als vielmehr ein weiteres Beispiel für eine Nutzlast, die NICHT funktioniert. Die didReceiveRemoteNotification-Methode wird niemals aufgerufen. Wenn das Gerät in den Ruhezustand wechselt, wird der Warnungstext angezeigt.
"apt" ist ein benutzerdefiniertes Feld, in dem der Benachrichtigungstyp angegeben wird.
quelle
Das Setzen von 'Sound' auf 0 hat bei mir funktioniert ... :)
quelle
Das Setzen der Priorität auf 5 hat bei mir nicht funktioniert, aber das Setzen von Sound oder Alarm auf eine leere Zeichenfolge hat dazu geführt, dass die Benachrichtigung als Priorität mit hoher Priorität behandelt wurde
quelle
Wir hatten das gleiche Problem, ohne dass eine Benachrichtigung zugestellt wurde. In unserem Fall haben wir einen stillen Push verwendet, um die Ausweisnummer zu aktualisieren. Wenn wir leere Zeichenfolgen für Alarm (Text und Titel) und Ton festlegen, funktioniert dies, aber wenn eine der Tasten nicht vorhanden ist, ist dies fehlgeschlagen. Folgendes hat funktioniert: Aktualisieren des Abzeichens ohne Ton oder Warnung (Protokoll des resultierenden userInfo-Wörterbuchs in didReceiveRemoteNotification)
quelle