quickblox for web - 创建1对1聊天

时间:2014-01-14 13:31:52

标签: quickblox

我正在尝试从网络客户端创建1对1聊天。

我下载了SDK和群聊示例。 除了网络外,所有平台似乎都有很好的例子。

(例如:http://quickblox.com/developers/Android_XMPP_Chat_Sample

任何人都可以提供代码/示例/指示吗?

我错过了什么,或者网络的文档真的缺乏?

谢谢

3 个答案:

答案 0 :(得分:4)

WebSDK足够新。我们正在处理其文档。 但是,在这里,我将向您展示一些代码片段,以便您可以创建一对一的聊天。

如您所知,QuickBlox使用XMPP服务器作为聊天服务。 WebSDK没有XMPP API的包装器,所以你应该包含额外的XMPP JS库。

对于我们的示例,我们建议使用Strophe.js(http://strophe.im/strophejs/

让我们开始吧:

1)包括你的xmpp js库和WebSDK

<script src="quickblox.js"></script>
<script src="strophe.js"></script>

2)描述您的QB证书

var QBAPP = {
  app_id: '<your QuickBlox id>',
  auth_key: '<your QuickBlox key>',
  auth_secret: '<your QuickBlox secret>'
};

// our parameters to connect to QuickBlox Chat service
var CHAT = {
  server: 'chat.quickblox.com',
  bosh_server: 'http://chat.quickblox.com:5280'
};

3)使用用户身份验证创建QB会话

var params, connection;
params = {
  login: '<your QB login>',
  password: '<your QB password>'
};

QB.init(QBAPP.app_id, QBAPP.auth_key, QBAPP.auth_secret);
QB.createSession(params, function(err, res) {
  if (err) {
    console.log(err.detail);
  } else {
    connectChat(res.user_id, params.password);
  }
});

4)使用您的用户JID和密码(http://quickblox.com/developers/Chat#Connecting_to_server

连接到QuickBlox聊天服务器
function connectChat(user_id, password) {
  var userJID = user_id + "-" + QBAPP.app_id + "@" + CHAT.server;
  var userPass = password;

  connection = new Strophe.Connection(CHAT.bosh_server);
  connection.rawInput = rawInput;
  connection.rawOutput = rawOutput;

  connection.connect(userJID, userPass, function (status) {
    switch (status) {
    case Strophe.Status.ERROR:
      console.log('[Connection] Error');
      break;
    case Strophe.Status.CONNECTING:
      console.log('[Connection] Connecting');
      break;
    case Strophe.Status.CONNFAIL:
      console.log('[Connection] Failed to connect');
      break;
    case Strophe.Status.AUTHENTICATING:
      console.log('[Connection] Authenticating');
      break;
    case Strophe.Status.AUTHFAIL:
      console.log('[Connection] Unauthorized');
      break;
    case Strophe.Status.CONNECTED:
      console.log('[Connection] Connected');

      // Create an event handler for getting messages
      connection.addHandler(onMessage, null, 'message', null, null, null);
      // send a presence message
      connection.send($pres().tree());

      break;
    case Strophe.Status.DISCONNECTING:
      console.log('[Connection] Disconnecting');
      break;
    case Strophe.Status.DISCONNECTED:
      console.log('[Connection] Disconnected');
      break;
    case Strophe.Status.ATTACHED:
      console.log('[Connection] Attached');
      break;
    }
  });
}

// logs
function rawInput(data) {console.log('RECV: ' + data);}
function rawOutput(data) {console.log('SENT: ' + data);}

5)接收消息的功能

function onMessage(msg) {
  console.log(msg);

  var to = msg.getAttribute('to');
  var from = msg.getAttribute('from');
  var type = msg.getAttribute('type');
  var elems = msg.getElementsByTagName('body');

  // we must return true to keep the handler alive.  
  // returning false would remove it after it finishes.
  return true;
}

6)发送消息的功能

function sendMessage() {
  params = {
    to: '<some JID>', // JID of recipient QB User
    from: connection.jid, // JID of sender QB user
    type: 'chat' // type of the message
  }
  var msg = $msg(params).c('body').t('Hello world!');
  connection.send(msg.tree());
}

我敢肯定,它可以帮助您使用Javascript与QuickBlox进行一对一聊天。 如果要使用群聊,可以从Web XMPP聊天示例的开发分支查看“聊天模块代码”: https://github.com/QuickBlox/sample-chat-xmpp-web/blob/develop/qbchatroom.js

今天我们完成了新样本的设计http://i.imgur.com/r8CSdNV.png,很快就会将其部署到生产中。

答案 1 :(得分:1)

我建议您可能会看到405错误,因为您在调用connectChat函数后立即调用了sendMessage函数。

连接聊天需要一段时间,因此在客户端(浏览器)尚未完成连接聊天服务器之前,您无法发送消息。您需要在函数connectChat中调用sendMessage函数,其状态为“已连接”。或者,您可以对onclick事件执行sendMessage函数到标记<button>或其他内容。对于您的示例,请像这样插入sendMessage:

case Strophe.Status.CONNECTED:
    console.log('[Connection] Connected');

    connection.addHandler(onMessage, null, 'message', null, null, null);
    connection.send($pres().tree());

    sendMessage();

    break;

答案 2 :(得分:0)

从今天开始,QuickBlox为WebSDK提供了一个自己的Web XMPP Chat插件。 您可以在这里查看使用此库的1:1 Chat的新示例: http://quickblox.com/developers/Web_XMPP_Chat_Sample