Vue は Tencent TIM インスタント メッセージングを統合します

Vue は Tencent TIM インスタント メッセージングを統合します

この記事では主に、Tencent TIM インスタント メッセージングを Vue と統合する方法を紹介し、皆さんと共有します。詳細は次のとおりです。

その上

序文

プロジェクトには顧客サービス機能、ユーザー側アプレット、顧客サービススタッフのウェブ端末が必要なので、テンセントの

準備

Tencent Cloud公式サイトでアプリケーションを作成し、対応するSDKAppIDと対応するキー情報を取得します。

SDKのインストール

(1)Webプロジェクト使用コマンド

// IM ウェブ SDK
npm をインストール tim-js-sdk --save
// 画像、ファイル、その他のメッセージを送信するには COS SDK が必要です
npm をインストール cos-js-sdk-v5 --save

(2)ミニプログラムプロジェクト使用コマンド

// IM アプレット SDK
npm をインストール tim-wx-sdk --save
// 画像、ファイル、その他のメッセージを送信するには COS SDK が必要です
npm をインストール cos-wx-sdk-v5 --save

main.js で導入

'tim-js-sdk' から TIM をインポートします。
// import TIM from 'tim-wx-sdk'; // WeChat アプレット環境の場合は、この行のコメントを解除し、import TIM from 'tim-js-sdk'; をコメントアウトしてください。
'cos-js-sdk-v5' から COS をインポートします。
// import COS from 'cos-wx-sdk-v5'; // WeChat アプレット環境の場合は、この行のコメントを解除し、import COS from 'cos-js-sdk-v5'; をコメントアウトしてください。

// SDK インスタンスを作成します。TIM.create() メソッドは、同じ SDKAppID に対してのみ同じインスタンスを返します。
  SDKAppID: 0 // アクセスするときは、0 をインスタント メッセージング アプリケーションの SDKAppID に置き換える必要があります。
};
let tim = TIM.create(options); // SDK インスタンスは通常 tim で表されます // SDK ログ出力レベルを設定します。詳細なレベルについては、setLogLevel インターフェースの説明を参照してください tim.setLogLevel(0); // 通常レベル、ログの量が多い、アクセスに推奨 // tim.setLogLevel(1); // リリースレベル、SDK は重要な情報を出力します、本番環境に推奨 // Tencent Cloud Object Storage Service SDK (以下、COS SDK) をプラグインとして登録します。IM SDK がファイルや画像などのメッセージを送信する場合、Tencent Cloud の COS サービスを使用する必要があります wx.$app = tim
wx.$app.registerPlugin({'cos-wx-sdk': COS})
wx.store = ストア
wx.TIM = TIM
 wx.dayjs = デイjs
 dayjs.locale('zh-cn')
$bus = new Vue() とします
Vue.prototype.TIM = TIM
Vue.prototype.$type = タイプ
Vue.prototype.$store = ストア
Vue.prototype.$bus = $bus
// オフライン メッセージとセッション リスト同期完了の通知をリッスンします tim.on(TIM.EVENT.SDK_READY, onReadyStateUpdate, this)
// SDK が準備完了状態ではないという通知を受け取ります。この時点で SDK は正常に動作できません tim.on(TIM.EVENT.SDK_NOT_READY, onReadyStateUpdate, this)
// キックアウト通知を受信しました tim.on(TIM.EVENT.KICKED_OUT, kickOut, this)
// 統合エラー処理 tim.on(TIM.EVENT.ERROR, onError, this)
// プッシュされたメッセージを受信し、event.data を走査してメッセージ リスト データを取得し、ページにレンダリングします tim.on(TIM.EVENT.MESSAGE_RECEIVED, messageReceived, this)
// 会話リストを更新します tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, convListUpdate, this)
// グループリストを更新します tim.on(TIM.EVENT.GROUP_LIST_UPDATED, groupListUpdate, this)
// ブラックリストを更新 tim.on(TIM.EVENT.BLACKLIST_UPDATED, blackListUpdate, this)
// ネットワークステータスの変更 tim.on(TIM.EVENT.NET_STATE_CHANGE, netStateChange, this)
関数 onReadyStateUpdate ({名前}) {
  const isSDKReady = (名前 === TIM.EVENT.SDK_READY)
  (SDKが準備完了の場合){
  //ユーザー情報 wx.$app.getMyProfile().then(res => {
      store.commit('updateMyInfo', res.data)
   uni.setStorageSync('name', res.data.nick);
   console.log(名前、'updateMyInfo');
    })
    //ブラックリスト、vuex に保存されます wx.$app.getBlacklist().then(res => {
      store.commit('setBlacklist', res.data)
    })
  }
  store.commit('setSdkReady', isSDKReady)
}
//オフライン関数をキックしました。オフラインになった後に再ログインを設定する必要があります。 function kickOut (event) {
  ストアをディスパッチします('resetStore')
  wx.showToast({
    タイトル: 「あなたはラインから追い出されました」
    アイコン: 'なし'、
    所要時間: 1500
  })
  タイムアウトを設定する(() => {
    wx.reLaunch({
      url: '../アカウント/ログイン'
    })
  }, 500)
}
関数 onError (イベント) {
  // ネットワーク エラー、トースト ポップアップなし && SDK が初期化されていない、完全なエラー if (event.data.message && event.data.code && event.data.code !== 2800 && event.data.code !== 2999) {
    store.commit('showToast', {
      タイトル: イベント.データ.メッセージ、
      期間: 2000
    })
  }
}
//
関数 checkoutNetState (状態) {
  スイッチ(状態){
    TIM.TYPES.NET_STATE_CONNECTEDの場合:
      return { title: 'ネットワークに接続しました', 期間: 2000 }
    TIM.TYPES.NET_STATE_CONNECTINGの場合:
      return { title: '現在のネットワークは不安定です', 期間: 2000 }
    TIM.TYPES.NET_STATE_DISCONNECTEDの場合:
      return { title: '現在のネットワークは利用できません', 期間: 2000 }
    デフォルト:
      戻る ''
  }
}
//ネットワーク状態変更関数 function netStateChange (event) {
  コンソールログ(イベントデータの状態)
  store.commit('showToast', checkoutNetState(event.data.state))
}
//メッセージ送受信関数 messageReceived (event) {
console.log(イベント、'main.js');
  (i = 0 とします; i < event.data.length; i++) {
    アイテム = イベント.データ[i]
    if (item.type === TYPES.MSG_GRP_TIP) {
      if (item.payload.operationType) {
        $bus.$emit('groupNameUpdate', アイテム.payload)
      }
    }
    if (item.type === TYPES.MSG_CUSTOM) {
      if (isJSON(item.payload.data)) {
        const videoCustom = JSON.parse(item.payload.data)
  console.log(item,'ホームページ情報')
        ビデオカスタムバージョン === 3 の場合
          スイッチ (videoCustom.action) {
            // 相手が私に電話をかけるケース 0:
              呼び出し中の場合
                url = `call?args=${item.payload.data}&&from=${item.from}&&to=${item.to}&&name=`+uni.getStorageSync('name')+'&&nick='+''; とします。
    コンソールログ(url,'url')
                wx.navigateTo({url})
              } それ以外 {
                $bus.$emit('isCalling', アイテム)
              }
              壊す
            // 相手側がケース1をキャンセルする:
              wx.navigateBack({
                デルタ: 1
              })
              壊す
            // 相手が拒否するケース2:
              $bus.$emit('onRefuse')
              壊す
            // 相手が1分間応答しない
            ケース3:
              wx.navigateBack({
                デルタ: 1
              })
              壊す
            // 相手が電話に出る ケース 4:
              $bus.$emit('onCall', ビデオカスタム)
              壊す
            // 相手が電話を切るケース 5:
              $bus.$emit('onClose')
              壊す
            // 相手は電話ケース6にいます:
              $bus.$emit('onBusy')
              壊す
            デフォルト:
              壊す
          }
        }
      }
    }
  }
  store.dispatch('onMessageEvent', イベント)
}
関数convListUpdate(イベント){
  store.commit('updateAllConversation', イベント.データ)
}

