プッシュ表示をペイロードから分離することでした。私のGCMメッセージには、ペイロードへのURIのみが含まれています。メッセージ内のURIを通じてアクセス可能なデータベーステーブルにペイロードを格納します。
クライアントがメッセージを受信すると、それは、たとえば次のようになります。 HATEOASスタイルのリンクで、次のようになります。
{
_links: {
message: {
rel: 'message',
href: 'https://my-server.com/push/<messageId>'
}
}
}
クライアントは、サーバはそれが配信されていますことを知っているし、それに応じて更新することができ、その時点で、URIからのメッセージペイロードをGET
に進みます。ペイロードを取得すると、ペイロードも削除されます。
GCM再配信が十分に堅牢でない場合は、クライアントがすべての保留中のメッセージを手動で取得することもできます(例:ネットワーク接続がオフラインになった後に再開されたときに、指定されたANDROID_IDまたはそれに類するものに関するすべてのメッセージを返すエンドポイントを持つことによって、その後、GCMメッセージがである場合、クライアントはそのメッセージのURIに対して404を取得し、これをno-op、つまりすでに処理されたメッセージとして扱います。
これはやり過ぎである場合は、単にメッセージ配信のサーバ意識を達成するための軽量のアプローチは、このような
POST https://my-server.com/push/notifyReceived
{
messageId: <messageId>
}
出典
2017-03-30 12:34:39
JHH
どのうように、単に与えられたIDを持つメッセージの受信ACKのエンドポイントを持つことです私のサーバは、通知が最終的に送信されたとき(正常に)知っていますか? – user1537779
GCMサーバーからその情報を取得することは可能だとは思いません。つまり、メッセージを正常に受信したクライアントアプリケーションとサーバーとの間の別の通信方法に依存する必要があります。 あなたが知っているGCMサーバーからの応答は、次のいずれかを知らせるだけです。 成功:エラーなしで処理されたメッセージの数。 または 失敗:処理できなかったメッセージの数。 –
'利用できないエラーメッセージを見ても通知は送信されませんが、GCMが通知を正常に送信した場合に通知する方法を作ることはできません。 gcmサーバがいつか後でそれらを送信するかどうかわかりません。 – user1537779