4

Chrome で Web プッシュ通知を使用していますが、うまく機能しています。しかし今、通知でカスタム メッセージを配信したいと考えています。https://simple-push-demo.appspot.com/で行われているように、Service Worker に自分のサイトを呼び出してコンテンツを取得させることができます。これは、すべての受信者に同じメッセージを表示したい場合に適しています。

受信者registration_idまたはmessage_idGCMが返すものを取得する方法はありますか? これらのいずれかを取得してサービスへのコールバックに含めることができれば、応答をカスタマイズできます。

また、いつ GCM への呼び出しにペイロードを含めることができるかについての情報はありますか?

4

2 に答える 2

5

およびフィールドは公開されませんがregistration_idmessage_idユーザーが以前にアプリに対して認証されている場合、fetch()Service Worker からサーバーへのすべての情報には、それらを識別するために使用できる資格情報 (およびセッション情報) が含まれます。

それがうまくいかない場合は、ユーザー/セッション情報を IndexedDB に保存できます。

Web プッシュ プロトコルに基づくペイロード (おそらく Chrome 50 または 51) が間もなく登場します。(必要な) 暗号化を構成するには、少し余分なオーバーヘッドと作業が必要です。

于 2016-01-19T20:42:38.940 に答える
1

それは可能ですが、他のブラウザは他のサービスを使用していますが、GCM に固有のものであるため、私はそうしません。

ユーザーごとに一意の ID を作成して ( Mercuriusで行っているように)、それを IndexedDB に保存するか、エンドポイント URL 全体を ID として使用することができます。

を取得するためのスニペットは次のregistration_idとおりです。

self.registration.pushManager.getSubscription()
.then(function(subscription) {
  if (subscription) {
    var endpoint = subscription.endpoint;
    var endpointParts = endpoint.split('/');
    var gcmRegistrationID = endpointParts[endpointParts.length - 1];

    console.log(gcmRegistrationID);
  }
});

PS: Promise が返されるため、Promise が解決されるまで Service Worker が待機していることを確認してください。

于 2016-01-20T13:48:07.163 に答える