この記事では主に、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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL の異なるテーブル間でフィールドをコピーする
>>: Dockerはrabbitmqのサンプルコードをインストールして実行します
パスワードモードPDO::__construct(): サーバーがクライアントに不明な認証方法を要求...
結果:実装コードhtml <link href='https://fonts.goog...
序文文字セットは、一連のシンボルとエンコード規則です。Oracle データベースでも MySQL デ...
この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...
mysql の IN はインデックスを無効にしますか?しませんよ! 結果をご覧ください: mysq...
1. 公式5.0.3イメージを取得する [root@localhost ~]# docker pul...
はじめに: 時間ポイントによる MySQL データベースの復旧どの企業にとっても、データは最も価値の...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
例:場所のルートとエイリアスルートディレクティブは、ルートによって設定されたディレクトリに検索ルート...
目次事前準備展開ターゲットDocker環境構築クラウドサーバーに接続Docker環境をインストールす...
このセクションから、http モジュールの実装原理について説明します。http モジュールで非常に重...
目次構成nfs サーバー (nfs.skills.com) nfs クライアント (client.s...
Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...
目次1: 単一マシンのパスワードフリーログイン構成1. 仮想マシンのホスト名を設定する2. 仮想マシ...
目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...