使用 QuickBlox JavaScript SDK 的问题

Posted

技术标签:

【中文标题】使用 QuickBlox JavaScript SDK 的问题【英文标题】:Questions using QuickBlox JavaScript SDK 【发布时间】:2015-12-06 23:58:25 【问题描述】:

我是 QuickBlox 的新手,有几个问题。我已经尝试通过 *** 和其他地方进行搜索,但似乎我的问题没有答案。 我很可能错过了 QuickBlox 文档中的某些内容(或者不知道有关 javascript 的某些内容)。

这与 JavaScript SDK 有关,因为我将使用它来实现聊天功能。这个想法是为使用 Laravel 构建的网络应用添加聊天功能。

我的第一个问题与初始化/授权有关。将 QuickBlox 身份验证密钥放在 JavaScript 文件中似乎非常不安全,因为可以通过浏览器的“查看源代码”选项轻松查看该文件。 您将如何隐藏这些敏感信息?

考虑到这一点,我已经考虑使用 php 来实现它。使用文档中的示例代码,我可以成功获取会话令牌。然后,我从 SDK 获得了聊天应用程序的副本,并一直在尝试将 PHP 代码集成到其中,以便使用我的 php 来获取令牌并将其传递给 QB.init,而不是使用 config.js。但这似乎行不通。 聊天应用程序就在那里。查看 Firebug 中的 JS 调试器,似乎抛出了一个异常:无法在没有应用凭据的情况下创建新会话。当我通过 PHP 得到它时,这让我感到困惑?为什么它会在 JavaScript 端失败?

谢谢。

【问题讨论】:

查看错误,据我所知,当您单击用户时会发生此异常(示例应用程序有用户 Quick 和用户 Blox,我已将用户详细信息更改为使用 2我在我的帐户中设置的用户)。因此,在单击第一个用户时,它会尝试登录该用户,我认为这就是异常的来源。 【参考方案1】:

太棒了!我已经将此作为问题提交给他们:

https://github.com/QuickBlox/quickblox-javascript-sdk/issues/72

执行以下操作来解决您的问题(这是一种解决方法):

QB.init(token, false, false, QBConfig);
QB.service.getSession().application_id = your_app_id;

而且.. 我有一个 PR 的想法,但现在确实可以解决。

编辑:

试试下面...

var QBConfig = 
    chatProtocol: 
        active: 2
    ,
    debug: !true,
    webrtc: 
        answerTimeInterval: 30,
        dialingTimeInterval: 5
    ,
    creds: 
        appId: YOUR_APP_ID
    
;

QB.init(token, false, false, QBConfig);
QB.service.getSession().application_id = your_app_id; // probably still need this too

现在试试这个(假设您使用的是示例中的原始 JS):

function createSession() 
  //QB.createSession(caller, function(err, res) 
    //if (res) 
      connectChat();
   // 
  //);

【讨论】:

我假设 QBConfig 只是一个带有其他选项等的数组?我已经把代码放进去,但还是得到了异常。 正确 -- 今天晚些时候我可以看看这个。他们的 JS SDK 不如他们的 android 流行,所以你会遇到更多的怪癖.. 并且..您使用的是最新版本? 1.17? 刚抓到 1.17。再次尝试,同样的异常。 哦,等等,我想我明白了!【参考方案2】:

您对 PHP 插件的看法是正确的。它可以帮助您保护您的 QB 凭据。

其他解决方案是构建自定义脚本来构建您的凭据, 类似于混淆逻辑的东西。然后缩小此脚本以隐藏所有逻辑细节。

无论如何,如果您决定使用 QB.init("token"),那么您根本不需要使用 QB.createSessionQB.init("token") 用于绕过 QB.createSession 调用。

【讨论】:

【参考方案3】:

Javascript SDK 1.17.1 发布

http://quickblox.com/developers/Javascript#Framework_changelog

现在您可以使用会话令牌和应用程序 ID 初始化 SDK:

QB.init('1b785b603a9ae88d9dfbd1fc0cca0335086927f1', 3451);

【讨论】:

【参考方案4】:

在遇到相同问题后,以下步骤对我有用:

    从我的 Javscript 文件中,我使用 ajax 调用从 PHP/Server-Side 类中获取 AppId 和 Token,使用的文档位于:https://docs.quickblox.com/reference/authentication#create-session,更具体地说是创建用户会话 从 Quickblox 收到结果后,我将结果输出回 Javascript,并在 javascript 中设置 AppId、Token 和 UserId 变量: var qb_app_id = 12333; var qb_token = "ABC123"; var qb_user_id = 1234567; 然后我打电话给QB.init(qb_app_id , qb_token , null, quickblox_config); 最后,我使用以下代码没有任何错误:
QB.chat.connect(userId: qb_user_id, password: qb_token, resource: 'practdashboard', function (err, roster) 
        if (err) 
            return;
        
    );

请看这里: https://quickblox.com/developers/Web_XMPP_Chat_Sample#Guide:_Getting_Started_with_Chat_API 并专门参考 自定义资源

【讨论】:

以上是关于使用 QuickBlox JavaScript SDK 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Quickblox:在Javascript中更改其他用户的密码

如何管理 quickblox 会话 Javascript SDK

通过 QuickBlox Javascript SDK 进行屏幕共享

无法使用 QuickBlox Javascript SDK 发送聊天消息

Quickblox 视频通话无法在网络上运行

无法在 Quickblox Javascript 中接听视频通话