過去のメッセージ
機能説明
メッセージ履歴をプルするAPIは、クラス
TencentImSDKPlugin.v2TIMManager.getMessageManager()
にあります。シングルチャットおよびグループチャットのメッセージ履歴をサポートすることに加えて、指定された方向へのプル、指定された開始点でのプル、および指定された時間範囲のプルをサポートする高度なインターフェースも提供します。
ローカルメッセージ履歴の個別のプルをサポートすることに加えて、クラウドからのメッセージ履歴のプルもサポートします。
説明:
クラウドからのメッセージ履歴をプルするとき、ネットワーク異常が検出された場合、SDKはローカルに保存されたメッセージ履歴が返されます。
ローカルに保存されたメッセージ履歴には時間制限がありませんが、クラウドに保存されたメッセージ履歴には保存期間の制限があります:
体験版:7日間の無料保存、延長不可
Professional Edition:7日間の無料保存、延長可能
Ultimate Edition:30検の無料保存、延長可能
説明:
メッセージ履歴の保存期間の延長は、付加価値サービスです。IMコンソールにログインして、関連設定を修正できます。課金に関する詳細な説明については、付加価値サービス料金をご参照ください。
リッチメディアメッセージ(画像、ファイル、音声など)に対応するファイルの保存期間は、メッセージ履歴の保存期間と一致しています。
シングルチャットのメッセージ履歴のプル
getC2CHistoryMessageList
(クリックして詳細を表示)インターフェースを呼び出して、シングルチャットのメッセージ履歴を取得できます。
ネットワークが正常の場合は、最新のクラウドデータをプルします。ネットワークが異常の場合は、SDKはローカルに保存されたメッセージ履歴が返されます。
ローカルのメッセージ履歴をプルしたい場合は、高度なインターフェースをご参照ください。サンプルコードは次のとおりです:
// シングルチャットメッセージ履歴の取得// 初回の取得では、lastMsgIDをnullに設定します// 再度取得する際、lastMsgIDは返されたメッセージリストの最後の1通のidを使用することができますTencentImSDKPlugin.v2TIMManager.getMessageManager().getC2CHistoryMessageList(userID: "userId",count: 10,lastMsgID: null,);
グループチャットのメッセージ履歴のプル
getGroupHistoryMessageList
(クリックして詳細を表示)インターフェースを呼び出して、グループチャットのメッセージ履歴を取得できます。
ネットワークが正常の場合は、最新のクラウドデータをプルします。ネットワークが異常の場合は、SDKはローカルに保存されたメッセージ履歴が返されます。
ローカルのメッセージ履歴をプルしたい場合は、高度なインターフェースをご参照ください。ご注意:
ミーティンググループ(Meeting)のみがグループに入る前のメッセージ履歴をプルできます。グループメッセージに対する制限の詳細については、メッセージ機能の違いをご参照ください。
ライブブロードキャストグループ(AVChatRoom)メッセージは、クラウドローミングとローカルデータベースを保存しません。このインターフェイスの呼び出しは無効です。
サンプルコードは次のとおりです:
// シングルチャットメッセージ履歴を取得します// 初回の取得では、lastMsgIDをnullに設定します// 再プルする場合は、lastMsgIDは、返されたメッセージリストの最後のメッセージidを使用できますTencentImSDKPlugin.v2TIMManager.getMessageManager().getGroupHistoryMessageList(groupID: "groupID",count: 10,lastMsgID: null,);
高度な機能
高度なインターフェース
上記の通常のインターフェースがメッセージ履歴をプルするニーズを満たすことができない場合は、高度なインターフェース
getHistoryMessageList
(クリックして詳細を表示)をさらに提供しています。このインターフェースは、通常のシングルチャットおよびグループチャットのメッセージ履歴をサポートすることに加えて、次の高度な特性もサポートしています。
メッセージをプルする場所の設定へのサポート:ローカルからのプル、クラウドからのプル。
指定された方向へのプルへのサポート:古いメッセージ時間の方向へのプル、新しいメッセージ時間の方向へのプル。
ローカルで指定されたメッセージタイプのプルへのサポート:テキスト、画像、音声、ビデオ、ファイル、顔文字、グループtipsメッセージ、マージメッセージ、カスタムメッセージなど。
インターフェースのプロトタイプ:
// シングルチャットメッセージ履歴の取得// 初回の取得では、lastMsgIDをnullに設定します// 再度取得する際、lastMsgIDは返されたメッセージリストの最後の1通のidを使用することができますV2TimValueCallback<List<V2TimMessage>> getHistoryMessageListRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, // メッセージをプルする方向および位置userID: "userID", // ユーザーIDがシングルチャットメッセージをプルするには、相手のuserIDを指定する必要があります。このとき、空のgroupIDを渡すだけで済みます。groupID: "groupID", // グループidがグループチャットメッセージをプルするには、グループチャットのgroupIDを指定する必要があります。このとき、空のgroupIDを渡すだけで済みます。count: 10, // プルされたデータの数lastMsgID: null, // 開始メッセージidをプルします// このフィールドは、グループチャットでのみ使用できます。// プルの開始点としてlastMsgSeqを設定すると、返されたメッセージリストにこのメッセージが含まれます。// lastMsgおよびlastMsgSeqが同時に指定された場合、SDKはlastMsgを優先します。// lastMsgおよびlastMsgSeqがいずれも指定されていない場合、プルの開始点はgetTimeBeginが設定されているかどうかによって異なります。設定する場合は設定範囲を開始点とし、設定しない場合は最新のメッセージを開始点とします。lastMsgSeq: -1,messageTypeList: [], // 履歴情報の属性をフィルタリングするために使用されます。空の場合、すべての属性情報をプルします。);if (getHistoryMessageListRes.code == 0) {//取得に成功}
パラメータの説明:
パラメータ | 意味 | シングルチャットが有効 | グループチャットが有効 | 必須かどうか | 説明 |
getType | メッセージをプルする位置および方向です。ローカル/クラウドのより古い/更新のメッセージのプルを設定することができます | YES | YES | YES | クラウドからのプルを設定するとき、ローカルに保存されたメッセージリストとクラウドに保存されたメッセージリストとをマージしてから返されます。ネットワークがない場合は、ローカルメッセージリストが直接返されます。 |
userID | 指定されたユーザーのシングルチャットメッセージ履歴をプルします | YES | NO | NO | シングルチャットメッセージをプルするには、相手のuserIDを指定する必要があります。このとき、空のgroupIDを渡すだけで済みます。 |
groupID | 指定されたグループのグループチャットメッセージ履歴をプルします | NO | YES | NO | シングルチャットメッセージをプルするには、グループチャットのgroupIDを指定する必要があります。このとき、空のuserIDを渡すだけで済みます。 |
count | 1回プルされたメッセージの数 | YES | YES | YES | iOS/Android端末では20に設定することをお勧めします。そうでない場合、プル速度に影響する可能性があります。Web端末の上限は15件です。 |
lastMsgID | どのメッセージからメッセージ履歴の取得を開始するかを示す最後のメッセージです | YES | YES | NO | 1. シングルチャットとグループチャットの両方で使用できます。 2. プルの開始点としてlastMsgを設定すると、返されたメッセージリストにこのメッセージが含まれていません。 3. 空に設定すると、セッションの最新のメッセージがプルの開始点として使用されます。 |
lastMsgSeq | どのメッセージからメッセージ履歴の取得を開始するかを示す最後のメッセージseqです | NO | YES | NO | 1. このフィールドはグループチャットでのみ使用できます。 2. プルの開始点としてlastMsgSeqを設定すると、返されたメッセージリストにこのメッセージが含まれます。 3. lastMsgおよびlastMsgSeqが同時に指定された場合、SDKはlastMsgを優先します。 4. lastMsgおよびlastMsgSeqがいずれも指定されていない場合、プルの開始点はgetTimeBeginが設定されているかどうかによって異なります。設定する場合は設定範囲を開始点とし、設定しない場合は最新のメッセージを開始点とします。 |
ページネーションプル
シングルチャットメッセージ履歴のプル、グループチャットメッセージ履歴のプル、および高度なインターフェースはいずれも、同じ方法でページネーションを実現できます。つまり、
lastMsg
およびcount
を使用して実現します。lastMsg
およびcount
を使用してページネーションを実現します。最初にプルするときにlastMsg
を空に設定し、メッセージリストから返された最後のメッセージを次のプルでlastMsg
として使用して、次のページのデータをプルすることができます。lastMsg
を空に設定すると、SDKはデフォルトで最新のメッセージから返されます。lastMsg
を設定すると、返されたメッセージリストには、設定されたlastMsg
が含まれていません。返されたメッセージリストには、メッセージが新しいほど前に並べ替えています。
説明:
1. メッセージ履歴のプル速度に影響を与えないように、ページネーション時に
count
を20に設定することをお勧めします。2. 返されたメッセージリストには、
lastMsgSeq
に対応するメッセージが含まれるため、グループチャットメッセージ履歴をプルするときにlastMsgSeq
を使用してプルを続行することはお勧めしません。ローカルメッセージのみのプル
getType
を設定して、ローカルメッセージのみをプルします。getType
の値がV2TIM_GET_LOCAL_OLDER_MSG
の場合、古い時間の方向にローカルに保存されたメッセージをプルすることを意味します。getType
の値がV2TIM_GET_LOCAL_NEWER_MSG
の場合、新しい時間の方向にローカルに保存されたメッセージをプルすることを意味します。サンプルコードは、最新のメッセージから開始して古い方向へ、ローカルデータベースから20件のシングルチャットメッセージをプルすることを示します。
TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: 10,getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,userID: "userID",);
グループ@メッセージへのリダイレクト後のプル
グループチャットセッションでは、グループ@メッセージを受信した後、通常、グループ@プロンプトバーをクリックしてグループ@メッセージの場所にリダイレクトし、近くのメッセージリストをプルして表示する必要があります。
グループ@メッセージ自体も表示する必要があるため、lastMsgSeqにグループ@メッセージの
sequence
を設定し、高度なインターフェースを使用してプルすることができます。サンプル コードは、グループ@プロンプトをクリックした後、グループ@メッセージにリダイレクトし、前後にそれぞれ20件のメッセージをプルして表示することを示します。
// グループ@メッセージに対応するsequenceをプルしますint atSequence = 1081;// グループ@メッセージおよびそれ以前のメッセージをプルしますTencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: 20, // 20件プルしますgetType: HistoryMsgGetTypeEnum.V2TIM_GET_CLOUD_OLDER_MSG, // グループ@メッセージよりも以前のメッセージをプルしますlastMsgSeq: atSequence,// グループ@メッセージを含むグループ@メッセージからプルを開始しますgroupID: "groupID" // グループチャットメッセージをプルします);// グループ@メッセージの後のメッセージをプルしますTencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: 20, // 20件プルしますgetType: HistoryMsgGetTypeEnum.V2TIM_GET_CLOUD_NEWER_MSG, // グループ@メッセージよりも以降のメッセージをプルしますlastMsgSeq: atSequence,// グループ@メッセージを含むグループ@メッセージからプルを開始しますgroupID: "groupID" // グループチャットメッセージをプルします);
よくあるご質問
1. メッセージ履歴をプルするとき、"total count of request cloud message exceed max limit」情報がログに表示されます
SDK現在のポリシーは次のとおりです:
1. クラウドからメッセージ履歴をプルするようにgetTypeが設定され、x件のメッセージをプルするとき、SDKはクラウドからx件のメッセージをプルします。
2. SDKは、削除されたメッセージ、現在のユーザーに関係のないメッセージなど、無効なメッセージをフィルター処理します。
3. クラウドのメッセージ履歴に無効なメッセージが多すぎると、SDKは複数のページネーションプルがトリガーされます。
システムの安定性と堅牢性を提供するために、SDKは自動ページネーションが最大3回トリガーされます。制限を超えると、「total count of request cloud message exceed max limit」というログ情報が表示されます。
このようなの頻度制限メカニズムが業務層に与える影響を最小限に抑えるために、次の手段を使用して無効なメッセージの生成を減らすことができます。
オンラインメッセージを使用できます。つまり、メッセージ送信時に
onlineUserOnly
フィールドがYES/true
に設定されます。グループチャットメッセージの場合は、グループ指向メッセージを使用してメッセージの受信者を指定し、無効なメッセージを回避できます。
2. クラウドからメッセージ履歴をプルするときにメッセージが「失われる」場合
クラウドからメッセージ履歴をプルするようにgetTypeが設定され、count件のメッセージをプルするとき、SDKは次のことを行います。
1. SDKは、最初にローカルからcount件のメッセージをプルします。
2. SDKは、クラウドからcount件のメッセージを再度プルし、削除されたメッセージなどの無効なメッセージをフィルター処理します。count件のメッセージが足りない場合、SDK内部でページネーションプルがトリガーされます。
3. ローカルメッセージとクラウドメッセージをマージし、メッセージ状態などの情報を更新します。
4. マージされたメッセージリストから、count件のメッセージを返します。
通常、メッセージが「失われる」場合は、ステップ2でプルされた無効なメッセージが多すぎるため、問題1の頻度制限メカニズムがトリガーされて、実際にプルされたクラウドメッセージが足りなくなることを意味します。
問題1のソリューションに従って処理することをお勧めします。
3. プルされたメッセージ履歴、グループプロファイルなどのグループメンバー情報はリアルタイムで更新されません。
SDKは、メッセージ生成時にグループプロファイル、roleなどの現在のグループメンバー情報を更新し、ローカルデータベースに保存します。
グループメッセージ履歴をプルするとき、メッセージ生成時のグループメンバー情報が直接返され、リアルタイムで更新されません。
4. メッセージ履歴をプルするときにラグ
SDK内部でメッセージプル性能を最適化しています。メッセージラグが発生した場合は、まず、プルされるメッセージの数
count
を減らしてみてください。