1

在尝试使用 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 客户端时遇到的错误是“没有有效的身份或身份验证票证”。

4

0 回答 0