2016-03-26 10 views
2

Ich versuche, Push-Benachrichtigungen in einem progressiven Web-Anwendungen zu implementieren und verwende die neue Payload-Unterstützung in Chrome.Schlüssel Eigenschaft existiert nicht auf meinem Objekt PushRegistration

Ich versuche, den Endpunkt und Schlüssel auf den Server zu senden, aber nicht sehen, die Tasten-Eigenschaft auf dem PushSubscription Objekt ...

Wie kann ich die Schlüssel, damit ich sie sende der Server?

Antwort

1

Die Schlüssel sind verfügbar, aber wie Sie bemerken, sind nicht direkt auf diese Weise verfügbar.

Sie haben die Möglichkeit, entweder:

  1. Anruf JSON.stringify(subscription) die einen String erstellen wird, die die serialisierten Schlüssel enthält (die Sie dann JSON.parse wenn Sie wirklich wollen), oder
  2. mit einem bestimmten Schlüssel holen subscription.getKey('p256dh'), die eine Arraybuffer zurückkehrt, und es dann zum Beispiel in einen String selbst, konvertieren btoa(String.fromCharCode.apply(null, new Uint8Array(subscription.getKey('p256dh'))))

Beachten sie, dass der erste Ansatz „URL Sichere Base 64“ erzeugt codiert k eys, während das zweite "Base 64 (non-URL Safe)" erstellt. Während die Web-Push-Node-Bibliothek Codierungen für Schlüssel akzeptiert, sollten Sie vorsichtig sein, welche Kodierung Sie für Ihre Bibliothek wählen.

+1

Sie könnten etwas tun wie: 'btoa (String.fromCharCode.apply (null, neue Uint8Array (subscription.getKey ('p256dh'))));', wie https://serviceworke.rs/push-payload_index_doc. html. – Marco

+0

Ich habe beide versucht und sie haben unterschiedliche Ergebnisse. In meinem Experiment führte der "btoa" -Ansatz zu "BIG/OUeTvBk0tfplr + eNOh ...", während "stringify" zu "BIG_OUeTvBk0tfplr-eNOh ..." führte. Diese sind offensichtlich verschieden und ich glaube, dass diese Unterscheidung mich Probleme mit der Web-Push-Bibliothek verursacht. Irgendwelche Gedanken über die Unterscheidung und eine mögliche Lösung? – owencm

+0

Der Unterschied ist Standard base64 vs URL-safe base64. Mit der 'web-push'-Bibliothek sollten Sie beides unscharf verwenden können. – Marco