ストアドトークンがアプリの再デプロイ時に機能しない理由を説明することはできませんが、バージョンを変更したときに機能しない理由を説明できます。簡単に言うと、トークンはアプリ版に固有のものです。
最初は、異なるデータを送信したり、メッセージフォーマットを変更したり、バージョンが異なるアプリケーションがバージョン境界を超えてメッセージを送信しないようにするためです。あなたのjavascriptバンドルをv2のサーブレットからv1レンダリングしたくないのと同じ方法で、v1のjavascriptメッセージハンドラがv2サーブレットからのメッセージを受け取ることは望ましくありません。うまくいけば、何が起こっているのか、それを明確にするので
、:
チャンネルはあなたのAPPIDの組み合わせ、アプリのバージョン、およびあなたがcreateChannelかのsendMessageを呼び出すときに提供したClientIDによって識別されます。 Channel APIの実装では、appid/clientid - > tokenのマッピングは保存されません。大幅に簡素化するために、あなたはこのような何かやってcreateChannelと考えることができます:
public String createChannel(clientid) {
// obviously we don't really just append strings to each other for actual implementation.
return encryptStringSomehow(clientid + globalAppInfo.version + globalAppInfo.appid);
}
をとのsendMessageは、このようなものです:
public void sendMessage(clientid, message) {
// identify the JID used for this channel.
JID xmppJid = new JID(mutateString(clientid + globalAppInfo.version + globalAppInfo.appid),
CHANNEL_XMPP_DOMAIN); // some domain used for channel messages
// send the <message> stanza to that jid with the application message as the body
xmppService.sendMessage(xmppJid, encodeSomehow(message));
}
と、クライアント側で、チャンネルを担当するサーブレットはトークンを復号化sendMessage
関数と同じ方法で作成されたJIDによって識別されるエンドポイントにバインドします。
トークンは、トークンが作成されたアプリケーションの同じバージョンから送信されたメッセージに対してのみ有効です。
複数のタブで同じチャンネルを使用することはできません。一度に1つのクライアントだけを各チャンネルに接続する必要があります。 –