過去のメッセージ

機能説明

メッセージ履歴をプルする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などの現在のグループメンバー情報を更新し、ローカルデータベースに保存します。
グループメッセージ履歴をプルするとき、メッセージ生成時のグループメンバー情報が直接返され、リアルタイムで更新されません。
最新のグループメンバー情報を取得する必要がある場合は、getGroupMembersInfo(クリックして詳細を表示)。


4. メッセージ履歴をプルするときにラグ

SDK内部でメッセージプル性能を最適化しています。メッセージラグが発生した場合は、まず、プルされるメッセージの数countを減らしてみてください。