在尝试使用 Sinch Instant Messaging SDK 构建 Web 应用程序时,我遇到了无法使用此处找到的最新 Javascript Instant Messaging SDK 接收即时消息的问题。我也一直在关注本教程来帮助构建我的应用程序,我认为该应用程序使用了可以接收即时消息的不同版本的 SDK。但是,教程中的 SDK 版本不允许我使用生成的 userTickets 对我的应用程序进行身份验证,而最新的 SDK 版本可以。
所以,我想知道是否有一种方法可以使用在教程中找到的 SDK 生成的 userTickets,或者使用最新的 SDK 接收即时消息。
在最新的 SDK 上,我尝试在配置期间将 supportActiveConnection 设置为 true,以便使用教程中的代码接收消息,但没有成功。以下是教程中用于接收消息的一些相关代码片段:
sinchClient = new SinchClient({
applicationKey: 'APP_KEY',
capabilities: {
messaging: true
},
supportActiveConnection: true,
});
var loginObject = {
username: username,
password: password
};
sinchClient.start(loginObject, function() {
global_username = username;
showPickRecipient();
}).fail(handleError);
var messageClient = sinchClient.getMessageClient();
var eventListener = {
onIncomingMessage: function(message) {
if (message.senderId == global_username) {
$('div#chatArea').append('<div>' + message.textBody + '</div>');
} else {
$('div#chatArea').append('<div style="color:red;">' + message.textBody + '</div>');
}
}
}
messageClient.addEventListener(eventListener);
身份验证票由 python 后端通过以下函数和处理程序生成:
def getAuthTicket(username):
userTicket = {
'identity': {'type': 'username', 'endpoint': username},
'expiresIn': 3600,
'applicationKey': APPLICATION_KEY,
'created': datetime.utcnow().isoformat()
}
userTicketJson = json.dumps(userTicket).replace(" ", "")
userTicketBase64 = base64.b64encode(userTicketJson)
# TicketSignature = Base64 ( HMAC-SHA256 ( ApplicationSecret, UTF8 ( UserTicketJson ) ) )
digest = hmac.new(base64.b64decode(
APPLICATION_SECRET), msg=userTicketJson, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest)
# UserTicket = TicketData + ":" + TicketSignature
signedUserTicket = userTicketBase64 + ':' + signature
return {"userTicket": signedUserTicket}
class TicketHandler(BaseHandler):
def get(self):
self.response.write(getAuthTicket(self.username))
然后在客户端,我在票证处理程序上调用 get 请求。
$.get('/ticket', function(authTicket) {
sinchClient.start(eval("(" + authTicket + ")"))
.then(function() {
console.log("success");
})
.fail(function(error) {
console.log("fail");
});
});
当我尝试使用教程中找到的 sinch.min.js 文件启动 Sinch 客户端时遇到的错误是“没有有效的身份或身份验证票证”。