この記事では主に、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のサンプルコードをインストールして実行します
1pxの線が太くなる理由モバイルプロジェクトに取り組むとき、設計図に従って要素ノードのサイズとスタイ...
目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...
nginx 設定ファイルは主に 4 つの部分に分かれています。 main{#(グローバル設定) ht...
目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...
この記事では、UbuntuシステムでSVNを設定するプロセスを簡単に紹介します。ソースを更新sudo...
<br /> 英語原文: http://desktoppub.about.com/od/...
目次DockerにRedisをインストールする1. Redisイメージを見つける2. Redisイメ...
多くの人が Linux Homebrew を使用しています。これをより良く使用するための 3 つのヒ...
誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...
これまで、CSS の背景の属性には、color、image、repeat、attachment、po...
MySQL公式サイトのzipファイルのダウンロードリンク https://dev.mysql.co...
1. 原因:サブボックスをフロートに設定した後の効果: 青いボックスをフロートに設定すると、標準のド...
以下のように表示されます。 //managefee_managefee テーブルの年と月を照会し、c...
1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...
これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...