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

推薦する

モバイル開発における 1px ラインの理解と解決策

1pxの線が太くなる理由モバイルプロジェクトに取り組むとき、設計図に従って要素ノードのサイズとスタイ...

MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...

nginx設定ファイルの解釈の詳細な説明

nginx 設定ファイルは主に 4 つの部分に分かれています。 main{#(グローバル設定) ht...

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...

Ubuntu 16.04.5LTS に SVN をインストールする手順

この記事では、UbuntuシステムでSVNを設定するプロセスを簡単に紹介します。ソースを更新sudo...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...

DockerにRedisコンテナをインストールするための実装手順

目次DockerにRedisをインストールする1. Redisイメージを見つける2. Redisイメ...

LinuxでHomebrewを使用する正しい方法

多くの人が Linux Homebrew を使用しています。これをより良く使用するための 3 つのヒ...

Youku 動画から 30 秒の広告コードを削除する 2 つの方法

誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...

CSS3の新しい背景プロパティの詳細な説明

これまで、CSS の背景の属性には、color、image、repeat、attachment、po...

MySQL Community Server 5.7.19 インストール ガイド (詳細)

MySQL公式サイトのzipファイルのダウンロードリンク https://dev.mysql.co...

CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明

1. 原因:サブボックスをフロートに設定した後の効果: 青いボックスをフロートに設定すると、標準のド...

MySQLでconcat関数を使用する方法

以下のように表示されます。 //managefee_managefee テーブルの年と月を照会し、c...

Linux サービス管理の 2 つの方法、service と systemctl の詳細な説明

1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...

MySQL 5.7 でパスワードを変更する簡単な方法

これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...