2、微信小程式之彈幕的實現(無後臺)

来源:http://www.cnblogs.com/boychen/archive/2017/01/20/6329512.html
-Advertisement-
Play Games

對彈幕功能主要利用環信來實現的,讀者也許對環信這個東西很陌生,請先自行瞭解這環信再來看這文章。 環信開發文檔:http://docs.easemob.com/im/400webimintegration/10webimintro 請大家看文檔看WebIM這個模塊,環信官網也提供了小程式的demo,建 ...


對彈幕功能主要利用環信來實現的,讀者也許對環信這個東西很陌生,請先自行瞭解這環信再來看這文章。

環信開發文檔:http://docs.easemob.com/im/400webimintegration/10webimintro

請大家看文檔看WebIM這個模塊,環信官網也提供了小程式的demo,建議讀者先自行下載個demo。,瞭解環信的基礎功能。

環信小程式demo下載地址:https://github.com/easemob/webim-weixin-xcx

 

彈幕功能主要是利用了聊天室來實現的。為什麼要選擇聊天室呢?因為聊天室里上線便會自動收到聊天室的信息,下線不會去接收聊天室裡面的信息,同時也會自動退出聊天室。環信聊天室最多可以支持5000人同時線上。

 

那首先要創建一個聊天,關於怎麼註冊環信的帳號、創建應用就不提了,筆者是個很low很low的大四狗,同時也很懶。

1、聊天室的創建:

<!doctype html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"/>
    <title>IM-DEMO</title>
    
    <!--引入jQuery腳本-->
    <script type='text/javascript' src='jquery-2.1.1.min.js'></script>
    
    <!--環信引入相關腳本-->
    <script type='text/javascript' src='webim.config.js'></script>
    <script type='text/javascript' src='strophe.js'></script>
    <script type='text/javascript' src='websdk-1.1.2.js'></script>
    <script type="text/javascript"  src='websdk.shim.js'></script>




</head>
<body>
    <input type="text" id="username" placeholder="帳號"/>
    <input type="text" id="password" placeholder="密碼"/>
    <input type="button" onclick="login()" value="登錄" >    <br>
    <input type="button" onclick="addGroup()" value="加群" >    <br>
    <input type="text" id="msg" placeholder="請發送消息" >    <br>
    <input type="button" id="send" value="發送" onclick="sendRoomText()">    <br>
    <input type="button" value="獲取聊天室信息" onclick="queryRooms()">    <br>
    <input type="button" value="創建聊天室" onclick="createRoom()">    <br>
    <input type="button" value="獲得token" onclick="getIMToken()">    <br>
    
</body>
<script>
        var conn = new WebIM.connection({
            https: WebIM.config.https,
            url: WebIM.config.xmppURL,
            isAutoLogin: WebIM.config.isAutoLogin,
            isMultiLoginSessions: WebIM.config.isMultiLoginSessions
        });

        conn.listen({
    onOpened: function ( message ) {          //連接成功回調
        // 如果isAutoLogin設置為false,那麼必須手動設置上線,否則無法收消息
        // 手動上線指的是調用conn.setPresence(); 如果conn初始化時已將isAutoLogin設置為true
        // 則無需調用conn.setPresence();             
    },  
    onClosed: function ( message ) {},         //連接關閉回調
    onTextMessage: function ( message ) {alert(message);},    //收到文本消息
    onEmojiMessage: function ( message ) {},   //收到表情消息
    onPictureMessage: function ( message ) {}, //收到圖片消息
    onCmdMessage: function ( message ) {},     //收到命令消息
    onAudioMessage: function ( message ) {},   //收到音頻消息
    onLocationMessage: function ( message ) {},//收到位置消息
    onFileMessage: function ( message ) {},    //收到文件消息
    onVideoMessage: function (message) {
        var node = document.getElementById('privateVideo');
        var option = {
            url: message.url,
            headers: {
              'Accept': 'audio/mp4'
            },
            onFileDownloadComplete: function (response) {
                var objectURL = WebIM.utils.parseDownloadResponse.call(conn, response);
                node.src = objectURL;
            },
            onFileDownloadError: function () {
                console.log('File down load error.')
            }
        };
        WebIM.utils.download.call(conn, option);
    },   //收到視頻消息
    onPresence: function ( message ) {},       //收到聯繫人訂閱請求、處理群組、聊天室被踢解散等消息
    onRoster: function ( message ) {},         //處理好友申請
    onInviteMessage: function ( message ) {alert(message);},  //處理群組邀請
    onOnline: function () {},                  //本機網路連接成功
    onOffline: function () {},                 //本機網路掉線
    onError: function ( message ) {},          //失敗回調
    onBlacklistUpdate: function (list) {       //黑名單變動
        // 查詢黑名單,將好友拉黑,將好友從黑名單移除都會回調這個函數,list則是黑名單現有的所有好友信息
        console.log(list);
    }
});


