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のサンプルコードをインストールして実行します

推薦する

Linux でソースインストールされたパッケージを簡単に削除する方法

ステップ1: Stowをインストールするこの例では CentOS を使用しているため、拡張 EPEL...

JavaScript es6 における var、let、const の違いの詳細な説明

まず、よくある質問は、ECMAScript と JavaScript の関係は何ですか? ECMAS...

Ubuntu 18.04 に phpMyAdmin をインストールするための詳細なチュートリアル

Ubuntu 18.04 上の Apache で動作するように phpMyAdmin をインストール...

mysql 計算関数の詳細

目次2. フィールドの連結2. MySQL関数の例をいくつか挙げてください。 2.1 シンボル処理2...

解析を実装するためにPostgreSQLデータベースを書き込むSQLスクリプト関数

この記事は主に、PostgreSQL データベースを記述して解析を実装する SQL スクリプト関数を...

Django+vue 登録とログインのサンプルコード

登録するフロントエンドは、vue の axios を使用して値を渡し、取得したアカウントとパスワード...

Linux オペレーティング システムで ssh/sftp を構成して権限を設定する方法

FTP と比較すると、SSH ベースの sftp サービスは、セキュリティが優れており (非プレーン...

Centos8 で yum を使用して mongodb 4.2 をインストールする方法

1. リポジトリファイルを作成するmongodb の公式インストール ドキュメントを参照し、次のスク...

フロントエンドJavaScriptの約束

目次1. Promiseとは何か2. 基本的な使い方3. Promiseメソッド3.1 Promis...

Chromeブラウザ設定の新バージョンではクロスドメイン実装が可能

序文現在、フロントエンドは主に webpack の devServer の構成を通じてクロスドメイン...

MySQL ステートメントコメントの紹介

MySQL は次の 3 種類のコメントをサポートしています。 1. 行末の「#」文字から。 2. 「...

Dockerでデータディレクトリを移行する方法

目次ディスク使用量の表示ディスク クリーンアップ (軽々しく使用しないでください)データの移行ディス...

JS での new の手書き実装

目次1 新しいオペレータの紹介2 新しいものは何をしましたか? 3 新しい演算子の実装をシミュレート...

ウェブページを作るときに知っておくべきいくつかのスキル

1. IE6 では z-index が無効です。 CSS では、階層を変更するために z-index...

Vueはユーザー名が使用可能かどうかの検証を実装します

この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...