ドキュメントでは、「client_id」の部分が実際にトークンになる可能性があると記載されていますが、機能しません。誰もが理由を知っていますか?
https://developers.google.com/appengine/docs/python/channel/functions
client_idパラメーターが実際にcreate_channel呼び出しによって返されるトークンである場合、send_messageはアプリのさまざまなバージョンで使用できます。たとえば、フロントエンドでチャネルを作成してから、アプリのバックエンドからメッセージを送信できます。
これを使用したい理由は、匿名ユーザーにもログインせずにメッセージを送信したいからです。トークンが機能しない場合に「client_id」を割り当てることが可能かどうかはわかりません。
これが私がトークンを作成する方法です
user = users.get_current_user()
if user:
token = channel.create_channel(user.user_id())
else:
token = channel.create_channel(str(uuid.uuid4()))
その後、クライアントに注入します
template_values = {
'token' : token,
}
クライアント側でチャネルを開きます
openChannel = function() {
var token = '{{ token }}';
var channel = new goog.appengine.Channel(token);
var handler = {
'onopen': onOpened,
'onmessage': onMessage,
'onerror': function() {},
'onclose': function() {}
};
var socket = channel.open(handler);
socket.onopen = onOpened;
socket.onmessage = onMessage;
}
今メッセージを送信します
var xhr = new XMLHttpRequest();
xhr.open('POST', path, true);
xhr.send();
サーバーでは、メッセージが受信されたら、トークンを使用してメッセージを送り返します
channel.send_message(token, someMessage)
クライアントに戻る
onMessage = function(m) {
alert("you have some message");
}
send_messageを呼び出すときに、トークンの代わりにclient_id()が使用される場合、このシーケンスは正常に機能します