conn.listen({
  onPresence: function ( message ) {
    handlePresence(message);
  }
});
 
 
var handlePresence = function ( e ) {
    
    if(e.type == 'joinChatRoomSuccess'){
        alert("加入成功");
    }
    if(e.type == 'deleteGroupChat'){
        alert("聊天室被刪除");
    }
    if(e.type == 'joinChatRoomFailed'){
        alert("加入失敗");
    }
};
    
</script>

<script>
    
    //登錄
    function login(){
    
        var user = $("#username").val();
        var pwd = $("#password").val();
        
        var options = { 
            apiUrl: WebIM.config.apiURL,
            user: user,
            pwd: pwd,
            appKey: WebIM.config.appkey
        };
        conn.open(options);
        alert("登錄成功")
        queryRooms();
    }

    function addGroup(){
        var username =$('#username').val()
        var option = {
            list: [username],
            roomId: '1484378873553'
            };
        conn.addGroupMembers(option);
        alert('加入成功');
    }

    
var token = "";
    
    //獲取環信token
function getIMToken()
{
    //三個參數缺一不可
    var formdata = {
        "grant_type":"client_credentials",
        "client_id":"YXA6mdMuYMSEEeaJ0UPWrFAEEA",
          "client_secret":"YXA6JFc9RMgIf_ONr15XvknutQm8nQE"
      }
    
    
      $.ajax({
          type:"post",
          headers:{"Content-Type":"application/json"},
          url:"http://a1.easemob.com/1165161218178005/test/token",
          data:JSON.stringify(formdata),
          dataType:"json",
          success:function(data){
            token=data.access_token;
            alert(token);
          }
      });    
}
    
    
    //建立聊天室
    function createRoom(){
    
    var option = {
        "name":"testRoom", //聊天室名稱,此屬性為必須的
        "description":"server create chatroom", //聊天室描述,此屬性為必須的
        "maxusers":500, //聊天室成員最大數(包括群主),值為數值類型,預設值200,最大值5000,此屬性為可選的
        "owner":"c11", //聊天室的管理員,此屬性為必須的
        //"members":["jma2","jma3"] //聊天室成員,此屬性為可選的,但是如果加了此項,數組元素至少一個(註:群主jma1不需要寫入到members裡面)
        }
        
        getIMToken();

        alert(token);
        $.ajax({
            type:"post",
            headers:{"Authorization":"Bearer "+token},
            url:"http://a1.easemob.com/1165161218178005/test/chatrooms",
            dataType:"json",
            data:JSON.stringify(option),
            success:function(data){
                console.log(data);
            }
      })
    }


    
// 列出所有聊天室,支持分頁查詢
function queryRooms(){
    var option = {
        apiUrl: 'https://a1.easemob.com',
        pagenum: 1,                                 // 頁數
        pagesize: 20,                               // 每頁個數
        success: function (list) {
            console.log(list);
                                list=JSON.stringify(list);    //        解析json格式數據變成js
                    alert('聊天室列表:'+list);
        },
        error: function () {
            console.log('List chat room error');
            alert("錯誤");
        }
    };
    conn.getChatRooms(option);
}


