Tim.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <template>
  2. <div>
  3. <div @click="sendMessage('快点啊', '2015')">发送消息</div>
  4. </div>
  5. </template>
  6. <script>
  7. import { mapState } from 'vuex';
  8. import TIM from 'tim-js-sdk';
  9. import COS from 'cos-js-sdk-v5';
  10. export default {
  11. name: '',
  12. data() {
  13. return {
  14. SDKAppID: 1400401634,
  15. userID: 2015,
  16. userSig:
  17. 'eJwtzMsKwjAURdF-ybRSbp6SgpPiRIjgo0VwJja1l6gNMUpA-HdL2*FZB-aXVOaYf2wgBWE5kMW4sbHPiC1ODFTO-mrcxXtsSEEFgACquJgemzwGO7iUkgHApBEfo2klNWeMzRW8DVmknc7KoPbJmU11jedTysAtW9dtexN39Z0f1n1gb1fDivz*cZcwNQ__',
  18. tim: null,
  19. };
  20. },
  21. computed: {
  22. ...mapState(['userInfo']),
  23. },
  24. mounted() {
  25. window.chatLogin = this.chatLogin;
  26. },
  27. methods: {
  28. chatLogin(userID, userSig) {
  29. if (userID) {
  30. this.userID = userID;
  31. }
  32. if (userSig) {
  33. this.userSig = userSig;
  34. }
  35. this.init();
  36. },
  37. init() {
  38. // 创建 SDK 实例,TIM.create() 方法对于同一个 SDKAppID 只会返回同一份实例
  39. let options = {
  40. SDKAppID: this.SDKAppID, // 接入时需要将0替换为您的即时通信应用的 SDKAppID
  41. };
  42. this.tim = TIM.create(options); // SDK 实例通常用 tim 表示
  43. // 设置 SDK 日志输出级别,详细分级请参见 setLogLevel 接口的说明
  44. this.tim.setLogLevel(0); // 普通级别,日志量较多,接入时建议使用
  45. // tim.setLogLevel(1); // release级别,SDK 输出关键信息,生产环境时建议使用
  46. // 将腾讯云对象存储服务 SDK (以下简称 COS SDK)注册为插件,IM SDK 发送文件、图片等消息时,需要用到腾讯云的 COS 服务
  47. // HTML5 环境,注册 COS SDK
  48. this.tim.registerPlugin({ 'cos-js-sdk': COS });
  49. // 监听事件,如:
  50. // eslint-disable-next-line no-unused-vars
  51. this.tim.on(TIM.EVENT.SDK_READY, function(event) {
  52. // 收到离线消息和会话列表同步完毕通知,接入侧可以调用 sendMessage 等需要鉴权的接口
  53. // event.name - TIM.EVENT.SDK_READY
  54. });
  55. this.tim.on(TIM.EVENT.MESSAGE_RECEIVED, function(event) {
  56. console.log(event);
  57. // 收到推送的单聊、群聊、群提示、群系统通知的新消息,可通过遍历 event.data 获取消息列表数据并渲染到页面
  58. // event.name - TIM.EVENT.MESSAGE_RECEIVED
  59. // event.data - 存储 Message 对象的数组 - [Message]
  60. if (window.ReactNativeWebView) {
  61. window.ReactNativeWebView.postMessage(
  62. JSON.stringify(event.data),
  63. );
  64. }
  65. });
  66. // eslint-disable-next-line no-unused-vars
  67. this.tim.on(TIM.EVENT.MESSAGE_REVOKED, function(event) {
  68. // 收到消息被撤回的通知。使用前需要将SDK版本升级至v2.4.0或以上。
  69. // event.name - TIM.EVENT.MESSAGE_REVOKED
  70. // event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isRevoked 属性值为 true
  71. });
  72. // eslint-disable-next-line no-unused-vars
  73. this.tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER, function(event) {
  74. // SDK 收到对端已读消息的通知,即已读回执。使用前需要将SDK版本升级至v2.7.0或以上。仅支持单聊会话。
  75. // event.name - TIM.EVENT.MESSAGE_READ_BY_PEER
  76. // event.data - event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isPeerRead 属性值为 true
  77. });
  78. // eslint-disable-next-line no-unused-vars
  79. this.tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, function(event) {
  80. // 收到会话列表更新通知,可通过遍历 event.data 获取会话列表数据并渲染到页面
  81. // event.name - TIM.EVENT.CONVERSATION_LIST_UPDATED
  82. // event.data - 存储 Conversation 对象的数组 - [Conversation]
  83. });
  84. this.tim.on(TIM.EVENT.GROUP_LIST_UPDATED, function(event) {
  85. // 收到群组列表更新通知,可通过遍历 event.data 获取群组列表数据并渲染到页面
  86. // event.name - TIM.EVENT.GROUP_LIST_UPDATED
  87. // event.data - 存储 Group 对象的数组 - [Group]
  88. if (window.ReactNativeWebView) {
  89. window.ReactNativeWebView.postMessage(
  90. JSON.stringify(event.data),
  91. );
  92. }
  93. });
  94. // eslint-disable-next-line no-unused-vars
  95. this.tim.on(TIM.EVENT.PROFILE_UPDATED, function(event) {
  96. // 收到自己或好友的资料变更通知
  97. // event.name - TIM.EVENT.PROFILE_UPDATED
  98. // event.data - 存储 Profile 对象的数组 - [Profile]
  99. });
  100. // eslint-disable-next-line no-unused-vars
  101. this.tim.on(TIM.EVENT.BLACKLIST_UPDATED, function(event) {
  102. // 收到黑名单列表更新通知
  103. // event.name - TIM.EVENT.BLACKLIST_UPDATED
  104. // event.data - 存储 userID 的数组 - [userID]
  105. });
  106. // eslint-disable-next-line no-unused-vars
  107. this.tim.on(TIM.EVENT.ERROR, function(event) {
  108. // 收到 SDK 发生错误通知,可以获取错误码和错误信息
  109. // event.name - TIM.EVENT.ERROR
  110. // event.data.code - 错误码
  111. // event.data.message - 错误信息
  112. });
  113. // eslint-disable-next-line no-unused-vars
  114. this.tim.on(TIM.EVENT.SDK_NOT_READY, function(event) {
  115. // 收到 SDK 进入 not ready 状态通知,此时 SDK 无法正常工作
  116. // event.name - TIM.EVENT.SDK_NOT_READY
  117. });
  118. // eslint-disable-next-line no-unused-vars
  119. this.tim.on(TIM.EVENT.KICKED_OUT, function(event) {
  120. // 收到被踢下线通知
  121. // event.name - TIM.EVENT.KICKED_OUT
  122. // event.data.type - 被踢下线的原因,例如 :
  123. // - TIM.TYPES.KICKED_OUT_MULT_ACCOUNT 多实例登录被踢
  124. // - TIM.TYPES.KICKED_OUT_MULT_DEVICE 多终端登录被踢
  125. // - TIM.TYPES.KICKED_OUT_USERSIG_EXPIRED 签名过期被踢(v2.4.0起支持)。
  126. });
  127. // eslint-disable-next-line no-unused-vars
  128. this.tim.on(TIM.EVENT.NET_STATE_CHANGE, function(event) {
  129. // 网络状态发生改变(v2.5.0 起支持)。
  130. // event.name - TIM.EVENT.NET_STATE_CHANGE
  131. // event.data.state 当前网络状态,枚举值及说明如下:
  132. // - TIM.TYPES.NET_STATE_CONNECTED - 已接入网络
  133. // - TIM.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动,SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中”
  134. // - TIM.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试,若用户网络恢复,SDK 会自动同步消息
  135. });
  136. // 开始登录
  137. this.tim.login({
  138. userID: this.userID.toString(),
  139. userSig: this.userSig,
  140. });
  141. if (window.ReactNativeWebView) {
  142. window.ReactNativeWebView.postMessage(
  143. `用户${this.userID}登录成功`,
  144. );
  145. }
  146. },
  147. sendMessage(text, toUserId) {
  148. let message = this.tim.createTextMessage({
  149. conversationType: TIM.TYPES.CONV_C2C,
  150. payload: {
  151. text,
  152. },
  153. to: toUserId,
  154. });
  155. this.tim.sendMessage(message);
  156. },
  157. },
  158. };
  159. </script>
  160. <style lang="less" scoped></style>