Maison > Applet WeChat > Développement de mini-programmes > Comment utiliser le mini programme pour intégrer Huanxin IM ? (Exemple de code ci-joint)

Comment utiliser le mini programme pour intégrer Huanxin IM ? (Exemple de code ci-joint)

藏色散人
Libérer: 2022-01-22 09:10:29
avant
3712 Les gens l'ont consulté

Récemment, je réalise un petit programme avec fonction de diffusion vocale en direct, et j'utilise la fonction d'intégration Huanxin IM

Il y a en effet très peu de personnes qui utilisent Huanxin pour créer de petits programmes. Il y en a peu, et Huanxin a officiellement déclaré qu'il ne mettrait plus à jour le code à partir de février (je n'ai pas demandé la raison précise, peut-être que WeChat lui-même est un outil de chat, donc il n'est pas très utile)

Notre produit doit utilisez la fonction de salon de discussion, et nous faisions H5. Une fois la connexion du client terminée, vous pouvez rejoindre le salon de discussion :

 WebIM.conn.open(options);
 WebIM.conn.joinChatRoom(option1);
Copier après la connexion

La même méthode ne fonctionne pas sur le mini programme, et il continue de signaler une erreur :

Cannot read property 'sendIQ' of undefined
Copier après la connexion

Baidu a recherché et a déclaré que rejoindre le salon de discussion devait être placé dans le rappel après une connexion réussie, j'ai donc vérifié son code source connection.js trouvé :

connection.prototype.open = function (options) {


    var pass = _validCheck(options, this);

    if (!pass) {
        return;
    }
    var conn = this;

    if (conn.isOpening() || conn.isOpened()) {
        return;
    }

    if (options.accessToken) {
        options.access_token = options.accessToken;
        _login(options, conn);
    } else {
       //登录成功的回调函数
        var suc = function (data, xhr, myName) {
            conn.context.status = _code.STATUS_DOLOGIN_IM;
            conn.context.restTokenData = data;
            if (data.statusCode != '404' && data.statusCode != '400') {
                wx.showToast({
                    title: '登录成功',
                    icon: 'none',
                    duration: 4000
                });
            }
            //回调成功后执行这个方法
            _login(data.data, conn);
           
        };
        
        var options = {
            url: apiUrl + '/' + orgName + '/' + appName + '/token',
            data: loginfo,
             success: suc || _utils.emptyfn,
            error: error || _utils.emptyfn
        };
        _utils.ajax(options);
    }
Copier après la connexion

Il existe un rappel interne pour une connexion réussie, et un _login(data.data, conn) est appelée dans le rappel :

//具体里面执行什么去源代码查看,我就不贴代码了
var _login = function (options, conn) {
    
    var callback = function (status, msg) {
      _loginCallback(status, msg, conn);
    };


};
Copier après la connexion
Après l'exécution de la méthode de connexion, il y a un rappel _loginCallback :

var _loginCallback = function (status, msg, conn) {
    var conflict, error;
    //console.log('_loginCallback 1', Strophe.Status, status, msg)
    if (msg === 'conflict') {
        conflict = true;
    }
    console.log(status)
    if (status == Strophe.Status.CONNFAIL) {
     
    } else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED) {
      //登录成功
       
    } else if (status == Strophe.Status.DISCONNECTING) {
  
    } else if (status == Strophe.Status.DISCONNECTED) {
      
    } else if (status == Strophe.Status.AUTHFAIL) {
     
    } else if (status == Strophe.Status.ERROR) {

    }
    conn.context.status_now = status;
};
Copier après la connexion

En l'interrompant, j'ai découvert que lorsque l'exécution atteint

else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED)

, la connexion est réussie. Par conséquent, le rappel pour rejoindre le salon de discussion doit être placé dans ce jugement. I La méthode spécifique est la suivante :

//项目中封装一个加入聊天室函数
 joinRoom: function () {
    var option1 = {};
    var option2 = {};
    //加入聊天室
    WebIM.conn.joinChatRoom(option1);
    WebIM.conn.joinChatRoom(option2);
  };
   //在环信登录函数中添加一个自己的回调:
    var options = {
      apiUrl: WebIM.config.apiURL,
      user: userId + '',
      pwd: userId + '',
      grant_type: "password",
      appKey: WebIM.config.appkey,
      //自己添加的回调函数
      callBack:function(){
      //调用加入聊天室
        that.joinRoom();
      }
    };
    WebIM.conn.open(options);
Copier après la connexion

Modifiez la connexion Huanxin.js. code : Comment utiliser le mini programme pour intégrer Huanxin IM ? (Exemple de code ci-joint)

//登录代码
connection.prototype.open = function (options) {

        var suc = function (data, xhr, myName) {
            //callBack传入加入聊天室回调
            _login(data.data, conn, options.callBack);
        };
        var options = {
            url: apiUrl + '/' + orgName + '/' + appName + '/token',
            data: loginfo,
             success: suc || _utils.emptyfn,
             //添加加入聊天室的回调函数
             callBack: options.callBack,
            error: error || _utils.emptyfn
        };
    }
};
//_login代码
var _login = function (options, conn, callBack) {
     
    var callback = function (status, msg) {
    //把加入聊天室函数传给_login回调函数
      _loginCallback(status, msg, conn, callBack);
    };
};
//_loginCallback代码
var _loginCallback = function (status, msg, conn,callBack) {
    var conflict, error;
    //console.log('_loginCallback 1', Strophe.Status, status, msg)
    if (msg === 'conflict') {
        conflict = true;
    }
    console.log(status)
    if (status == Strophe.Status.CONNFAIL) {
     
    } else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED) {
      //登录成功执行加入聊天室
       callBack();
    } else if (status == Strophe.Status.DISCONNECTING) {
  
    } else if (status == Strophe.Status.DISCONNECTED) {
      
    } else if (status == Strophe.Status.AUTHFAIL) {
     
    } else if (status == Strophe.Status.ERROR) {

    }
    conn.context.status_now = status;
};
Copier après la connexion
L'idée spécifique est la suivante. Étant donné que le code de l'applet Huanxin comporte de nombreux pièges, si vous rencontrez des problèmes, regardez davantage le code source. Certaines fonctions doivent être modifiées par vous-même. Il s'agit du bon de travail Huanxin. répondez à ma question :

🎜Recommandations d'apprentissage associées : 🎜Tutoriel de développement de mini-programmes🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal