• UniChat 社交IM 集成环信


    1.消息页

      1 //读取会话消息Vue代码
      2 function fnInitData(){
      3         vue = new Vue({
      4             el: '#vue',
      5             data: {
      6                 messages: [],
      7                 currentLocalConversationId: '',
      8                 loop: ''
      9             },
     10             beforeCreate: function() {
     11                 let that = this;
     12                 let userInfo = api.getPrefs({
     13                     key: 'userInfo',
     14                     sync: true
     15                 });
     16 
     17                 userInfo = JSON.parse(userInfo);
     18                 UIEaseChat = api.require('easeChat');
     19                 UIEaseChat.login({
     20                    username: userInfo.username,
     21                    password: window.cfg.easePassword,
     22                    autoLogin: false
     23                 },function(ret, err) {
     24                     if (ret.status || err.code == 200) {
     25                         //从本地缓存加载
     26                         fnInitDB();
     27                         fnGetConversation(userInfo.id, 0, 50, function(ret, err){
     28                           if (ret.status) {
     29                               let data = ret.data;
     30 
     31                               for(let index in data){
     32                                   if(index == 0){
     33                                       //设置当前本地缓存的最大朋友圈消息Id
     34                                       that.currentLocalConversationId = data[index].uid;
     35                                   }
     36                                   that.messages.push(JSON.parse(data[index].content));
     37                               }
     38                           }else{
     39                               console.log(JSON.stringify(err));
     40                           }
     41                         });
     42 
     43                         // 添加消息监听
     44                         UIEaseChat.addMessageListener({
     45                             name: 'receive'
     46                         }, function(ret) {
     47                             updateConversationList(ret['messages']);
     48                             //广播出去,聊天页面做数据更新
     49                             api.sendEvent({
     50                                 name: 'messageReceived',
     51                                 extra: {
     52                                     messages: ret['messages']
     53                                 }
     54                             });
     55                         });
     56 
     57                         that.syncConversation();
     58                     } else {
     59                         console.log(JSON.stringify(err));
     60                         api.alert({
     61                             msg: '网络不好,退出重试'
     62                         });
     63                     }
     64                 });
     65             },
     66             methods: {
     67                 syncConversation: function(){
     68                     let that = this;
     69                     let userInfo = api.getPrefs({
     70                         key: 'userInfo',
     71                         sync: true
     72                     });
     73 
     74                     userInfo = JSON.parse(userInfo);
     75                     UIEaseChat = api.require('easeChat');
     76 
     77                     UIEaseChat.getAllConversations(function(ret) {
     78                         let conversations = ret.conversations;
     79                         let length = conversations.length;
     80 
     81                         // 按照最新一条消息接收时间排序
     82                         for (let i = 0; i < length; i++) {
     83                             for (j = i + 1; j < length; j++) {
     84                                 if (parseInt(conversations[i]['latestMessage']['timestamp'], 10) < parseInt(conversations[j]['latestMessage']['timestamp'], 10)) {
     85                                     tmp = conversations[i];
     86                                     conversations[i] = conversations[j];
     87                                     conversations[j] = tmp;
     88                                 }
     89                             }
     90                         }
     91 
     92                         // 加载会话的头像、昵称、汇总总未读消息数量
     93                         showList(conversations);
     94                         that.messages = listData;
     95 
     96                         //保存到本地缓存
     97                         if(listData.length > 0){
     98                             fnInitDB();
     99                             fnAddConversation(userInfo.id, listData, function(ret, err){
    100                               if (ret.status) {
    101                                   //console.log('add Conversation success');
    102                                   let latestMessageConversation = conversations[0];
    103                                   that.currentLocalConversationId = latestMessageConversation.conversationId;
    104                                   //console.log(that.currentLocalConversationId);
    105                               }else{
    106                                   console.log(JSON.stringify(err));
    107                               }
    108                             });
    109                         }
    110 
    111                         // 缓存所有的聊天对象的头像
    112                         window.cacheConversationsAvatar(function () {
    113                             refreshAvartars();
    114                         });
    115                     });
    116                 }
    117             }
    118         });
    119     }
    读取会话消息源码

    2.通讯录

     1 function fnInitListData(callback) {
     2             let data = api.getPrefs({
     3                 key: 'friends',
     4                 sync: true
     5             });
     6             window.cacheConversationsAvatar(function(){});
     7             if (data == "") {
     8                 setTimeout(function () {
     9                     api.sendEvent({
    10                         name: 'tabviewappear1'
    11                     });
    12                 }, 400);
    13                 return;
    14             }
    15             data = JSON.parse(data);
    16             let chat = data['chat']; // 好友
    17             let groups = data['groupChat']; // 群组
    18             let rooms = data['chatRoom']; // 聊天室
    19             let ret = {};
    20             for (let i=0; i<chat.length; i++) {
    21                 let key = window.getPy(chat[i]['nickname']);
    22                 if (ret.hasOwnProperty(key)) {
    23                     ret[key].push({
    24                         placeholderImg: 'widget://image/error-img.png',
    25                         img: chat[i]['avatar'],
    26                         title: chat[i]['nickname'],
    27                         titleSize: 16,
    28                         username: chat[i]['username'],
    29                         id: chat[i]['id']
    30                     });
    31                 } else {
    32                     ret[key] = [
    33                         {
    34                             placeholderImg: 'widget://image/error-img.png',
    35                             img: chat[i]['avatar'],
    36                             title: chat[i]['nickname'],
    37                             titleSize: 16,
    38                             username: chat[i]['username'],
    39                             id: chat[i]['id']
    40                         }
    41                     ];
    42                 }
    43             }
    44             // 排序
    45             let newKey = Object.keys(ret).sort();
    46             let newObj = {
    47                  common: [
    48                      {
    49                          img: 'widget://image/icons/new-friends.png',
    50                          title: '新的朋友',
    51                          titleSize: 16
    52                      }, {
    53                          img: 'widget://image/icons/group.png',
    54                          title: '群聊',
    55                          titleSize: 16
    56                      }
    57                  ]
    58             };
    59             //为了把公共选项放在前面,不用重新复制数据吧
    60             for (let i=0; i<newKey.length; i++) {
    61                 newObj[newKey[i]] = ret[newKey[i]];
    62             }
    63 
    64             callback(newObj);
    65         }
    读取通讯录信息源码

    3.发现页

     1 function fnInitData(){
     2           let userInfo = window.getUserInfo();
     3 
     4           //从本地加载缓存
     5           fnInitDB();
     6           fnGetFriendsCircle(userInfo.id, 0, 1, function(ret, err) {
     7               if (ret.status) {
     8                   currentLocalMaxMessageId = ret.data[0].messageId;
     9 
    10                   //此处用同步接口,加载本地未缓存的朋友圈数据
    11                   window.Ajax({
    12                       url: 'moments/sync',
    13                       params: {
    14                           currentLocalMaxMessageId: currentLocalMaxMessageId
    15                       }
    16                   }, function(data) {
    17                       if (data.length > 0) {
    18                           //反向读取朋友圈数据,插入已存在的数组
    19                           let currentServerMaxMessageId = data[data.length-1].id;
    20 
    21                           //同步朋友圈时,新消息存入本地缓存
    22                           fnAddFriendsCircles(userInfo.id, data, function(ret, err) {
    23                               if (ret.status) {
    24                                   currentLocalMaxMessageId = currentServerMaxMessageId;
    25 
    26                                   api.sendEvent({
    27                                       name: 'syncFirendsCircle',
    28                                       extra: {
    29                                           datas: data
    30                                       }
    31                                   });
    32                               }else{
    33                                   console.log(JSON.stringify(err));
    34                               }
    35                           });
    36                       }
    37                   });
    38               }else{
    39                   console.log(JSON.stringify(err));
    40               }
    41           });
    42         }
    读取发现页信息源码

    4.我的页

      1 function fnInitData(){
      2             vue = new Vue({
      3                 el: '#vue',
      4                 data: {
      5                     nickname: '',
      6                     username: ''
      7                 },
      8                 beforeCreate: function() {},
      9                 updated: function() {},
     10                 mounted: function() {
     11                     let userInfo = window.getUserInfo();
     12                     let nickname = userInfo.nickname;
     13                     let username = userInfo.username;
     14                     this.username = username;
     15                     this.nickname = nickname;
     16                     let avatar = userInfo.avatar;
     17                     this.localPic(avatar, 'pictor');
     18                 },
     19                 methods: {
     20                     localPic: function(url, dom) {
     21                         api.imageCache({
     22                             url: url,
     23                             policy: 'cache_only',
     24                             thumbnail: false
     25                         }, function(ret, err) {
     26                             let localPath = ret.url;
     27                             $api.attr($api.byId(dom), 'src', localPath);
     28                         });
     29                     },
     30                     changeAvatar: function (type, dom) {
     31                         window.getPicture(function(url) {
     32                             window.Ajax({
     33                                 url: 'user/changeAvatar',
     34                                 method: 'post',
     35                                 params: {
     36                                     path: url,
     37                                     type: type
     38                                 }
     39                             }, function(res) {
     40                                 vue.localPic(url, dom);
     41                                 window.refreshLogin();
     42                             });
     43                         });
     44                     },
     45                     toQrcode: function (type) {
     46                         api.openWin({
     47                             name: 'qrcode-' + type,
     48                             url: '../win.html',
     49                             pageParam: {
     50                                 title: '个人二维码',
     51                                 url: './set/qrcode.html',
     52                                 params: {
     53                                     value: type,
     54                                     text: '扫一扫加好友'
     55                                 }
     56                             }
     57                         });
     58                     },
     59                     changeName: function () {
     60                         let that = this;
     61                         api.prompt({
     62                             title: '修改昵称',
     63                             type: 'text',
     64                             buttons: ['确定', '取消']
     65                         }, function(ret, err) {
     66                             var index = ret.buttonIndex;
     67                             var text = ret.text;
     68 
     69                             if (index == 1){
     70                                 if (!text) {
     71                                     api.alert({
     72                                         title: '提示',
     73                                         msg: '不能为空',
     74                                     }, function(ret, err){});
     75                                     return;
     76                                 };
     77                                 if (text.length > 20) {
     78                                     api.alert({
     79                                         title: '提示',
     80                                         msg: '最多20个字哟',
     81                                     }, function(ret, err){});
     82                                     return;
     83                                 }
     84                                 api.showProgress({
     85                                     style: 'default',
     86                                     animationType: 'fade',
     87                                     title: '修改中...',
     88                                     text: '请稍候...',
     89                                     modal: false
     90                                 });
     91 
     92                                 // 修改昵称
     93                                 window.Ajax({
     94                                     url: 'user/changeUserInfo',
     95                                     params: {
     96                                         key: 'nickname',
     97                                         value: text
     98                                     }
     99                                 }, function (data) {
    100                                     api.hideProgress();
    101                                     api.toast({
    102                                         msg: '修改成功',
    103                                         duration: 2000,
    104                                         location: 'bottom'
    105                                     });
    106                                     that.nickname = text;
    107                                     window.refreshLogin();
    108                                 });
    109                             }
    110                         });
    111                     }
    112                 }
    113             });
    114         }
    读取我的信息源码

    5.聊天页

      1 function fnInitData(){
      2             vue = new Vue({
      3                 el: '#vue',
      4                 data: {
      5                     messages: [],
      6                     isOwner: false,
      7                     owner: '',
      8                     firstLoad: true,
      9                     emotionData: [],
     10                     conversationId: api.pageParam.params.conversationId,
     11                     chatType: api.pageParam.params.chatType,
     12                     userInfo: window.getUserInfo(),
     13                     bonus: {
     14                         show: false,
     15                         name: '',
     16                         avatar: '',
     17                         msg: '',
     18                         message: '',  // 消息原始数据
     19                     },
     20                     currentLocalMaxMessageId: '',
     21                     page: 0,
     22                     pageSize: 10
     23                 },
     24                 beforeCreate: function() {
     25                     UIPhotoViewer = api.require('UIPhotoViewer');
     26                 },
     27                 updated: function() {
     28                     if (this.firstLoad) {
     29                         let that = this;
     30                         this.firstLoad = false;
     31                         setTimeout(function() {
     32                             that.scrollToBottom();
     33                         }, 100);
     34                     }
     35                 },
     36                 beforeDestroy: function () {
     37                     api.removeEventListener({
     38                         name: 'messageReceived'
     39                     });
     40                 },
     41                 mounted: function() {
     42                     //监听新消息事件
     43                     let that = this;
     44 
     45                     //获取最近的聊天记录
     46                     that.syncServiceMessageToLocal();
     47 
     48                     //收到消息后响应方法
     49                     api.addEventListener({
     50                         name: 'messageReceived'
     51                     }, function(ret, err) {
     52                         let msgs = ret.value.messages;
     53                         let flag = false;
     54                         for (let i = 0; i < msgs.length; i++) {
     55                             if (msgs[i].conversationId == api.pageParam.params.conversationId) {
     56                                 flag = true;
     57                                 msgs[i]['showHeader'] = true;
     58                                 if (that.messages.length &&
     59                                     msgs[i].timestamp - that.messages[that.messages.length - 1]. timestamp < 5 * 60 * 1000) {
     60                                         msgs[i]['showHeader'] = false;
     61                                     }
     62                                 that.messages.push(msgs[i]);
     63                                 setTimeout(function() {
     64                                     //滚动聊天区域到底部
     65                                     that.scrollToBottom();
     66                                 }, 100);
     67 
     68                                 // 如果不是语音且不是红包,则标记已读
     69                                 if (msgs[i].body.type != 'voice' && !that.isBonus(msgs[i])) {
     70                                     // 标记已读
     71                                     UIEaseChat.markMessageAsRead({
     72                                         conversationId: api.pageParam.params.conversationId,
     73                                         type: api.pageParam.params.chatType,
     74                                         messageId: msgs[i]['messageId']
     75                                     },function(ret,err) {});
     76                                 }
     77 
     78                             }
     79                         }
     80                         // 更新主页的数据
     81                         if (flag) {
     82                             api.sendEvent({
     83                                 name: 'messageReaded',
     84                                 extra: {
     85                                     conversationId: api.pageParam.params.conversationId
     86                                 }
     87                             });
     88                         }
     89                     });
     90 
     91                     //注释原因:不使用UIeaseChat输入框,不需要初始化底部的输入框
     92                     //that.initChatBox();
     93 
     94                     //注释原因:不使用UIeaseChat输入框,获取emotion的所有路径
     95                     //that.initEmotionData();
     96                 },
     97                 methods: {
     98                     loadMessageFromLocal: function() {
     99                       let that = this;
    100                       let userInfo = window.getUserInfo();
    101 
    102                       that.page = that.page + 1;
    103 
    104                       fnGetFriendsChat(userInfo.id,
    105                         api.pageParam.params.conversationId,
    106                         that.currentLocalMaxMessageId,
    107                         that.page,
    108                         that.pageSize,
    109                         function(ret, err){
    110                             if (ret.status) {
    111                               let data = ret.data;
    112                               // console.log(that.currentLocalMaxMessageId);
    113                               // console.log(JSON.stringify(data));
    114                               for(let index in data){
    115                                   //console.log('data array index:'+index);
    116                                   if(index == 0){
    117                                       //设置当前本地缓存的最大朋友圈消息Id
    118                                       that.currentLocalMaxMessageId = data[index].messageId;
    119                                   }
    120 
    121                                   vue.messages.splice(0, 0, JSON.parse(data[index].content));
    122                               }
    123 
    124                               mescroll.endSuccess();
    125                             }else{
    126                                 console.log(JSON.stringify(err));
    127                             }
    128                       });
    129                     },
    130                     syncServiceMessageToLocal: function() {
    131                         let that = this;
    132 
    133                         UIEaseChat = api.require('easeChat');
    134                         UIEaseChat.loadMessageFromDB({
    135                             conversationId: api.pageParam.params.conversationId,
    136                             type: api.pageParam.params.chatType,
    137                             pagesize: that.pageSize
    138                           }, function(ret) {
    139                             if(ret.messages.length > 0){
    140                               //存在未缓存的消息
    141                                 let messages = ret.messages;
    142                                 let lastIndex = 0;
    143                                 for (let i=0; i<messages.length; i++) {
    144                                     if (i == 0) {
    145                                         messages[i]['showHeader'] = true;
    146                                         that.currentLocalMaxMessageId =  messages[i]['messageId'];
    147                                     }
    148                                     let pre = i - 1 >= 0 ? i - 1 : 0;
    149                                     if (i == messages.lenght - 1 && messages[i].timestamp - messages[pre].timestamp > 5 * 60 * 1000) {
    150                                         messages[i]['showHeader'] = true;
    151                                     }
    152                                     if (messages[i].timestamp - messages[lastIndex].timestamp > 30 * 60 * 1000) {
    153                                         messages[i]['showHeader'] = true;
    154                                         lastIndex = i;
    155                                     }
    156 
    157                                     // 如果不是语音且不是红包,则标记已读
    158                                     if (messages[i].body.type != 'voice' && !that.isBonus(messages[i])) {
    159                                         if (!messages[i].isRead) {
    160                                             // 标记已读
    161                                             UIEaseChat.markMessageAsRead({
    162                                                 conversationId: api.pageParam.params.conversationId,
    163                                                 type: api.pageParam.params.chatType,
    164                                                 messageId: messages[i]['messageId']
    165                                             },function(ret,err) {});
    166                                         }
    167                                     }
    168 
    169                                 }
    170 
    171                                 that.messages = messages;
    172 
    173                                 // console.log(JSON.stringify(messages));
    174 
    175                                 //当前新消息时,同步消息到本地
    176                                 // if(messages.length > 0){
    177                                 //   let userInfo = window.getUserInfo();
    178                                 //   fnAddFriendsChat(userInfo.id,api.pageParam.params.conversationId,messages,
    179                                 //     function(ret, err){
    180                                 //         if(ret.status){
    181                                 //           console.log('add message success');
    182                                 //         }else{
    183                                 //           console.log(JSON.stringify(err));
    184                                 //         }
    185                                 //   });
    186                                 // }
    187                             }
    188                         });
    189                     }
    190             });
    191         }
    读取聊天信息源码

    6.朋友圈页

     1 function fnInitData(){
     2           vue = new Vue({
     3               el: '#vue',
     4               data: {
     5                   datas: [],
     6                   page: 0,
     7                   pageSize: 10,
     8                   currentLocalMaxMessageId: 0
     9               },
    10               beforeCreate: function() {},
    11               updated: function() {},
    12               mounted: function() {
    13                   let userInfo = window.getUserInfo();
    14                   let topBack = userInfo.pyqImg;
    15                   let avatar = userInfo.avatar;
    16                   this.localPic(avatar, 'avatar');
    17                   this.localPic(topBack, 'cover');
    18 
    19                   //从本地缓存加载一页数据
    20                   // if(this.currentLocalMaxMessageId == 0){
    21                   //   this.photoSync();
    22                   // }else{
    23                     this.photoShow();
    24                   // }
    25               },
    26               methods: {
    27                   localPic: function(url, dom) {
    28                       // 缓存图片
    29                       api.imageCache({
    30                           url: url,
    31                           policy: 'cache_only',
    32                           thumbnail: false
    33                       }, function(ret, err) {
    34                           let localPath = ret.url;
    35                           $api.attr($api.byId(dom), 'src', localPath);
    36                       });
    37                   },
    38                   photoSync: function() {
    39                       // 与服务器同步朋友圈 下拉操作
    40                       let that = this;
    41 
    42                       //此处用同步接口,加载本地未缓存的朋友圈数据
    43                       window.Ajax({
    44                           url: 'moments/sync',
    45                           params: {
    46                               currentLocalMaxMessageId: that.currentLocalMaxMessageId
    47                           }
    48                       }, function(data) {
    49                           let currentServerMaxMessageId = '';
    50 
    51                           if (data.length > 0) {
    52                               //反向读取朋友圈数据,插入已存在的数组
    53                               for (var i = data.length-1; i >= 0; i--){
    54                                   that.datas.splice(0, 0, data[i]);
    55 
    56                                   if(i == 0){
    57                                       currentServerMaxMessageId = data[i].id;
    58                                   }
    59                               }
    60 
    61                               //同步朋友圈时,新消息存入本地缓存
    62                               let userInfo = window.getUserInfo();
    63                               fnAddFriendsCircles(userInfo.id, data, function(ret, err) {
    64                                   if (ret.status) {
    65                                       // console.log('add success');
    66 
    67                                       that.currentLocalMaxMessageId = currentServerMaxMessageId;
    68                                   }else{
    69                                       console.log(JSON.stringify(err));
    70                                   }
    71                               });
    72 
    73                               //从本地加载缓存
    74                               // fnGetFriendsCircle(userInfo.id, 1, 2, function(ret, err) {
    75                               //     if (ret.status) {
    76                               //         console.log(JSON.stringify(ret));
    77                               //     }else{
    78                               //         console.log(JSON.stringify(err));
    79                               //     }
    80                               // });
    81                           }
    82 
    83                           mescroll.endSuccess();
    84                       });
    85                   }
    86               }
    87           });
    88         }
    读取朋友圈信息源码
  • 相关阅读:
    常用的Intent.Action(转)
    Android存储--SharedPreferences
    Linux虚拟机网络配置
    SSH的两种登录方式以及配置
    Docker学习のC/S模式
    Docker学习のDocker镜像
    Docker学习のDocker中部署静态页网站
    Docker学习のWindows下如何访问Docker本身的虚拟机
    Docker学习のDocker的简单应用
    Docker学习の更改Docker的目录
  • 原文地址:https://www.cnblogs.com/jerryqm/p/11428398.html
Copyright © 2020-2023  润新知