function sendRoomText(){
var id = conn.getUniqueId();         // 生成本地消息id
    var msg = new WebIM.message('txt', id); // 創建文本消息
    var content = $("#msg").val();
    var option = {
        msg: content,          // 消息內容
        to: '277817528464441880',               // 接收消息對象(聊天室id)
        roomType: true,
        chatType: 'chatRoom',
        success: function () {
            console.log('send room text success');
        },
        fail: function () {
            console.log('send room text failed');
        }
    };
    msg.set(option);
    msg.setGroup('groupchat');
    conn.send(msg.body);
}
</script>
</html>

這是我以前學習時寫的demo,那時候獲取token花的時間比較多。所以在這裡希望大家不要走彎路。

 

2、接下來就是怎麼改代碼了,將官方提供的小程式demo,轉移到自己的項目上。我還是附上自己搬磚的成果吧。

鏈接:http://pan.baidu.com/s/1qYFBWsc 密碼:mnp8

 

遇到還沒解決的問題:

1、在小程式里環信加入聊天室失敗。

 

這是一個小白的隨筆,小白的學習之路。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目大意: 在n*n(n<=512)的網格上,從邊界某個點出發,經過每個點一次且回到邊界上,構造出一種方案使拐彎的數量至少為n*(n-1)-1次。 構造方法:我們可以手算出n=2~6時的方案。 n=2: n=3: n=4: n=5: n=6: 觀察n=2與n=4、n=3與n=5的情況我們可以得到一種 ...
  • <! TOC "algorithmn" "parameter" "code" "主要是以下三個函數" "計算所有的可行點" "怎麼計算一個點的可行點" "從可行點中計算路徑path" "todo" <! /TOC algorithmn "演算法的解釋" "Dijkstra" 其實就是A star或者D ...
  • 網路基礎 協議的概念 什麼是協議 從應用的角度出發,協議可理解為“規則”,是數據傳輸和數據的解釋的規則。 假設,A、B雙方欲傳輸文件。規定: 第一次,傳輸文件名,接收方接收到文件名,應答OK給傳輸方; 第二次,發送文件的尺寸,接收方接收到該數據再次應答一個OK; 第三次,傳輸文件內容。同樣,接收方接 ...
  • 說明 關於Redis:一個基於鍵值對存儲的NoSQL記憶體資料庫,可存儲複雜的數據結構,如List, Set, Hashes。 關於Spring Data Redis:簡稱SDR, 能讓Spring應用更加方便配置和訪問Redis。 本工程基於spring boot ,spring data redi ...
  • 最近在複習Servlet,發現其中有很多細節方面的東西都沒有接觸到,只是學了大概 1.請求轉發和請求重定向的區別 2.輸入參數為中文時候的亂碼問題 3.Web工程中的目錄寫法 下麵分別闡述 1.請求轉發和請求重定向的區別 請求轉發: 請求重定向: 請求轉發是伺服器行為,本質上是一次請求,所以參數可以 ...
  • 讀取HeidiSQL 配置文件中的密碼 2017 1 21 5:42:01 codegay HeidiSQL是一款開源的SQL管理工具,用管理MYSQL,MSSQL 等資料庫, 很多管理工具都會把密碼存在本地,HeidiSQL也是的,但是只是經過非常簡單的編碼,所以我經過簡單的分析後就知道瞭解密的方 ...
  • 一、Spring是什麼? 二、具體描述Spring 三、搭建Spring環境 3. Spring的配置文件:一個典型的Spring項目需要創建一個或多個Bean配置文件,這些配置文件用於在Spring IOC容器中配置Bean。Bean的配置文件可以放在classpath下,也可以放在其他目錄下。 ...
  • bean的作用域 使用bean的 scope 屬性來配置bean的作用域 scope="singleton" : 預設是單例模式 即容器初始化創建bean實例,在整個容器的生命周期內只創建這一個bean; scope="prototype" : 原型的 ,即容器初始化時不創建bean的實例,而在每次 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...