関数 groupListUpdate (イベント) {
  store.commit('updateGroupList', イベント.データ)
}

関数 blackListUpdate (イベント) {
  store.commit('ブラックリストの更新', イベント.データ)
}

Vue と Tencent TIM インスタント メッセージングの統合に関するこの記事はこれで終わりです。Vue Tencent TIM インスタント メッセージングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • アドレス帳機能を実現するVueカスタムコンポーネント
  • Vue.js 親子コンポーネント通信開発例
  • VueJsコンポーネントの親子通信方法
  • Vue2.0 コンポーネント値通信のサンプルコード
  • 8 つの Vue コンポーネント通信メソッドのコレクション (推奨)
  • Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する

<<:  MySQL の異なるテーブル間でフィールドをコピーする

>>:  Dockerはrabbitmqのサンプルコードをインストールして実行します

推薦する

MySQL 8.0 に移行する際の注意点 (要約)

パスワードモードPDO::__construct(): サーバーがクライアントに不明な認証方法を要求...

CSS3で実装されたダイナミックな星空の背景

結果:実装コードhtml <link href='https://fonts.goog...

MySQL 文字セットの文字化けとその解決方法

序文文字セットは、一連のシンボルとエンコード規則です。Oracle データベースでも MySQL デ...

VUEは登録とログインの効果を実現します

この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...

mysql はインデックスを無効にしますか?

mysql の IN はインデックスを無効にしますか?しませんよ! 結果をご覧ください: mysq...

dockerでredis5.0.3をインストールする方法

1. 公式5.0.3イメージを取得する [root@localhost ~]# docker pul...

時点別のMySQLデータベース復旧実績

はじめに: 時間ポイントによる MySQL データベースの復旧どの企業にとっても、データは最も価値の...

マークアップ言語 - CSS レイアウト

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

nginx のロケーションで URI の傍受を実装する方法

例:場所のルートとエイリアスルートディレクティブは、ルートによって設定されたディレクトリに検索ルート...

Docker、Nginx、Jenkins をベースにした自動フロントエンド デプロイメント

目次事前準備展開ターゲットDocker環境構築クラウドサーバーに接続Docker環境をインストールす...

nginx httpモジュールのデータ保存構造の概要

このセクションから、http モジュールの実装原理について説明します。http モジュールで非常に重...

Centos8 は kdc 暗号化に基づいて nfs を構築します

目次構成nfs サーバー (nfs.skills.com) nfs クライアント (client.s...

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

パスワードログインなしのLinux構成スタンドアロンおよびフルディストリビューションの詳細なチュートリアル

目次1: 単一マシンのパスワードフリーログイン構成1. 仮想マシンのホスト名を設定する2. 仮想マシ...

Dockerカスタムネットワーク実装

目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...