# 离线消息

本特性为高级功能,默认不开通,可以在我的应用->查看详情,高级功能里自助开通。

# 接收用户离线消息

当一个用户离线,再重新上线后,可以接收到该用户离线期间的所有消息。
离线:比如有2个带userId的用户订阅了同一个channel, 然后有1个下线了
在线:过了一会那个下线的用户又重新上线了,这个用户下线期间的通道里面发送的消息全部都会收到

# 如何启用用户离线消息补发

很简单,只需要在连接 IRealTime 时,传入一个该用户的唯一标识符(用户的 ID,uuid 或其它唯一标识),该用户就可以在线后,接收到离线期间的消息。

var realTime = new IRealTime({
  appkey: '您的appkey',
  host: 'hk.irealtime.cn', // hongkong region
  userId: '用户唯一标识,如 user01',
  onConnected: function() {
    console.log("连接成功...")
  },
  onDisconnected: function() {
    console.log("连接断开...")
  },
  onConnectFailed: function(error) {
    console.log("连接失败...", error)
  }
})

# 示例

准备两个 html 页面

  1. receive.html
<!DOCTYPE html>
  <html lang="zh-CN">
  <head>
      <meta charset="UTF-8">
      <title>receive</title>
      <script type="text/javascript" src="https://irealtime.cn/irealtime-1.0.1.js"></script>
      <script type="text/javascript">

        var realTime =  new IRealTime({
            appkey: '您的appkey',
            host: 'hk.irealtime.cn', // hongkong region
            userId: 'user01',
            onConnected: function() {
                console.log("连接成功...")
            },
            onDisconnected: function() {
                console.log("连接断开...")
            },
            onConnectFailed: function(error) {
                console.log("连接失败...", error)
            }
        });

        realTime.subscribe({
            channels: ["mychannel"],
            onMessage: function(data) {
                console.log(data)
            },
            onSuccess: function() {
                console.log("订阅成功...")
            },
            onFailed: function(error) {
                console.log("订阅失败...", error)
            }
        });
      </script>
  </head>
  <body>
      <div id="tip">请打开浏览器控制台,查看输出内容</div>
  </body>
  </html>
  1. publish.html
  <!DOCTYPE html>
   <html lang="zh-CN">
   <head>
       <meta charset="UTF-8">
       <title>publish</title>
       <script type="text/javascript" src="https://irealtime.cn/irealtime-1.0.1.js"></script>
       <script type="text/javascript">

           var realTime =  new IRealTime({
                appkey: '您的appkey',
                host: 'hk.irealtime.cn', // hongkong region
                userId: 'user02',
                onConnected: function() {
                    console.log("连接成功...")
                },
                onDisconnected: function() {
                    console.log("连接断开...")
                },
                onConnectFailed: function(error) {
                    console.log("连接失败...", error)
                }
            });

           function publish() {
               var message = document.getElementById("messageContent").value;
               realTime.publish({
                   channels: ["mychannel"],
                   message: message,
                   onSuccess: function () {
                       console.log("发送成功");
                   },
                   onFailed: function (error) {
                       console.log("发送失败: "+error);
                   }
               });
           }
       </script>
   </head>
   <body>
       <textarea id="messageContent" rows="5" cols="50"></textarea>
       <button type="button" onclick="publish();">发送</button>
   </body>
   </html>

操作步骤:
打开 receive.html
打开 publish.html,然后点击发送按钮,然后去看 receive.html 页面收到的消息
关闭 receive.html,使其处于离线状态,然后在 publish.html 页面继续发送几条消息
重新打开 receive.html 页面,用户在线,该用户就会收到之前离线期间的离线消息