如何使用Sinch Javascript Instant Messaging SDK接收消息?

时间:2015-07-01 11:49:29

标签: javascript client sinch

在尝试使用Sinch Instant Messaging SDK构建Web应用程序时,我遇到了一个使用最新的Javascript Instant Messaging SDK here无法接收即时消息的问题。我一直在关注this教程,以帮助构建我的应用程序,我认为使用不同版本的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客户端时得到的错误是没有有效的身份或身份验证票&#34;。

0 个答案:

没有答案