(57)【要約】      （修正有）【課題】オブジェクトアップデートをクライアントデバイスに提供する動的サブスクリプション管理システムを提供する。【解決手段】クライアントデバイスに送信されるべきオブジェクトアップデートについてのサブスクリプションは、クライアントデバイスにおけるトリガイベントの発生に基づいて動的に管理される。クライアントデバイスは、クライアントデバイスのそれぞれから受け取られたサブスクリプション変更リクエストを、オブジェクトサブスクリプションリストを動的に保持するよう計算プラットフォームに送る。特定のクライアントデバイスについてサブスクライブされたオブジェクトがクライアントデバイスにおいて最新であるかを判断し、最新のオブジェクトデータを備えていないと判断すると、リアルタイムでサブスクライブされたオブジェクトのアップデートを送信する。【選択図】図４
2020184354.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトアップデートをクライアントデバイスに提供する動的サブスクリプション管理システムであって、
複数のオブジェクトについての最新のオブジェクトデータを保持する１つ以上のメモリ記憶領域と、
１つ以上のプロセッサであって、
サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記サブスクリプション変更リクエストは、前記１つ以上のクライアントデバイスのうちの対応する１つのグラフィカルユーザインタフェースの視野の境界を横切って動かされるオブジェクトを特定するデータをそれぞれ備え、
前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれの前記グラフィカルユーザインタフェースの視野の中の前記複数のオブジェクトのうちの可視オブジェクトを特定し、
前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上の可視オブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記可視オブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信する
ように全体として構成される１つ以上のプロセッサと
を備える動的サブスクリプション管理システム。
【請求項２】
前記動的サブスクリプション管理システムは、前記特定のクライアントデバイスとウェブソケット接続を介して通信する
請求項１に記載の動的サブスクリプション管理システム。
【請求項３】
前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、１つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記１つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む
請求項１に記載の動的サブスクリプション管理システム。
【請求項４】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の新しいオブジェクトを含むことと
を含む、請求項１に記載の動的サブスクリプション管理システム。
【請求項５】
前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む
請求項４に記載の動的サブスクリプション管理システム。
【請求項６】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の特定のオブジェクトを削除することと
を含む、請求項１に記載の動的サブスクリプション管理システム。
【請求項７】
前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む
請求項６に記載の動的サブスクリプション管理システム。
【請求項８】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む、請求項７に記載の動的サブスクリプション管理システム。
【請求項９】
前記サブスクリプションデータは、前記サブスクリプションデータ内に反映されたオブジェクトの最大個数を規定する
請求項８に記載の動的サブスクリプション管理システム。
【請求項１０】
複数のオブジェクトについての最新のオブジェクトデータを保持することは、
前記複数のオブジェクトの１つ以上に関連するオブジェクトアップデートデータを受け取ることであって、前記オブジェクトアップデートデータは、１つ以上のクライアントデバイスにおいて生成される、オブジェクトアップデートデータを受け取ることと、
前記オブジェクトアップデートデータに少なくとも一部は基づいて、前記複数のオブジェクトのうちの１つ以上に対応する前記１つ以上のメモリ記憶領域内に記憶された前記オブジェクトデータをアップデートすること
を含む、請求項１に記載の動的サブスクリプション管理システム。
【請求項１１】
クライアントデバイスへのオブジェクトアップデートデータストリームを保持するコンピュータプログラム製品であって、前記コンピュータプログラム製品は、その中に記憶されたコンピュータ読み取り可能なプログラムコード部分を有する、少なくとも１つの非一時的コンピュータ読み取り可能な記憶媒体を備え、前記コンピュータ読み取り可能なプログラムコード部分は、
サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記サブスクリプション変更リクエストは、前記１つ以上のクライアントデバイスのうちの対応する１つのグラフィカルユーザインタフェースの視野の境界を横切って動かされるオブジェクトを特定するデータをそれぞれ備え、
前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのオブジェクトサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれの前記グラフィカルユーザインタフェースの視野の中の前記複数のオブジェクトのうちの可視オブジェクトを特定し、
前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上の可視オブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記可視オブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信する
よう構成された実行可能な部分を備える、コンピュータプログラム製品。
【請求項１２】
前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、１つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記１つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む
請求項１１に記載のコンピュータプログラム製品。
【請求項１３】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の新しいオブジェクトを含むことと
を含む、請求項１１に記載のコンピュータプログラム製品。
【請求項１４】
前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む
請求項１３に記載のコンピュータプログラム製品。
【請求項１５】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の特定のオブジェクトを削除することと
を含む、請求項１１に記載のコンピュータプログラム製品。
【請求項１６】
前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む
請求項１５に記載のコンピュータプログラム製品。
【請求項１７】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ること
をさらに含み、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む、請求項１６に記載のコンピュータプログラム製品。
【請求項１８】
複数のオブジェクトについての最新のオブジェクトデータを保持することは、
前記複数のオブジェクトの１つ以上に関連するオブジェクトアップデートデータを受け取ることであって、前記オブジェクトアップデートデータは、１つ以上のクライアントデバイスにおいて生成される、オブジェクトアップデートデータを受け取ることと、
前記オブジェクトアップデートデータに少なくとも一部は基づいて、前記複数のオブジェクトのうちの１つ以上に対応する前記１つ以上のメモリ記憶領域内に記憶された前記オブジェクトデータをアップデートすること
を含む、請求項１１に記載のコンピュータプログラム製品。
【請求項１９】
オブジェクトアップデートをクライアントデバイスに提供する動的サブスクリプション管理システムであって、
複数のオブジェクトについての最新のオブジェクトデータを保持する１つ以上のメモリ記憶領域と、
１つ以上のプロセッサであって、
サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記サブスクリプション変更リクエストは、前記１つ以上のクライアントデバイスのうちの対応する１つのグラフィカルユーザインタフェースの視野の中に表示される特定されたオブジェクトに対する変化を特定するデータをそれぞれ備え、
前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれの前記グラフィカルユーザインタフェースの視野の中の前記複数のオブジェクトのうちの可視オブジェクトを特定し、
前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上の可視オブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記可視オブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信する
ように全体として構成される１つ以上のプロセッサと
を備える動的サブスクリプション管理システム。
【請求項２０】
前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストのうちの少なくとも１つは、前記複数のオブジェクトのうちの複数の新しいオブジェクトを特定し、前記複数の新しいオブジェクトは、前記特定のクライアントデバイスのグラフィカルユーザインタフェースの視野に追加される
請求項１９に記載の動的サブスクリプション管理システム。
【請求項２１】
前記複数の新しいオブジェクトは、前記クライアントデバイスにアクセス可能な複数のチャネルインタフェースの間で切り替えが行われると、特定される
請求項２０に記載の動的サブスクリプション管理システム。
【請求項２２】
前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、１つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記１つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む
請求項１９に記載の動的サブスクリプション管理システム。
【請求項２３】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の新しいオブジェクトを含むことと
を含む、請求項１９に記載の動的サブスクリプション管理システム。
【請求項２４】
前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む
請求項２２に記載の動的サブスクリプション管理システム。
【請求項２５】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の特定のオブジェクトを削除することと
を含む、請求項１９に記載の動的サブスクリプション管理システム。
【請求項２６】
前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む
請求項２４に記載の動的サブスクリプション管理システム。
【請求項２７】
前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、
サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、
前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む、請求項２５に記載の動的サブスクリプション管理システム。
【請求項２８】
複数のオブジェクトについての最新のオブジェクトデータを保持することは、
前記複数のオブジェクトの１つ以上に関連するオブジェクトアップデートデータを受け取ることであって、前記オブジェクトアップデートデータは、１つ以上のクライアントデバイスにおいて生成される、オブジェクトアップデートデータを受け取ることと、
前記オブジェクトアップデートデータに少なくとも一部は基づいて、前記複数のオブジェクトのうちの１つ以上に対応する前記１つ以上のメモリ記憶領域内に記憶された前記オブジェクトデータをアップデートすること
を含む、請求項１９に記載の動的サブスクリプション管理システム。
【請求項２９】
クライアントデバイスへのオブジェクトアップデートデータストリームを保持するコンピュータプログラム製品であって、前記コンピュータプログラム製品は、その中に記憶されたコンピュータ読み取り可能なプログラムコード部分を有する、少なくとも１つの非一時的コンピュータ読み取り可能な記憶媒体を備え、前記コンピュータ読み取り可能なプログラムコード部分は、
サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記サブスクリプション変更リクエストは、前記１つ以上のクライアントデバイスのうちの対応する１つのグラフィカルユーザインタフェースの視野の中に表示される特定されたオブジェクトに対する変化を特定するデータをそれぞれ備え、
前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのオブジェクトサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれの前記グラフィカルユーザインタフェースの視野の中の前記複数のオブジェクトのうちの可視オブジェクトを特定し、
前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、
前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上の可視オブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記可視オブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信する
よう構成された実行可能な部分を備える、コンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
この特許出願は、２０１８年９月１０日に出願された米国仮出願番号62/729,180の優先権を主張する、２０１８年１０月３１日に出願された米国出願番号16/176,851の継続出願であり、これらの両方は、ここでその全体を参照によって援用される。
【背景技術】
【０００２】
公開されたアップデートを複数のクライアントデバイスに少なくとも部分的には集中メッセージングシステムを介して配信するシステムが提供されてきた。
【０００３】
適用された努力、独創性、及び革新を通して、そのようなシステムの多くの欠点は、本発明の実施形態による解決策を開発することによって解決されてきており、その多くの例がここで詳細に記載される。
【発明の概要】
【課題を解決するための手段】
【０００４】
クライアントデバイスについてコンテンツ送信を管理するよう構成された動的トピックサブスクリプションを保持することは、メッセージ配信システム（例えばグループベース通信プラットフォームのような）から個々のクライアントデバイスへネットワークを通して送信されるデータ量を大幅に減らし得る。所望のユーザ機能及び特定のクライアントデバイスのユーザに対して関心があるトピックス（例えばオブジェクト）のリアルタイムアップデートを維持するために、サブスクリプションは、クライアントデバイスのインタフェースとのユーザ相互作用に基づいて動的に調節され得る。例えば、クライアントデバイスは、クライアントデバイスのインタフェース内で現在、可視であるオブジェクトに関するオブジェクトアップデートについてのサブスクリプションをリクエストするよう構成され得る。
【０００５】
さまざまな実施形態は、オブジェクトアップデートをクライアントデバイスに提供する動的サブスクリプション管理システムに関する。ある実施形態では、動的サブスクリプション管理システムは、複数のオブジェクトについての最新のオブジェクトデータを保持する１つ以上のメモリ記憶領域と、１つ以上のプロセッサであって、サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記サブスクリプション変更リクエストは、前記１つ以上のクライアントデバイスのうちの対応する１つのグラフィカルユーザインタフェースの視野の境界を横切って動かされるオブジェクトを特定するデータをそれぞれ備え、前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれの前記グラフィカルユーザインタフェースの視野の中の前記複数のオブジェクトのうちの可視オブジェクトを特定し、前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上の可視オブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記可視オブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信するように全体として構成される１つ以上のプロセッサとを備える。
【０００６】
ある実施形態では、前記動的サブスクリプション管理システムは、前記特定のクライアントデバイスとウェブソケット接続を介して通信する。さらに、前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、１つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記１つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む。さまざまな実施形態では、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の新しいオブジェクトを含むこととを含む。さまざまな実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む。
【０００７】
ある実施形態では、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の特定のオブジェクトを削除することとを含む。さらに、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む。さまざまな実施形態では、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む。前記サブスクリプションデータは、前記サブスクリプションデータ内に反映されたオブジェクトの最大個数を規定し得る。
【０００８】
ある実施形態は、クライアントデバイスにオブジェクトアップデートを提供する方法に関する。この方法は、サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれについての複数のオブジェクトのうちのサブスクライブされたオブジェクトを特定し、前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上のサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記サブスクライブされたオブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信することを含む。
【０００９】
ある実施形態では、前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、１つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記１つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の新しいオブジェクトを含むこととを含む。ある実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む。
【００１０】
さまざまな実施形態において、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の特定のオブジェクトを削除することとを含む。ある実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む。さまざまな実施形態において、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む。
【００１１】
ある実施形態は、クライアントデバイスへのオブジェクトアップデートデータストリームを保持するコンピュータプログラム製品に関し、前記コンピュータプログラム製品は、その中に記憶されたコンピュータ読み取り可能なプログラムコード部分を有する、少なくとも１つの非一時的コンピュータ読み取り可能な記憶媒体を備え、前記コンピュータ読み取り可能なプログラムコード部分は、サブスクリプション変更リクエストを１つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記１つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記１つ以上のクライアントデバイスのうちのそれぞれについてのオブジェクトサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、１つ以上のクライアントデバイスのうちのそれぞれについての複数のオブジェクトのうちのサブスクライブされたオブジェクトを特定し、前記１つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される１つ以上のサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記サブスクライブされたオブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信するよう構成された実行可能な部分を備える。
【００１２】
さまざまな実施形態において、前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトのローカルコピーに対応するバージョン識別子を備え、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、１つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記１つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の新しいオブジェクトを含むこととを含む。ある実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記１つ以上の特定のオブジェクトを削除することとを含む。さまざまな実施形態においては、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち１つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、１つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記１つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む。
【００１３】
さまざまな実施形態は、クライアントデバイス上に記憶されたオブジェクトアップデートを動的に保持するためのクライアントデバイスに関し、クライアントデバイスは、複数のオブジェクトについてのオブジェクトデータのローカルデータストアを保持する１つ以上のメモリ記憶領域、複数のオブジェクトとのユーザ相互作用をモニタし、複数のオブジェクトのうちの１つ以上の特定のオブジェクトとのユーザ相互作用における変化を示す１つ以上のトリガイベントを検出し、検出された１つ以上のトリガイベントに少なくとも一部は基づいて、１つ以上の特定のオブジェクトについてサブスクリプション変更リクエストを生成し、サブスクリプション変更リクエストをリモート計算プラットフォームに送信することによって、１つ以上の特定のオブジェクトに関連するクライアントデバイスに送信されるオブジェクトデータの変更をリクエストするよう、全体として構成される１つ以上のプロセッサを備える。
【００１４】
ある実施形態においては、１つ以上のトリガイベントは、１つ以上のオブジェクトを、グラフィカルユーザインタフェースの可視部分及び隠された部分の間で移動させることを含む。さまざまな実施形態では、１つ以上のトリガイベントは、１つ以上のオブジェクトをグラフィカルユーザインタフェースの可視部分の境界を越えて移動させることを含む。さらに、グラフィカルユーザインタフェースの隠された部分から可視部分へ１つ以上のオブジェクトの動きを検出すると、サブスクリプション変更リクエストを生成することは、１つ以上のオブジェクトについてのサブスクライブリクエストを生成することによって、１つ以上のオブジェクトに関するサブスクリプションを開始することを含み得る。さらに、グラフィカルユーザインタフェースの可視部分から隠された部分への１つ以上のオブジェクトの動きを検出すると、サブスクリプション変更リクエストを生成することは、１つ以上のオブジェクトについてのアンサブスクライブリクエストを生成することによって１つ以上のオブジェクトに関するサブスクリプションを終了させることを含み得る。
【図面の簡単な説明】
【００１５】
添付図面にこれから参照がなされるが、これらは必ずしも一律の縮尺で描かれてはいない。
【図１】ある実施形態によるクライアントデバイスと通信するグループベース通信プラットフォームの概略図である。
【図２】ある実施形態によるメッセージ配信サーバの概略図である。
【図３】ある実施形態によるインタフェース計算エンティティの概略図である。
【図４】ある実施形態によるグループベース通信インタフェースのディスプレイウィンドウ間のデータ送信相互作用の概略図である。
【図５】さまざまな実施形態によるさまざまな計算エンティティの機能を示すフロー図である。
【図６】さまざまな実施形態によるさまざまな計算エンティティの機能を示すフロー図である。
【発明を実施するための形態】
【００１６】
本開示は、添付の図面を参照してさまざまな実施形態をより完全に記載する。ここにはいくつかの実施形態が示され記載されてはいるが、全ての実施形態が示され記載されているわけではないことを理解されたい。実際、実施形態は、多くの異なる形態を取り得て、したがってこの開示は、ここで述べられた実施形態に限定されるものとして解釈されるべきではない。むしろこれら実施形態は、この開示が適用され得る法的要件を充足するように提供される。全体を通して同様の番号は、同様の要素を表す。
【００１７】
概観
グループベースの通信プラットフォームの個々のユーザによってモニタされるオブジェクト（例えばユーザ、ファイル、トピック、及び／又はその他）の個数が増すと、それらユーザによって用いられるクライアントデバイスに課せられる処理の負担も増し、ユーザのクライアントデバイスがモニタされているオブジェクトに関する全てのアップデートを受け取ることを確実にするために、ユーザのクライアントデバイス及びグループベースの通信プラットフォームの間のネットワークトラフィックも増す。これらの技術的問題は、実時間メッセージングの文脈で特に深刻であり、そこではこれらオブジェクトベースのアップデートは、アップデートが発生するたびにクライアントデバイスに配信される。単一のユーザ（及び関連付けられたクライアントデバイス）が多数のオブジェクトをモニタする、もっとも極端な場合において、オブジェクトアップデートは、クライアントデバイスにほとんど常時、送信され得る。
【００１８】
多くの場合、ユーザがフォローすることにほとんど関心がないオブジェクトに関するアップデート、及び／又はユーザが現在、レビューしていないオブジェクト（例えばユーザインタフェースの隠れた部分又はそうでなければ非表示の部分に表されているオブジェクト）に対するアップデートは、長時間にわたってユーザには完全に気付かれないままであり得る。現実的には、個々のユーザは、多数のオブジェクトアップデートを同時には精神的に把握できず、したがって、いくつかのオブジェクトアップデートは、優先順位が他のオブジェクトアップデートよりもより低いレベルに降格され得る。
【００１９】
さまざまな実施形態は、動的サブスクリプションベースのモデルを利用することによって、与えられた時刻においてユーザにリレーされるオブジェクトアップデートの個数を減らす。ユーザが現在、サブスクライブされているオブジェクトに関するアップデートだけがクライアントデバイスに送信され、それによってグループベースの通信プラットフォーム及びクライアントデバイスの間に流れるネットワークトラフィックの量を減らす。これらサブスクリプションは、クライアントデバイスとのユーザインタラクション（user interactions）に基づき得て、したがってクライアントデバイスは、さまざまなオブジェクトに関するサブスクライブリクエスト及びアンサブスクライブリクエストのような、サブスクリプション変更リクエスト（subscription modification requests）を、クライアントデバイスにおける１つ以上のトリガイベントの発生に基づいて生成するよう構成され得る。それらトリガイベントは、ユーザインタラクションベースであり得て、特定のオブジェクトに対するユーザの関心レベルについてのプロキシと考えられ得る。例えばクライアントデバイス上で、オブジェクトをユーザインタフェースの可視の視野の境界を越えて移動すること（例えばオブジェクトが見えるようになるまでスクロールすること）によって、例えば、特定のオブジェクトをユーザインタフェースの可視の視野内に移動することは、オブジェクトについてのサブスクライブリクエストを生成及び送信するためにクライアントデバイスによって利用されるトリガイベントであると考えられ得て、例えばオブジェクトをユーザインタフェースの可視視野の境界を越えて移動させること（例えばオブジェクトがもはや可視ではないまでスクロールすること）によって、オブジェクトをユーザインタフェースの可視視野の外に移動する結果は、オブジェクトについてのアンサブスクライブリクエストを生成及び送信するためにクライアントデバイスによって利用されるトリガイベントであると考えられ得る。適切な状況の下ではバックグラウンドオブジェクト（例えば可視視野に現在存在しないオブジェクト）についてのアップデートがクライアントデバイスに送信され得るようにするためには、他のトリガイベントも同様に利用され得る。それらサブスクライブ／アンサブスクライブのリクエストは、正確でかつ最新のオブジェクトサブスクリプションがグループベースのコミュニケーションプラットフォームにおいて維持されることを確実にするために、クライアントデバイスによってリアルタイムで生成及び送信され得る。結果として、特定のユーザにとって関心があると現在みなされているオブジェクトに関するオブジェクトアップデートだけが、任意の与えられた時刻においてユーザのクライアントデバイスに送信される。
【００２０】
個別のクライアントデバイスについてのオブジェクトサブスクリプションを示すサブスクリプションデータは、グループベースのコミュニケーションプラットフォームにおいて（例えば１つ以上のメッセージ配信サーバ（message distribution servers）にアクセス可能なメモリ記憶領域において）記憶され得て、クライアントデバイスから受け取られたサブスクリプション変更リクエストに基づいてリアルタイムでアップデートされ得る。この記憶されたサブスクリプションデータは、クライアントデバイスに送信されるべきオブジェクトアップデートをフィルタリングし、サブスクライブされたオブジェクトに関連するアップデートだけがクライアントデバイスに送信されるようにするためにメッセージ配信サーバによって使用され得る。より詳細にここで説明されるように、オブジェクトアップデートは、グループベースの通信プラットフォームに位置するインタフェース計算エンティティを通して送信され得る。
【００２１】
定義
ここで用いられるように、「データ」、「コンテンツ」、「情報」という語、及び同様の語は、本発明の実施形態によって送信され、受信され、及び／又は記憶されることが可能なデータを表すために交換可能に用いられ得る。よって、このような語の使用は、本発明の実施形態の精神及び範囲を限定するようには解釈されるべきではない。さらに、計算デバイスが他の計算デバイスからデータを受け取るとここで記載される場合においては、データは、他の計算デバイスから直接に受け取られてもよく、又は、例えば、１つ以上のサーバ、リレー、ルータ、ネットワークアクセスポイント、ベースステーション、ホスト等のような１つ以上の中間計算デバイスを介して間接的に受け取られてもよい。同様に、計算デバイスが他の計算デバイスにデータを送るとここで記載される場合においては、データは、他の計算デバイスに直接に送られてもよく、又は、例えば、１つ以上のサーバ、リレー、ルータ、ネットワークアクセスポイント、ベースステーション、ホスト等のような１つ以上の中間計算デバイスを介して間接的に送られてもよい。
【００２２】
「ユーザ」という語は、個人、個人のグループ、会社、組織等を表すと理解されるべきである。ユーザは、クライアントデバイスを用いてグループベースの通信又はメッセージングのシステムにアクセスし得る。「グループベース」とは、定義されたユーザのグループだけにアクセス可能であるようにするために十分なセキュリティを有する、システム、チャンネル、メッセージ、又は仮想環境を表すようここでは用いられる。このグループは、組織又は営利事業のコモンアクセスクレデンシャルのような、コモンアクセスクレデンシャルによって定義され得る。アクセスは、ジョインするためのバリデートされたリクエスト（validated request）、つまりあるグループメンバユーザによって他の非メンバユーザに送信されたジョインするためのインビテーションによってさらに促進され得る。グループ識別子（Group identifiers）（以下に定義される）がデータ、情報、メッセージ等を特定のグループと関連付けるのに用いられる。
【００２３】
「ユーザプロファイル（user profile）」、「ユーザアカウント（user account）」、及び「ユーザアカウント詳細（user account details）」という語は、ユーザに関連付けられた情報を表し、これは例えば、ユーザ識別子、ユーザがアクセスを認められた通信チャネル（例えばグループベース通信チャネル（group-based communication channels））に関連付けられた１つ以上の通信チャネル識別子（例えばグループベース通信チャネル識別子）、ユーザが関連付けられているグループについての１つ以上のグループ識別子、ユーザがグループベース通信チャネルのうちのいずれかのオーナーであるかについての表示、ユーザがグループベース通信チャネル制限のうちのいずれかを有するかについての表示、複数のメッセージ、複数の絵文字、複数の会話、複数の会話トピックス、アバター、電子メールアドレス、実名（例えばJohn Doe）、ユーザ名（例えばjdoe）、パスワード、タイムゾーン、ステータス等を含む。ユーザアカウントの詳細は、例えばユーザのユーザ名及びパスワードを含むユーザについてのログイン情報のような、ユーザ資格情報（user credentials）のサブセット指定を含み得る。
【００２４】
「クライアントデバイス」という語は、１つ以上のサーバによって利用可能にされた１つ以上のサービスにアクセスするよう構成されているコンピュータハードウェア（群）及び／又はソフトウェア（群）を表す。サーバ（群）は、しばしば（必ずそうというわけではないが）他のコンピュータシステム上に存在し、この場合、クライアントデバイスは、ネットワークを介してサービスにアクセスする。クライアントデバイスは、グループ識別と関連付けられ得て、ここでグループ識別は、ユーザが属するグループ（例えばユーザグループ）を示唆する電子的表示である。クライアントデバイスは、以下に限定されないが、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、ウェラブルデバイス、パーソナルコンピュータ、エンタープライズコンピュータ等を含み得る。
【００２５】
「グループベースの通信プラットフォーム」という語は、１つ以上のクライアントデバイスにアクセス可能であり、データベースの運用に関連する複数のソフトウェアアプリケーションへのアクセスを提供するよう動作可能である計算サービスの集合体を表す。ある例では、グループベースの通信プラットフォームは、ソフトウェアアプリケーションを実行していて、ディジタルコンテンツアイテム、アプリケーション関連データ等を記憶する１つ以上のデータベースへのアクセスを有する１つ以上のさらなるサーバと通信するよう構成された１つ以上の中央サーバの形態を取り得る。
【００２６】
「通信チャネル」という語は、情報ルート、及びシステム間及びシステムの部分間でのデータのやりとりのために用いられる関連付けられた回路を表す。例えば、通信チャネルは、さまざまなクライアントデバイスの間で確立され得ることによって、これらクライアントデバイスが互いの間でデータを通信し共有することを可能にする。これら通信チャネルは、グループの全てのユーザの間でメッセージを共有するための、クライアントデバイス（及びそれら各々のユーザ）のうちの選ばれたグループの間で確立された「グループベース通信チャネル」であり得る。この通信チャネルは、追加で及び／又は代替として、それら２つのユーザの間だけでメッセージを共有するための、２つのクライアントデバイスの間で確立された１対１の直接メッセージ通信チャネルであり得る。
【００２７】
複数の通信チャネルは、１つ以上の計算デバイスのそれぞれの上で動作し得て、したがって通信チャネル識別子は、通信チャネルに割当され得て、その通信チャネルの関連するデータが記憶されているデータベースにおける物理アドレスを示し、その通信チャネル上でやりとりされるデータを受け取るために通信チャネル内で参加するクライアントデバイスを識別するのに利用される。したがって通信チャネル識別子は、複数の通信チャネルと関連付けられた計算デバイス上であっても、通信チャネルが別個であり、分離している状態にとどまることを確実にする。
【００２８】
通信チャネルは、「パブリック」であり得て、これは、任意のクライアントデバイスが当該通信チャネルを通した情報シェアリングに加わって参加することを許可し得る。通信チャネルは、「プライベート」であり得て、これは、当該通信チャネルにおけるデータ通信を特定のクライアントデバイス及び／又はユーザに制限し得る。
【００２９】
「グループベース通信チャネルインタフェース」という語は、チャネルメンバ（例えばクライアントデバイスを用いてその環境にアクセスするバリデートされたユーザ）によってポストされた、そのグループのメンバだけにしか見えないメッセージング通信を表示するよう構成される仮想通信環境又はフィードを表す。グループベース通信チャネルインタフェースのフォーマットは、グループベース通信チャネルの異なるメンバには異なるように見えるかもしれない。しかし、グループベース通信チャネルインタフェースのコンテンツ（すなわちメッセージング通信）は、グループベース通信チャネルのそれぞれのメンバに表示される。例えば、グループベースのメッセージング通信のコモンセットは、各グループベース通信チャネルのそれぞれのメンバに表示されることによって、グループベース通信チャネルインタフェースのコンテンツ（すなわちメッセージング通信）は、グループベース通信チャネルのメンバによっても変わらない。
【００３０】
ある実施形態では、グループベース通信チャネルインタフェースの一部は、可視性に基づいて区別され得る。グループベース通信チャネルインタフェースは、実際に表示されるコンテンツを含む可視視野境界（visible field of view boundary）によって囲まれる可視視野（visible field of view）によって特徴付けられる。グループベース通信チャネルインタフェースの他のコンテンツは、ユーザの視野から隠され得る。具体的な例として、コンテンツの長いフィードは、スクロール可能であり得て、それによりコンテンツの長いフィードの一部しか、所与の時刻においてグループベース通信チャネルインタフェース内には表示されない。ユーザがコンテンツのフィードを通してスクロールしていくと、可視部分は、グループベース通信チャネルインタフェースに対してするユーザのスクロールするインタラクションと同期して変化し、したがってさまざまなオブジェクトは、可視視界とグループベース通信チャネルインタフェースの隠された部分との間の可視視界境界を越えて移動する。
【００３１】
ある実施形態では、グループベース通信チャネルインタフェースの可視部分は、例えば図４に示されるように、ディスプレイウィンドウ内に複数の可視ペインを備え得る。ある実施形態では、それぞれのディスプレイペインは、特定のデータタイプを表示するよう構成され得る。例えば、最も左のペインは、チャネルのリスト及び／又はユーザへのダイレクトメッセージを提供し得て、最も右（又は３ペイン構成におけるセンターペイン）は、メッセージがやりとりされている特定のチャネルのコンテンツを表示し得て、これは表示されたメッセージの全てを表示することを含む。センターペインのコンテンツは、ある実施形態では、コンテンツがペインの不可視部分（例えば可視部分の上又は下にスクロールされる）と、ペインの可視部分との間でスクロールがされ得るように、スクロール可能なフィードとして提示され得る。メインディスプレイウィンドウが３ペインを備える実施形態では、最も右のペインは、特定の選択されたメッセージ、チャネル等に関する追加のデータを備え得る。
【００３２】
ここで用いられるように、「メッセージング通信」及び「メッセージ」という語は、クライアントデバイスを使用しているユーザによって提供される電子的に生成され、グループベース通信チャネルインタフェース内での表示のために構成されている任意のディジタルコンテンツオブジェクトを表す。メッセージ通信は、ユーザ（クライアントデバイスを用いて）によって提供される、任意のテキスト、画像、ビデオ、オーディオ、又はこれらの組み合わせを含み得る。例えば、ユーザは、メッセージコンテンツとして、メッセージング通信内に、画像及びビデオと共にテキストも含むメッセージング通信を提供し得る。そのような場合、テキスト、画像、及びビデオは、メッセージング通信つまりディジタルコンテンツオブジェクトを構成する。グループベースの通信システムの通信チャネル（例えばグループベース通信チャネル）に送信又はポストされたそれぞれのメッセージは、以下を含むメタデータを含み、すなわち送信するユーザの識別子、メッセージ識別子、メッセージコンテンツ、オブジェクト識別子、グループ識別子、及び／又はグループベース通信チャネルの識別子を含む。上述の識別子のそれぞれは、ＡＳＣＩＩテキスト、ポインタ、メモリアドレス等を含み得る。メッセージは、グループベースの通信インタフェースの個々のペイン内で生成及び／又は編集され得て（単一のペインが特定のディスプレイウィンドウ内で可視である）、及び／又はメッセージは、別個のディスプレイウィンドウ内で生成及び／又は編集され得る（例えば、通信チャネル内でシェアされるべきポスティングを生成するために、及び／又は他のユーザとの通話を開始するために、別個のディスプレイウィンドウ群が利用され得る）。
【００３３】
「オブジェクト」という語は、ここで用いられるように、１つ以上のクライアントデバイスにアップデートが提供及び配信され得る任意のコンテンツソースを表し得る。特定のユーザは、その特定のユーザのアクティビティについてのアップデートが他のクライアントデバイスに配信され得るという点で、他のユーザにとってのオブジェクトだと考えられ得る。オブジェクトは、ある実施形態ではファイルとしても実現され得て、この場合、これらファイルのアップデートは、個別のクライアントデバイスに配信され得る。特定のオブジェクトに関連するアップデートは、グループベースの通信プラットフォームから（特に、ある実施形態ではサブスクリプション管理システムから）個別のクライアントデバイスにメッセージとして配信され得て、このメッセージは、当該アップデートが関連する具体的なオブジェクトを特定する追加のメタデータ（ここでは「オブジェクト識別子」と呼ばれる）を含み得る。これらオブジェクト識別子は、クライアントデバイスが、適切なオブジェクトと関連付けてアップデートを表示できるようにする。ある実施形態では、オブジェクト識別子は、オブジェクトが関係するオブジェクトのタイプ（例えばユーザオブジェクト、ファイルオブジェクト、及び／又はその他）を示すデータを備え、追加として又は代替として、オブジェクトをユニークに特定する（例えば全てのオブジェクトの中で、又は特定のオブジェクトタイプの全てのオブジェクトの中で）ユニークなストリング（例えばユニークな番号、ユニークなアルファニューメリックのストリング、及び／又はその他）を示すデータを備え得る。
【００３４】
ある実施形態では、オブジェクトと関連付けられるメタデータは、オブジェクトと関連付けられる「バージョン識別子」を追加として備え得て、これら識別子は、オブジェクトが現在の物（アップトゥデート）であるかを示す。オブジェクトについてのこのバージョン識別子は、増加していく数字の番号であり得て、ここでバージョン識別子は、オブジェクトのそれぞれのアップデートと共に増加する。しかし他の構成も可能であること（例えばアルファニューメリック値、ハッシュ値、及び／又はその他）が理解されるべきである。
【００３５】
「グループ識別子」又は「チーム識別子」という語は、グループベースの通信システム内でグループが特定され得るデータの１つ以上のアイテムを表す。例えば、グループ識別子は、ＡＳＣＩＩテキスト、ポインタ、メモリアドレス等を備え得る。
【００３６】
「グループベース通信チャネル識別子」又は「チャネル識別子」は、グループベース通信チャネルが特定され得る、データの１つ以上のアイテムを表す。例えば、グループベース通信チャネル識別子は、ＡＳＣＩＩテキスト、ポインタ、メモリアドレス等を備え得る。クロスグループ通信チャネルが別のチームのユーザと関連付けられたクライアントデバイスの間で利用可能であり得るが、ある実施形態では、通信チャネル（パブリック、プライベートにかかわらず）は、共通のグループ／チームのユーザ（及び彼らの関連付けられたクライアントデバイス）の間での使用のために利用可能であり得る。よって、チャネル識別子は、特定の通信チャネルに関連するデータ／メッセージがどこに記憶されているかを具体的に特定するために、１つ以上のグループ識別子と共に提供され得る。
【００３７】
「送信ユーザ識別子」は、特定のユーザ（すなわち特定のユーザに関連付けられたクライアントデバイス）によって送られるメッセージのコレクションと関連付けられる。これらメッセージは、ユーザに関するコンテキストを決定するために分析され得る（例えばあるトピックにおけるユーザの専門知識又は興味は、そのようなメッセージの中のそのトピック又はそのトピックに関連付けられたキーワードの言及の頻度に基づいて決定され得る）。
【００３８】
グループベースの通信システムユーザは、組織グループの中に組織化され（例えばそれぞれの会社の従業員は、別々の組織グループであり得る）、それぞれの組織グループは、ユーザが割当され得る又はユーザが参加し得る（例えばグループベース通信チャネルは、部署、オフィスのような地理的位置、製品ライン、ユーザの関心、トピック、問題、及び／又はその他を表し得る）１つ以上の通信チャネル（例えばグループベース通信チャネル）を有し得る。グループ識別子は、メッセージのためのアクセス制御を促進するのに用いられ得る（例えばサーチクエリに応答してサーチ結果の一部としてメッセージリターンを持つようなメッセージへのアクセスは、それらのユーザプロファイルに関連付けられたグループ識別子を有するそれらユーザに制限され得る）。グループ識別子は、メッセージについてのコンテキストを決定するのに用いられ得る（例えば組織の名称及び／又は組織の簡単な説明のようなグループの説明がグループ識別子に関連付けられ得る）。
【００３９】
グループベースの通信システムユーザは、通信チャネル（例えばグループベース通信チャネル）に参加及び／又は作成をし得る。一部のグループベース通信チャネルは、それらのユーザプロファイルに関連付けられた特定の組織グループ識別子を有するそれらユーザにとってはグローバルにアクセス可能であり得る（すなわちその組織のメンバであるユーザ）。一部のグループベース通信チャネルへのアクセスは、特定のグループのメンバに制限され得て、それによってグループベース通信チャネルは、それらのユーザプロファイルに関連付けられた特定のグループ識別子を有するそれらユーザにアクセス可能である。グループベース通信チャネル識別子は、メッセージについてのアクセス制御を促進するために用いられ得る（例えば、サーチクエリに応答してサーチ結果の一部としてメッセージリターンを持つようなメッセージへのアクセスは、それらのユーザプロファイルに関連付けられたグループ識別子を有し、又はグループベース通信チャネルに参加する能力を有するそれらユーザに制限され得る）。グループベース通信チャネル識別子は、メッセージのコンテキストを決定するのに用いられ得る（例えば、グループベース通信チャネルで議論されるプロジェクトの説明のような、グループベース通信チャネルの説明は、グループベース通信チャネル識別子に関連付けられ得る）。
【００４０】
「プライベートグループベース通信チャネル」という語は、制限されたアクセスを持つことによって、グループベースの通信システムの他のメンバによって一般にはアクセス可能ではなく及び／又はサーチ可能ではないグループベース通信チャネルを表す。例えば、プライベートグループベース通信チャネルへのアクセスについての知識及び許可を有する（例えば、ユーザが許可／認証された後に、プライベートグループベース通信チャネルについてのグループベース通信チャネル識別子がそれらのユーザプロファイルに関連付けられる）ユーザ又は管理者だけが、プライベートグループベース通信チャネルのコンテンツを見ることができる。
【００４１】
さまざまな実施形態を参照してここで説明されている「インタフェース計算エンティティ」は、さまざまなクライアントデバイスとの通信接続を維持するための計算デバイス（又は計算デバイスの一部）である。具体的には、インタフェース計算エンティティは、グループベース通信プラットフォームのメッセージ配信サーバ及びそれぞれのクライアントデバイスの間でリアルタイムでメッセージ（例えばオブジェクトアップデート）及び対応するメタデータ（例えばオブジェクト識別子を備える）を送信する複数のクライアントデバイスのそれぞれによって開始されたウェブソケット接続（又は他の通信接続）を維持するよう構成され得る。
【００４２】
ある実施形態を参照してここで説明されている「メッセージ配信サーバ」は、オブジェクトアップデート及び／又はその他メッセージをクライアントデバイス間で受信及び／又は配信するためのさまざまなクライアントデバイスと相互作用する（interacting）（例えばインタフェース計算エンティティを介して）よう構成された計算デバイスである。メッセージ配信サーバは、ユーザから受信された及び／又はユーザに配信された（例えば対応するクライアントデバイスを介して）メッセージを受信し、生成し、記憶し（関連付けられたデータベース内に）、及び／又は仕向ける（direct）よう構成され得る。メッセージ配信サーバの機能は、単一のサーバ又は共通の機能を有するサーバ群の集合体を介して提供され得て、又はメッセージ配信サーバの機能は、メッセージ配信サーバの記載された機能のサブセットを実行する複数のサーバ又はサーバ群の集合体の中で分割され得る。例えば、メッセージ配信サーバの第１サブセット−−ゲートウェイサーバ−−は、インタフェース計算エンティティを介してクライアントデバイスからのメッセージを受信し、クライアントデバイスへのメッセージを送信するよう構成され得る。これらのゲートウェイサーバは、通信チャネル内で配信されるメッセージを収集し、これらメッセージをインデキシング及びアーカイビングのためにメッセージリポジトリデータベース内に記憶するよう構成された、メッセージ配信サーバの第２サブセット−−チャネルサーバ−−と通信し得る。ある実施形態では、チャネルサーバは、クライアントデバイスにさまざまなメッセージを提供するためにインタフェース計算エンティティと通信し得る。
【００４３】
ある実施形態では、メッセージ配信サーバは、クライアントデバイスがサブスクライブするオブジェクトを特定する、それぞれのクライアントデバイスに関連付けられた「サブスクリプションデータ」に基づいて、オブジェクトアップデートを、グループベース通信プラットフォームの中又は外の両方のクライアントデバイスの間で配信するクライアントデバイスと相互作用する（例えばインタフェース計算エンティティを介して）グループベースの通信プラットフォームの「サブスクリプション管理システム」として、又はそれと協働して機能し得る。このサブスクリプションデータは、特定のクライアントデバイスについてサブスクライブされたオブジェクトのリスティングとして実現され得て、オブジェクトは、例えば、オブジェクト識別子を結合すること、又はオブジェクト識別子をサブスクリプションデータから削除することによって、オブジェクトデータに追加又はそれから削除され得る。ある実施形態では、インタフェース計算エンティティは、ここで説明されるように、さまざまなクライアントデバイスに配信されるべきメッセージ（例えばオブジェクトアップデート）を獲得するために、１つ以上のメッセージ配信サーバとのバックエンド接続を生成及び維持し、メッセージ配信サーバは、適切なクライアントデバイスへの配信のために、サブスクリプション管理システムの機能を通して、サブスクライブされたオブジェクトに関するメッセージ（例えばオブジェクトアップデート）をインタフェース計算エンティティに提供する。
【００４４】
ある実施形態のサブスクリプション管理システムは、特定のクライアントデバイスについてのサブスクリプションデータが、対応するクライアントデバイスから受信された１つ以上の「サブスクリプション変更リクエスト」に基づいてアップデートされ得る（例えばリアルタイムで）よう、もともと動的である。これらサブスクリプション変更リクエストは、サブスクリプションデータ内で現在表現されていない新しいオブジェクトがサブスクリプションデータに追加されることによって、新しいオブジェクトについてのさらなるアップデートがクライアントデバイスに送信されるよう、クライアントデバイスがリクエストする、「サブスクライブリクエスト」として実現され、又はオブジェクトがサブスクリプションデータから除去されることによって、オブジェクトに関するさらなるアップデートがクライアントデバイスに送信されない（例えばオブジェクトが再びサブスクリプションデータに新しいオブジェクトとして追加されるまで）よう、クライアントデバイスがリクエストする、「アンサブスクライブリクエスト」として実現され得る。
【００４５】
ある実施形態では、１つ以上のインタフェース計算エンティティ及び／又はメッセージ配信サーバは、例えば、１つ以上の計算エンティティに地理的に近接して位置するクライアントデバイスにサービスするために、地理的に分散され得る。しかしある実施形態では、さまざまな計算エンティティ（インタフェース計算エンティティ及び／又はメッセージ配信サーバを含む）は、中央に配置され得る。
【００４６】
例示的システムアーキテクチャ
本発明の方法、装置、及びコンピュータプログラム製品は、さまざまなデバイスの任意のものによって実現され得る。例えば、例示的実施形態の方法、装置、及びコンピュータプログラム製品は、１つ以上のクライアントデバイスのような１つ以上のデバイスと通信するよう構成されるサーバ又は他のネットワークエンティティのようなネットワークデバイスによって実現され得る。ある好ましい非限定的な実施形態において、計算デバイスは、パーソナルコンピュータ又はコンピュータワークステーションのような固定された計算デバイスを含み得る。さらに例示的実施形態は、携帯デジタルアシスタント（ＰＤＡ）、携帯電話、スマートフォン、ラップトップコンピュータ、タブレットコンピュータ、ウェアラブルデバイス、又は前述のデバイスの任意の組合せのような、さまざまなモバイルデバイスの任意のものによって実現され得る。
【００４７】
図１は、本発明の実施形態が動作し得る例示的計算システムを示す。ユーザは、クライアントデバイス１０１Ａ−１０１Ｎを用いて通信ネットワーク１０３を介してグループベース通信プラットフォーム１０５にアクセスし得る。
【００４８】
通信ネットワーク１０３は、例えば、それを実現するのに要求される任意のハードウェア、ソフトウェア及び／又はファームウェア（例えばネットワークルータ等のような）と共に、有線又は無線ローカルエリアネットワーク（ＬＡＮ）、パーソナルエリアネットワーク（ＰＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、ワイドエリアネットワーク（ＷＡＮ）等を含む任意の有線又は無線通信ネットワークを含み得る。例えば、通信ネットワーク１０３は、セルラー式電話、８０２．１１、８０２．１６、８０２．２０、及び／又はＷｉＭａｘネットワークを含み得る。さらに、通信ネットワーク１０３は、インターネットのような公衆ネットワーク、イントラネットのようなプライベートネットワーク、又はそれらの組合せを含み得て、ＴＣＰ／ＩＰベースのネットワーキングプロトコルを含むがこれには限定されない、現在利用可能な又は将来開発されるさまざまなネットワーキングプロトコルを利用し得る。ここで議論されるように、ネットワーキングプロトコルは、ウェブソケット通信を介したデータ送信を可能にするよう構成される。例えば、ネットワーキングプロトコルは、グループベース通信システムの要求に合うようにカスタマイズされ得る。ある実施形態では、プロトコルは、ウェブソケットチャネルを介して送られるＪＳＯＮオブジェクトのカスタムプロトコルである。ある実施形態では、データは、ＪＳＯＮ−ＲＰＣ、ＪＳＯＮ−ＲＥＳＴ／ＨＴＴＰ等のような、複数のプロトコルを介して送信され得る。
【００４９】
示された実施形態において、グループベース通信プラットフォーム１０５は、インタフェース計算エンティティ１０９を介して通信ネットワーク１０３を介してアクセス可能な複数のメッセージ配信サーバ１０７Ａ−１０７Ｎを含む。全体としてメッセージ配信サーバ１０７Ａ−１０７Ｎは、１つ以上のクライアントデバイス１０１Ａ−１０１Ｎから送信されたメッセージを受信し、オブジェクトアップデートを表すメッセージを生成及び／又は受信し（もし該当するなら）、インタフェース計算エンティティ１０９及び／又はその他を介して適切なクライアントデバイス１０１Ａ−１０１Ｎへメッセージを送信するよう構成される。
【００５０】
同様に、インタフェース計算エンティティ１０９（又は複数のインタフェース計算エンティティ１０９）は、当該技術分野で知られているように、コンピュータ又はコンピュータ群として実現され得る。図１の図示された実施形態では、インタフェース計算エンティティ１０９は、クライアントデバイス１０１Ａ−１０１Ｎ（例えば通信ネットワーク１０３を通じたウェブソケット通信を介して）及び／又はメッセージ配信サーバ１０７Ａ−１０７Ｎ（例えばバックエンド通信を介して）を含むがこれらには限定されない、さまざまなソースから電子データを受信することを提供する。さらに図示された実施形態のインタフェース計算エンティティ１０９は、１つ以上の電子メッセージの一部として提供されたメタデータをパースし、電子メッセージに関連付けられたメタデータのコンテンツの少なくとも一部に基づいて、インカミング電子メッセージを１つ以上のメッセージ配信サーバ１０７Ａ−１０７Ｎに仕向け、及び／又は電子メッセージに関連付けられたメタデータのコンテンツに少なくとも一部は基づいて、アウトバウンド電子メッセージを１つ以上のクライアントデバイス１０１Ａ−１０１Ｎに仕向けるようにも構成される。
【００５１】
クライアントデバイス１０１Ａ−１０１Ｎは、上で定義された任意の計算デバイスであり得る。インタフェース計算エンティティ１０９を介してメッセージ配信サーバ１０７Ａ−１０７Ｎ及びクライアントデバイス１０１Ａ−１０１Ｎの間でやりとりされる電子メッセージデータは、さまざまな形態においてさまざまな方法を介して提供され得る。
【００５２】
ある好ましい非限定的な実施形態では、１つ以上のクライアントデバイス１０１Ａ−１０１Ｎは、スマートフォン又はタブレットのようなモバイルデバイスである。１つ以上のクライアントデバイスは、メッセージ配信サーバ１０７Ａ−１０７Ｎ及び／又はインタフェース計算エンティティ１０９と相互作用するために「アプリ」を実行し得る。そのようなアプリは、スマートフォン又はタブレットのようなモバイルデバイス上で動作するように典型的には設計されている。例えば、アプリは、Apple Inc.のiOS（登録商標）、Google Inc.のAndroid（登録商標）、又はMicrosoft Inc.のWindows 10 Mobile（登録商標）のようなモバイルデバイスオペレーティングシステム上で動作するよう提供され得る。これらプラットフォームは、アプリが互いに、及びモバイルデバイスの特定のハードウェア及びソフトウェア要素と通信することを可能にするフレームワークを典型的には提供する。例えば、上で挙げられたモバイルデバイスオペレーティングシステムは、それぞれ、位置サービス回路、有線及び無線ネットワークインタフェース、ユーザコンタクト、及び他のアプリケーションと相互作用するためのフレームワークを提供する。アプリの外で動作するハードウェア及びソフトウェアモジュールとの通信は、モバイルデバイスオペレーティングシステムによって提供されるアプリケーションプログラミングインタフェース（ＡＰＩ）を介して典型的には提供される。よって、クライアントデバイス１０１Ａ−１０１Ｎ上で動作するアプリを介して、これらクライアントデバイス１０１Ａ−１０１Ｎは、１つ以上のウェブソケットを介して、グループベース通信プラットフォーム１０５と通信するよう構成される。
【００５３】
ある好ましい非限定的な実施形態では、クライアントデバイス１０１Ａ−１０１Ｎは、メッセージ配信サーバ１０７Ａ−１０７Ｎ及び／又はインタフェース計算エンティティ１０９とウェブブラウザを介して相互作用し得る。クライアントデバイス１０１Ａ−１０１Ｎは、メッセージ配信サーバ１０７Ａ−１０７Ｎ及び／又はインタフェース計算エンティティ１０９と相互作用するよう設計されたさまざまなハードウェア又はファームウェアも含み得る。再び、クライアントデバイス１０１Ａ−１０１Ｎのブラウザを介して、クライアントデバイス１０１Ａ−１０１Ｎは、１つ以上のウェブソケットを介してグループベース通信プラットフォーム１０５と通信するよう構成される。
【００５４】
例示的グループベース通信プラットフォーム１０５のある実施形態では、メッセージ又はメッセージング通信は、クライアントデバイス１０１Ａ−１０１Ｎからグループベース通信プラットフォーム１０５に送られ得る。さまざまな実現例において、メッセージは、クライアントデバイス１０１Ａ−１０１Ｎのうちの１つによって直接に、通信ネットワーク１０３を通じてグループベース通信プラットフォーム１０５に送られ得る。メッセージは、メッセージサーバ及び／又はその他のような媒介を介してグループベース通信プラットフォーム１０５に送られ得る。例えば、クライアントデバイス１０１Ａ−１０１Ａは、デスクトップ、ラップトップ、タブレット、スマートフォン、及び／又はクライアントアプリケーションを実行しているもの（例えばグループベース通信アプリ）であり得る。ある実現例では、メッセージは、メッセージ識別子、送信ユーザ識別子、グループ識別子、グループベース通信チャネル識別子、メッセージコンテンツ（例えばテキスト、絵文字、画像、リンク）、添付物（例えばファイル）、メッセージ階層データ（例えばそのメッセージは、他のメッセージの応答であり得る）、サードパーティメタデータ、及び／又はその他のようなデータを含み得る。ある実施形態では、クライアントデバイス１０１Ａ−１０１Ｎは、エクステンシブルマークアップランゲージ（「ＸＭＬ」）でフォーマットされたデータを含む、以下に示される（セキュア）ハイパーテキストトランスファプロトコル（「ＨＴＴＰ（Ｓ）」）ＰＯＳＴメッセージの形態を実質的にとる、以下の例示的メッセージを提供し得る。
【００５５】
POST /authrequest.php HTTP/1.1
Host: www.server.com
Content-Type: Application/XML
Content-Length: 667
<?XML version = “1.0” encoding = “UTF-8”?>
<auth_request>
<timestamp>2020-12-31 23:59:59</timestamp>   
<user_accounts_details>
<user_account_credentials>
<user_name>ID_user_1</user_name>
<password>abc123</password>
//OPTIONAL <cookie>cookieID</cookie>
//OPTIONAL <digital_cert_link>www.mydigitalcertificate.com/ JohnDoeDaDoeDoe@gmail.com/mycertifcate.dc</digital_cert_link>
//OPTIONAL <digital_certificate>_DATA_</digital_certificate>
</user_account_credentials>
</user_accounts_details>
<client_details> //iOS Client with App and Webkit
//it should be noted that although several client details
//sections are provided to show example variants of client
//sources, further messages will include only on to save
//space
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53</user_agent_string>
<client_product_type>iPhone6,1</client_product_type>
<client_serial_number>DNXXX1X1XXXX</client_serial_number>
<client_UDID>3XXXXXXXXXXXXXXXXXXXXXXXXD</client_UDID>
<client_OS>iOS</client_OS>
<client_OS_version>7.1.1</client_OS_version>
<client_app_type>app with webkit</client_app_type>
<app_installed_flag>true</app_installed_flag>
<app_name>MSM.app</app_name>
<app_version>1.0 </app_version>
<app_webkit_name>Mobile Safari</client_webkit_name>
<client_version>537.51.2</client_version>
</client_details>
<client_details> //iOS Client with Webbrowser
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53</user_agent_string>
<client_product_type>iPhone6,1</client_product_type>
<client_serial_number>DNXXX1X1XXXX</client_serial_number>
<client_UDID>3XXXXXXXXXXXXXXXXXXXXXXXXD</client_UDID>
<client_OS>iOS</client_OS>
<client_OS_version>7.1.1</client_OS_version>
<client_app_type>web browser</client_app_type>
<client_name>Mobile Safari</client_name>
<client_version>9537.53</client_version>
</client_details>
<client_details> //Android Client with Webbrowser
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Nexus S Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30</user_agent_string>
<client_product_type>Nexus S</client_product_type>
<client_serial_number>YXXXXXXXXZ</client_serial_number>
<client_UDID>FXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX</client_UDID>
<client_OS>Android</client_OS>
<client_OS_version>4.0.4</client_OS_version>
<client_app_type>web browser</client_app_type>
<client_name>Mobile Safari</client_name>
<client_version>534.30</client_version>
</client_details>
<client_details> //Mac Desktop with Webbrowser
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14</user_agent_string>
<client_product_type>MacPro5,1</client_product_type>
<client_serial_number>YXXXXXXXXZ</client_serial_number>
<client_UDID>FXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX</client_UDID>
<client_OS>Mac OS X</client_OS>
<client_OS_version>10.9.3</client_OS_version>
<client_app_type>web browser</client_app_type>
<client_name>Mobile Safari</client_name>
<client_version>537.75.14</client_version>
</client_details>
<message>
<message_identifier>ID_message_10</message_identifier>
<team_identifier>ID_team_1</team_identifier>
<channel_identifier>ID_channel_1</channel_identifier>
<contents>That is an interesting invention. I have attached a copy our patent policy.</contents>
<attachments>patent_policy.pdf</attachments>
</message>
</auth_request>
図示された実施形態では、グループベース通信プラットフォーム１０５は、チャネル識別子及び／又はグループ識別子によって特定されたチャネル内の複数のクライアントデバイス１０１Ａ−１０１Ｎの間で及び／又はそれら複数のクライアントデバイス１０１Ａ−１０１Ｎに送信されたメッセージを受信及び／又は配布（disseminate）し、通信チャネルのメンバーシップを集合的に形成するクライアントデバイス１０１Ａ−１０１Ｎの間でのこれらメッセージの配布を促進するよう構成された複数のメッセージ配信サーバ１０７Ａ−１０７Ｎを備える。
【００５６】
ある実施形態では、上で規定されたオブジェクト識別子は、特定のメッセージが特定のオブジェクトに関連するオブジェクトアップデートとして実現されることを示すよう、メッセージと関連付けられ得る。
【００５７】
ある実施形態では、応答を示すデータは、そのメッセージと関連付けられ得る。例えば、他のユーザによるメッセージへの応答は、反応（例えばメッセージに関連付けられた絵文字の選択、メッセージに関連付けられた「いいね」ボタンの選択）、メッセージに埋め込まれたハイパーリンクをクリックすること、メッセージへ応答すること（例えばメッセージに応答してグループベース通信チャネルインタフェースにメッセージをポストすること）、メッセージに関連付けられたファイルをダウンロードすること、あるグループベース通信チャネルから他のグループベース通信チャネルへメッセージをシェアすること、メッセージをピン留めすること、メッセージに星を付けること、及び／又はその他を含み得る。ある実施形態では、他のユーザによるメッセージへの応答に関するデータは、メッセージに含まれ得て、そのメッセージは、応答を決定するためにパースされ得る（例えばＰＨＰコマンドを用いて）。他の実現例では、メッセージへの応答に関するデータは、データベースから取り出され得る。例えば、応答に関するデータは、以下のようなMySQLデータベースコマンドを介して取り出され得る。
【００５８】
SELECT messageResponses
FROM MSM_Message
WHERE messageID = ID_message_10.
例えば、メッセージへの応答に関するデータは、メッセージについてのコンテキスト（例えばメッセージについての、あるユーザの視点からのソーシャルスコア）を決定するのに用いられ得る。他の例では、メッセージへの応答に関連するデータは、ユーザに関するコンテキストを決定するために分析され得る（例えばあるトピックにおけるユーザの経験は、そのトピックに関するユーザのメッセージに対する応答に基づいて決定され得る）。
【００５９】
実施形態において、添付物は、メッセージに含まれ得る。もし添付物が存在するなら、ファイルは、メッセージと関連付けられ得て、ある実施形態では、これらファイルは、対応するオブジェクト識別子を有するオブジェクトとして分離して特定され得る。ある実現例では、メッセージは、添付物のファイル名を決定するためにパースされ得る（例えばＰＨＰコマンドを用いて）。例えば、ファイルコンテンツは、メッセージについてのコンテキストを決定するために分析され得る（例えば特許ポリシーの文書は、そのメッセージが「特許」というトピックに関連付けられていると表示し得る）。
【００６０】
実施形態において、会話プリミティブ（conversation primitive）は、メッセージと関連付けられ得る。ある実施形態では、会話プリミティブは、メッセージを分析し、インデックス付けし、記憶し、及び／又はその他をするのに用いられる要素である。例えば、メッセージは、それ自身で分析され得て、それ自身の会話プリミティブを形成し得る。他の例では、メッセージは、会話を構成する他のメッセージと共に分析され得て、会話を構成するメッセージは、会話プリミティブを形成し得る。ある実現例では、会話プリミティブは、当該メッセージ、特定の個数（例えば２）の先行するメッセージ及び特定の個数（例えば２）の後続するメッセージとして決定され得る。他の実現例では、会話プリミティブは、当該メッセージ及び他のメッセージで議論されているトピック及び／又はこれらメッセージの近接性（例えばメッセージ送信順序の近接性、メッセージ送信時刻の近接性）の分析に基づいて決定され得る。
【００６１】
実施形態においては、上で説明されたように決定されたさまざまなメタデータ及び／又はメッセージのコンテンツは、メッセージをインデックス化し（例えば会話プリミティブを用いて）、及び／又はサーチングのさまざまなファセット（すなわちメッセージ配信サーバ１０７から結果を返すサーチクエリ）を促進するために用いられ得る。メッセージ配信サーバ１０７Ａ−１０７Ｎにおいて、メッセージに関連付けられたメタデータが求められ得て、メッセージはインデックス化され得る。ある実施形態において、メッセージは、会社の又はグループのメッセージが別個にインデックス化されるようにインデックス化され得る（例えば他のグループ及び／又は会社とシェアされていないグループ及び／又は会社に関連付けられた別個のインデックスにおいて）。ある実現例では、メッセージは、別個の分散化されたリポジトリにおいてインデックス化され得る（例えばセキュリティの目的のためにデータ隔離を促進するために）。もしメッセージに関連付けられた添付物が存在するなら、その関連付けられたファイルのファイルコンテンツは、サーチングを促進するために、メッセージ配信サーバ１０７Ａ−１０７Ｎにおいてそのようなファイルをインデックス化するために用いられ得る。ある実施形態においては、ファイルは、別個の配信リポジトリにおいて会社の又はグループのファイルがインデックス化されるように、インデックス化され得る。
【００６２】
１つ以上のクライアントデバイス１０１Ａ−１０１Ｎ及びグループベース通信プラットフォーム１０５の間での電子情報交換の例は、図１を参照して以下に説明される。
【００６３】
図１に示されるように、グループベース通信プラットフォーム１０５は、個々のクライアントデバイス１０１Ａ−１０１Ｎが、さまざまなメッセージを互いに交換し、及び／又はグループベース通信プラットフォーム１０５から配布されたオブジェクトアップデートを取り出すことができるようにする。そのようなメッセージを交換するために、個別のクライアントデバイス１０１Ａ−１０１Ｎは、メッセージ（例えばテキストベースのメッセージ、ファイル、ビデオ及び／又はオーディオストリーム、及び／又はその他）を通信プロトコル（例えばウェブソケット、非ＲＴＭ（非リアルタイムメッセージング）メッセージングプロトコル、及び／又はその他）を介してインタフェース（例えばインタフェース計算エンティティ１０９）に送信する。これらメッセージは、１つ以上のメッセージ配信サーバ１０７Ａ−１０７Ｎに究極的には提供され、これがメッセージをインデックス化し、これらメッセージをメッセージの意図された受信者（例えばクライアントデバイス１０１Ａ−１０１Ｎ）に配信する。オブジェクトアップデートは、メッセージ配信サーバ１０７Ａ−１０７Ｎに同様に提供されるが、そのようなオブジェクトアップデートは、クライアントデバイス１０１Ａ−１０１Ｎから発生していないかもしれない。むしろオブジェクトアップデートは、１つ以上の外部システム（例えばファイル管理システム）から提供されてもよく、又はオブジェクトアップデートは、グループベース通信プラットフォーム１０５内の１つ以上の計算エンティティによって生成されてもよい。配信されたメッセージは、インタフェース計算エンティティ１０９を介して受信者クライアントデバイス１０１Ａ−１０１Ｎに提供され、このエンティティは、メッセージの個別の受信者クライアントデバイス１０１Ａ−１０１Ｎとのウェブソケット接続を維持し、さまざまなメッセージ配信サーバ１０７Ａ−１０７Ｎとの１つ以上のバックエンド接続を維持する。
【００６４】
図１の実施形態によれば、クライアントデバイス１０１Ａ−１０１Ｎは、クライアントデバイス１０１Ａ−１０１Ｎのユーザに利用可能なコンテキスト上関連するユーザインタフェースにおいて、受信されたメッセージを表示するよう構成される。例えば、グループベース通信チャネルの一部として第１クライアントデバイス１０１から送信されたメッセージは、そのグループベース通信チャネルの他のメンバに関連付けられたクライアントデバイス１０１Ａ−１０１Ｎ上のユーザインタフェースディスプレイウィンドウ内で表示される。ここで説明されるように、特定のオブジェクトアップデートを示すメッセージは、受信者クライアントデバイス１０１Ａ−１０１Ｎによって使用可能なオブジェクト識別子と共に送信されることによって、これらメッセージを、適切なユーザディスプレイ要素のような適切なコンテキストと共に、及び／又は適用可能なオブジェクトと関連させて表示する。さらに、オブジェクト識別子は、ここで説明されるように、オブジェクトサブスクリプションに基づいて特定のクライアントデバイス１０１Ａ−１０１Ｎに仕向けられたメッセージをフィルタリングするために、メッセージ配信サーバ１０７Ａ−１０７Ｎのうちのさまざまなものによって使用可能であり得る。
【００６５】
個別のクライアントデバイス１０１Ａ−１０１Ｎにメッセージを配信するために、メッセージは、メッセージ配信サーバ１０７Ａ−１０７Ｎからインタフェース計算エンティティ１０９に送信され、これは、クライアントデバイス１０１Ａ−１０１Ｎのそれぞれに仕向けられた全てのメッセージを仕向け、これらメッセージの全てを適切な接続（例えばウェブソケット接続）を通じてクライアントデバイス１０１Ａ−１０１Ｎに送信する。
【００６６】
さまざまな実施形態で利用される例示的装置
それぞれのメッセージ配信サーバ１０７は、図２に示される装置２００のような１つ以上の計算システムによって実現され得る。装置２００は、プロセッサ２０２、メモリ２０４、入力／出力回路２０６、通信回路２０８、及びメッセージ増幅器回路２１０を含み得る。装置２００は、図１−６についてここで説明された操作を実行するよう構成され得る。これら要素２０２−２１０は、機能的な限定について記載されているが、具体的な実現例は、特定のハードウェアの使用を必然的に含むことを理解されたい。これらの要素２０２−２１０のいくつかは、同様の又は共通のハードウェアも含み得ることも理解されたい。例えば、回路のうちの２つのセットが同じプロセッサ、ネットワークインタフェース、記憶媒体等の使用を活用することで、それらの関連付けられた機能を実行し、重複するハードウェアが回路群のそれぞれのセットごとには必要がないようにする。
【００６７】
ある実施形態においては、プロセッサ２０２（及び／又はコプロセッサ又はプロセッサを補助する又はそうでなければプロセッサに関連付けられた任意の他の処理回路）は、装置の要素の間で情報を受け渡しをするためにバスを介してメモリ２０４と通信し得る。メモリ２０４は、非一時的であり、例えば１つ以上の揮発性及び／又は不揮発性メモリを含み得る。換言すれば、例えばメモリ２０４は、電子記憶装置（例えばコンピュータで読み取り可能な記憶媒体）であり得る。メモリ２０４は、この装置が、本発明の例示的実施形態に従ってさまざまな機能を実行できるようにするために、情報、データ、コンテンツ、アプリケーション、命令等を記憶するよう構成され得る。
【００６８】
プロセッサ２０２は、いくつかの異なるやり方で実現され得て、例えば独立して実行するよう構成された１つ以上の処理装置を含み得る。ある好ましく非限定的な実施形態では、プロセッサ２０２は、命令の独立した実行、パイプライン処理、及び／又はマルチスレッディングを可能にするようにバスを介して並列に構成された１つ以上のプロセッサを含み得る。「処理回路」という語の使用は、装置の内部にあるシングルコアプロセッサ、マルチコアプロセッサ、マルチプロセッサ、及び／又はリモートつまり「クラウド」プロセッサを含むと理解されよう。
【００６９】
いくつかの好ましい非限定的な実施形態においては、プロセッサ２０２は、メモリ２０４に記憶された又はそうでなければプロセッサ２０２にアクセス可能である命令を実行するよう構成され得る。ある好ましい非限定的な実施形態においては、プロセッサ２０２は、ハードコードされた機能を実行するよう構成され得る。よってハードウェア又はソフトウェアのいずれの方法によって構成されようとも、又はそれらの組み合わせによって構成されようとも、プロセッサ２０２は、そのように構成されている間は、本発明の実施形態による操作を実行することができるエンティティ（例えば回路として物理的に実現される）を表し得る。代替として、他の例として、プロセッサ２０２がソフトウェア命令の実行者として実現される時、これら命令は、命令が実行される時にプロセッサ２０２がここに記載されたアルゴリズム及び／又は操作を実行するようにプロセッサ２０２を具体的に構成し得る。
【００７０】
一つの例として、プロセッサ２０２は、複数のクライアントデバイス１０１Ａ−１０１Ｎを接続する１つ以上の通信チャネルを維持することによって、それらの間でメッセージの共有／配布を可能にするよう構成され得る。プロセッサ２０２は、特定の通信チャネル内のクライアントデバイス１０１Ａ−１０１Ｎの間でのやりとりが意図されたメッセージが、クライアントデバイス１０１Ａ−１０１Ｎを介して提供されたそれぞれのディスプレイウィンドウ内で表示されるように、それらクライアントデバイス１０１Ａ−１０１Ｎに適切に配布されることを確実にする。
【００７１】
さらに、プロセッサ２０２は、特定の通信チャネルでやりとりされたメッセージを、その中でのメッセージの記憶及び／又はインデキシングのためにデータベースと同期化するよう構成され得る。ある実施形態では、プロセッサ２０２は、クライアントデバイス１０１Ａ−１０１Ｎへの配布のために、記憶された及び／又はインデキシングされたメッセージをインタフェース計算エンティティ１０９に提供し得る。
【００７２】
ある実施形態においては、装置２００は、入力／出力回路２０６を含み得て、これが今度は、出力をユーザに提供するために、またある実施形態では、ユーザ入力の表示を受け取るためにプロセッサ２０２と通信し得る。入力／出力回路２０６は、ユーザインタフェースを備え得て、ディスプレイを含み得て、ウェブユーザインタフェース、モバイルアプリケーション、クライアントデバイス、キオスク等を備え得る。ある実施形態では、入力／出力回路２０６は、キーボード、マウス、ジョイスティック、タッチスクリーン、タッチエリア、ソフトキー、マイクロホン、スピーカ、又は他の入力／出力機構を含み得る。プロセッサを備えるプロセッサ及び／又はユーザインタフェース回路は、プロセッサにアクセス可能であるメモリ（例えばメモリ２０４及び／又はその他）上に記憶されたコンピュータプログラム命令（例えばソフトウェア及び／又はファームウェア）を通して１つ以上のユーザインタフェース要素の１つ以上の機能を制御するよう構成され得る。
【００７３】
通信回路２０８は、装置２００と通信するネットワーク及び／又は任意の他のデバイス、回路、又はモジュールから／へデータを受信及び／又は送信するよう構成される、ハードウェアか、ハードウェア及びソフトウェアの組み合わせかのいずれかで実現されるデバイス又は回路のような任意の手段であり得る。この点で、通信回路２０８は、有線又は無線の通信ネットワークとの通信を可能にするネットワークインタフェースを例えば含み得る。例えば、通信回路２０８は、１つ以上のネットワークインタフェースカード、アンテナ、バス、スイッチ、ルータ、モデム、及びサポートするハードウェア及び／又はソフトウェア、又はネットワークを介した通信を可能にするのに適切な任意の他のデバイスを含み得る。追加として又は代替として、通信回路２０８は、アンテナ／アンテナ群を介した送信を行うために、又はアンテナ／アンテナ群を介して受け取られた信号の受信を扱うために、アンテナ／アンテナ群と相互作用するための回路を含み得る。
【００７４】
メッセージ増幅器回路２１０は、１つ以上のクライアントデバイス１０１Ａ−１０１Ｎから他のクライアントデバイス１０１Ａ−１０１Ｎに受け取られた電子メッセージ及び関連付けられたメタデータをデータベースシャード（群）に基づいてコピー及び増幅するよう構成されたハードウェアを含む。メッセージ増幅器回路２１０は、これらのアクションを実行するためにプロセッサ２０２のような処理回路を利用し得る。しかし、ある実施形態では、メッセージ増幅器回路２１０は、ここで記載された機能を実行するための別個のプロセッサ、特別に構成されたフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は特定用途向け集積回路（ＡＳＩＣ）を含み得ることも理解されたい。メッセージ増幅器回路２１０は、これらの設計された機能を実現するハードウェア又はソフトウェアのいずれかによって構成された装置のハードウェア要素を用いて実現され得る。
【００７５】
ここで説明されている情報のうちの全て又は一部は、装置２００の１つ以上の要素によって受信され、生成され、及び／又は保持されているデータに基づき得る。ある実施形態では、ここで説明されている機能のうちの少なくとも一部を提供するために、１つ以上の外部システム（リモートクラウドコンピューティング及び／又はデータストレージシステムのような）も活用され得る。
【００７６】
図３の図示された実施形態においては、インタフェース計算エンティティ１０９は、装置３００を包含する１つ以上の計算システムによって実現される。図示された装置３００は、プロセッサ３０１、メモリ３０３、入力／出力回路３０５、及び通信回路３０７を含む。装置３００は、図１−６について説明された操作を実行するよう構成され得る。これらの要素３０１−３０７は、機能的限定について説明されているが、具体的な実現例は、特定のハードウェアの使用を必然的に含むことを理解されたい。これら要素３０１−３０７のあるものは、同様又は共通のハードウェアを含み得ることも理解されたい。例えば、２セットの回路は、同じプロセッサ、ネットワークインタフェース、記憶媒体等の使用を共に活用し得て、それらの関連付けられた機能を実行することで、重複するハードウェアが回路のそれぞれのセットについて必要ではなくなるようにできる。
【００７７】
ある実施形態では、プロセッサ３０１（及び／又はコプロセッサ又はプロセッサを補助する又はそうでなければプロセッサに関連付けられた任意の他の処理回路）は、装置の要素の間で情報を受け渡しをするためにバスを介してメモリ３０３と通信し得る。メモリ３０３は、非一時的であり、例えば１つ以上の揮発性及び／又は不揮発性メモリを含み得る。換言すれば、例えばメモリ３０３は、電子記憶装置（例えばコンピュータで読み取り可能な記憶媒体）であり得る。メモリ３０３は、この装置が、本発明の例示的実施形態に従ってさまざまな機能を実行できるようにするために、情報、データ、コンテンツ、アプリケーション、命令等を記憶するよう構成され得る。例えば、メモリ３０３は、１つ以上のグループベース通信チャネル上でやりとりされるメッセージをキャッシュすることによって、プロセッサ３０１がさまざまなメッセージをクライアントデバイスに提供し得る（例えば必要に応じて又はリクエストされた場合に）よう構成され得る。
【００７８】
プロセッサ３０１は、いくつかの異なるやり方で実現され得て、例えば独立して実行するよう構成された１つ以上の処理装置を含み得る。ある好ましく非限定的な実施形態では、プロセッサ３０１は、命令の独立した実行、パイプライン処理、及び／又はマルチスレッディングを可能にするようにバスを介して並列に構成された１つ以上のプロセッサを含み得る。
【００７９】
いくつかの好ましい非限定的な実施形態においては、プロセッサ３０１は、メモリ３０３に記憶された又はそうでなければプロセッサ３０１にアクセス可能である命令を実行するよう構成され得る。ある好ましい非限定的な実施形態においては、プロセッサ３０１は、ハードコードされた機能を実行するよう構成され得る。よってハードウェア又はソフトウェアのいずれの方法によって構成されようとも、又はそれらの組み合わせによって構成されようとも、プロセッサ３０１は、そのように構成されている間は、本発明の実施形態による操作を実行することができるエンティティ（例えば回路として物理的に実現される）を表し得る。代替として、他の例として、プロセッサ３０１がソフトウェア命令の実行者として実現される時、これら命令は、命令が実行される時にプロセッサ３０１がここに記載されたアルゴリズム及び／又は操作を実行するようにプロセッサ３０１を具体的に構成し得る。
【００８０】
ある実施形態においては、装置３００は、入力／出力回路３０５を含み得て、これが今度は、出力をユーザに提供するために、またある実施形態では、ユーザ入力の表示を受け取るためにプロセッサ３０１と通信し得る。入力／出力回路３０５は、ユーザインタフェースを備え得て、ディスプレイを含み得て、ウェブユーザインタフェース、モバイルアプリケーション、クライアントデバイス、キオスク等を備え得る。ある実施形態では、入力／出力回路３０５は、キーボード、マウス、ジョイスティック、タッチスクリーン、タッチエリア、ソフトキー、マイクロホン、スピーカ、又は他の入力／出力機構も含み得る。
【００８１】
通信回路３０７は、装置３００と通信するネットワーク及び／又は任意の他のデバイス、回路、又はモジュールから／へデータを受信及び／又は送信するよう構成される、ハードウェアか、ハードウェア及びソフトウェアの組み合わせかのいずれかで実現されるデバイス又は回路のような任意の手段であり得る。この点で、通信回路３０７は、有線又は無線の通信ネットワークとの通信を可能にするネットワークインタフェースを例えば含み得る。例えば、通信回路３０７は、１つ以上のネットワークインタフェースカード、アンテナ、バス、スイッチ、ルータ、モデム、及びサポートするハードウェア及び／又はソフトウェア、又はネットワークを介した通信を可能にするのに適切な任意の他のデバイスを含み得る。追加として又は代替として、通信回路３０７は、アンテナ／アンテナ群を介した送信を行うために、又はアンテナ／アンテナ群を介して受け取られた信号の受信を扱うために、アンテナ／アンテナ群と相互作用するための回路を含み得る。
【００８２】
ここで説明されている情報のうちの全て又は一部は、装置３００の１つ以上の要素によって受信され、生成され、及び／又は保持されているデータに基づき得る。ある実施形態では、ここで説明されている機能のうちの少なくとも一部を提供するために、１つ以上の外部システム（リモートクラウドコンピューティング及び／又はデータストレージシステムのような）も活用され得る。
【００８３】
さらに、インタフェース計算エンティティ１０９は、グループベース通信プラットフォーム１０５の境界の中で示されているが、インタフェース計算エンティティ１０９は、通信ネットワーク１０３を介してグループベース通信プラットフォーム１０５の局面と通信するエッジベース計算デバイスとして実現され得ることを理解されたい。そのような実施形態は、地理的に分散されている複数のインタフェース計算エンティティ１０９を備え得て、そのようなインタフェース計算エンティティ１０９は、それぞれのインタフェース計算エンティティ１０９に近接した地理的範囲内にあるクライアントデバイス１０１Ａ−１０１Ｎと通信するよう構成され得る。
【００８４】
「回路」という語は、ハードウェア、及び、ある実施形態においてはハードウェアを設定するためのソフトウェアを含むように広く理解されるべきである。したがって、それぞれの装置２００，３００の要素について、ここで用いられる「回路」という語は、ここで記載される特定の回路に関連付けられた機能を実行するよう構成された特定のハードウェアを含むように理解されるべきである。例えば、ある実施形態では、「回路」は、処理回路、記憶媒体、ネットワークインタフェース、入力／出力デバイス等を含み得る。ある実施形態では、装置２００の他の要素は、特定の回路の機能を提供又は補充し得る。例えば、プロセッサ２０２は、処理機能を提供し得て、メモリ２０４は、記憶機能を提供し得て、通信回路２０８は、ネットワークインタフェース機能を提供し得る等である。同様に、装置３００の他の要素は、特定の回路の機能を提供又は補充し得る。例えば、プロセッサ３０１は、処理機能を提供し得て、メモリ３０３は、記憶機能を提供し得て、通信回路３０７は、ネットワークインタフェース機能を提供し得る等である。
【００８５】
理解されるように、任意のそのようなコンピュータプログラム命令及び／又は他のタイプのコードは、コンピュータ、プロセッサ又は他のプログラム可能な装置の回路にロードされることによって、その機械上でコードを実行するコンピュータ、プロセッサ又は他のプログラム可能な回路が、ここで説明されるものを含むさまざまな機能を実現する手段を成すような機械が作り出される。
【００８６】
上に説明されたように、及び本開示に基づいて理解されるように、本発明の実施形態は、方法、モバイルデバイス、バックエンドネットワークデバイス等として構成され得る。したがって実施形態は、ハードウェアだけを含む、又はソフトウェア及びハードウェアの任意の組み合わせを含むさまざまな手段を備え得る。さらに、実施形態は、記憶媒体内に実現されたコンピュータ読み取り可能なプログラム命令（例えばコンピュータソフトウェア）を有する、少なくとも１つの非一時的コンピュータ読み取り可能な記憶媒体上のコンピュータプログラム製品の形態をとり得る。非一時的ハードディスク、ＣＤ−ＲＯＭ、フラッシュメモリ、光学記憶デバイス、又は磁気記憶デバイスを含む任意の適切なコンピュータ読み取り可能な記憶媒体が利用され得る。
【００８７】
さらに、示されていないが、グループベース通信プラットフォームのさまざまな実施形態は、さまざまなグループベース通信チャネル内でやりとりされたメッセージを記憶及び／又はインデキシングするよう構成された１つ以上のデータベースを備え得る。
【００８８】
例示的データフロー
図５−６は、個々のクライアントデバイス１０１Ａ−１０１Ｎ及びグループベース通信プラットフォーム１０５を示すフロー図である。上述のように、さまざまな実施形態は、グループベース通信プラットフォーム１０５が、オブジェクトアップデートについてのサブスクリプションベースのデータ送信スキームの使用を通してクライアントデバイス１０１Ａ−１０１Ｎに送信されるネットワークトラフィックの量を最小化できるようにする。これらサブスクリプションベースのデータ送信スキームは、クライアントデバイス１０１Ａ−１０１Ｎによるユーザアクティビティに基づいて動作することによって、クライアントデバイス１０１Ａ−１０１Ｎが、特定のオブジェクトが現在ユーザによって見られているか、又はそうでなければユーザの現在の関心の対象であると考えられていると判断されると、特定のオブジェクトのアップデートをサブスクライブするようリクエストし得る。クライアントデバイス１０１Ａ−１０１Ｎは、１つ以上のトリガイベントを利用することによって、サブスクライブリクエスト又はアンサブスクライブリクエストをいつ生成すべきかを決定し得る。
【００８９】
クライアントデバイスの動作
さまざまな実施形態によれば、個別のクライアントデバイス１０１Ａ−１０１Ｎは、それに対してオブジェクトアップデートを提供するためにグループベース通信プラットフォーム１０５からそれらクライアントデバイス１０１Ａ−１０１Ｎに送信されるネットワークトラフィックのレベルを求める。クライアントデバイス１０１Ａ−１０１Ｎは、ある種の定義されたトリガイベントの検出に依拠して、どのオブジェクトアップデートがグループベース通信プラットフォーム１０５から個別のクライアントデバイス１０１Ａ−１０１Ｎに送信されなければならないかを決定し、それらクライアントデバイス１０１Ａ−１０１Ｎは、オブジェクトアップデートについてクライアントデバイス１０１Ａ−１０１Ｎの決定された必要を反映させるために、サブスクライブリクエスト及びアンサブスクライブリクエストとして実現されるサブスクリプション変更リクエストの形態をとるデータをグループベース通信プラットフォーム１０５に提供する。個別のクライアントデバイス１０１Ａ−１０１Ｎは、ユーザによる使用を常にモニタすることによって、クライアントデバイス１０１Ａ−１０１Ｎのグラフィカルインタフェースとのユーザのインタラクションに基づいて、どのオブジェクトアップデートサブスクリプションが中止され、どのオブジェクトアップデートサブスクリプションが開始される必要があるかを決定するよう構成される。
【００９０】
図５は、グループベース通信プラットフォーム１０５に関連しリアルタイムでアップトゥデートなオブジェクトアップデートサブスクリプションを維持するために、例示的クライアントデバイス１０１によって実行されるさまざまなステップを図示する。ブロック５０１において示されるように、クライアントデバイス１０１は、クライアントデバイス１０１とのユーザインタラクションをモニタすることによって、ブロック５０２で示されるように、１つ以上のオブジェクトについてトリガイベントが起こったかを検出する。
【００９１】
トリガイベントは、クライアントデバイス１０１のユーザが特定のオブジェクトに関心を有することを示すさまざまなイベントのうちの任意のものであり得る。図４の例示的インタフェースの概略図を簡単に参照すれば、トリガイベントは、インタフェース内での特定のペインをスクロールすることによって、オブジェクトの表示がユーザインタフェースの可視部分の境界を横切って、隠れた部分４０３（例えばインタフェースの視野の外）から可視部分４０２（例えばインタフェースの視野の中）に動き、サブスクライブリクエストを開始し、又はその反対をすること（可視部分４０２から隠れた部分４０３への動き）でアンサブスクライブリクエストを開始することであり得る。他の例として、トリガイベントは、あるディスプレイと他のディスプレイとの間で移動することであり得る（例えばクライアントデバイスに、新しく選択されたディスプレイ内の１つ以上のオブジェクトについてサブスクライブリクエストを開始するようにし、クライアントデバイスに、選択されていないディスプレイ内の１つ以上のオブジェクトについてアンサブスクライブリクエストを開始するようにさせること）。その中に１つ以上のオブジェクトを有するチャネルを選択すること、オブジェクトの統合されたリスティングを選択すること、クライアントデバイスにおいて特定のデータタイプを受信する（例えばウェブソケット接続、ＲＴＭ接続、及び／又はその他を介して）こと、及び／又はその他のような、他のトリガイベントは、サブスクリプション変更リクエストを開始するのに利用され得るトリガイベントのさらなる例である。
【００９２】
図５を再び参照して、サブスクライブリクエストを開始するためのトリガイベントを検出すると、クライアントデバイス１０１は、ブロック５０３で示されるように、そのようなサブスクライブリクエストを生成する。これらサブスクライブリクエスト（後述するアンサブスクライブリクエストと共に）は、トリガイベントの発生が検出されると生成されるので、クライアントデバイス１０１は、サブスクリプション変更リクエストを動的に生成することによって、メッセージ配信サーバ１０７Ａ−１０７Ｎが、クライアントデバイス１０１についてのサブスクリプションリスティングを備えるアップトゥデートなサブスクリプションデータを保持するよう構成される。サブスクリプション変更リクエストの動的生成を通して、クライアントデバイス１０１は、クライアントデバイス１０１（及びクライアントデバイスのユーザ）にとって現在関心がある特定のオブジェクトに関連するオブジェクトアップデートだけがクライアントデバイス１０１に送信されることを確実にする。これは、グループベース通信プラットフォーム１０５及びクライアントデバイス１０１の間で送信されるオブジェクトアップデートデータの量を最小化する。
【００９３】
ある実施形態では、サブスクライブリクエストは、リクエスト識別子（レスポンスを最初のリクエストと一致させるためにあとで利用され得る）、サブスクライブタイプ（例えばどのようにリクエスト／レスポンスがクライアントデバイス１０１及びメッセージ配信サーバ１０７Ａ−１０７Ｎの間でルーティングされるかを示し得る、及び／又はサブスクライブリクエストがどのタイプのオブジェクトに関連するかを示し得る）、及びサブスクリプションがリクエストされるオブジェクト及び／又はそれらオブジェクトの他の特性を特定するサブスクリプションマップ（例えばバージョン識別子／番号）を備える。サブスクリプションマップは、さまざまな実施形態によるアレイにおいて提供され得る。ある実施形態では、サブスクリプションリクエストは、メッセージ配信サーバ１０７Ａ−１０７Ｎにおいて付加的であり、したがってサブスクリプションマップは、サブスクリプションがリクエストされている新しいオブジェクトのリスティングだけを含み得る。サブスクリプションマップ内に含まれているリスティングは、ここで説明されるように、メッセージ配信サーバ１０７Ａ−１０７Ｎにおいて既存のリスティングに付加される。しかし、ある実施形態においては、サブスクリプションマップは、排他的であることによって、サブスクリプションマップは、メッセージ配信サーバ１０７Ａ−１０７Ｎにおいてサブスクリプションリクエストが受信されると、クライアントデバイス１０１によってサブスクライブされた既存のオブジェクトのリスティングを上書きし得ることを理解されたい。
【００９４】
ブロック５０４で示されるように、構築されたサブスクリプションリクエストは、グループベース通信プラットフォーム１０５に送信され、ここでそれは、記憶及び使用のために、メッセージ配信サーバ１０７Ａ−１０７Ｎに仕向けられる。図５では示されていないが、メッセージ配信サーバ１０７Ａ−１０７Ｎは、サブスクライブリクエストが成功／不成功だったことを示す別個のレスポンスを送信し得て、これは、任意のオブジェクトアップデートを受信する前にクライアントデバイス１０１によって受信され得る。そのような実施形態においては、クライアントデバイス１０１は、レスポンスがサブスクライブリクエストが不成功だったことを示す場合においては、新しいサブスクライブリクエストを生成し得る。
【００９５】
いったんサブスクライブリクエストがメッセージ配信サーバ１０７Ａ−１０７Ｎによって成功してアクセプトされたなら、メッセージ配信サーバ１０７Ａ−１０７Ｎは、クライアントデバイス１０１のローカルデータストレージエリア内に記憶されたオブジェクトデータが最新でないと判断すると（例えばクライアントデバイス１０１に記憶され、サブスクリプション変更リクエスト内で反映されたオブジェクトデータのバージョン識別子が、メッセージ配信サーバ１０７Ａ−１０７Ｎに記憶された最新のバージョン識別子と一致しないと判断すると）、オブジェクトアップデートをクライアントデバイス１０１に提供する。クライアントデバイス１０１は、ブロック５０５で示されるように、ローカルデータストレージエリア内のそれらのオブジェクトアップデートを受信及び記憶し、ブロック５０６で示されるように、クライアントデバイス１０１のグラフィカルディスプレイを介して表示されたそれらオブジェクトの視覚化インジケータに適切なアップデートを提供する。
【００９６】
再びブロック５０２を参照すれば、オブジェクトについてのアンサブスクライブトリガイベント（例えばオブジェクトをディスプレイの非可視部分に移動させること）を検出すると、クライアントデバイス１０１は、ブロック５０７で示されるように、アンサブスクライブリクエストを生成する。ある実施形態では、アンサブスクライブリクエストは、リクエスト識別子（レスポンスを最初のリクエストと一致させるためにあとで利用され得る）、アンサブスクライブタイプ（例えばどのようにリクエスト／レスポンスがクライアントデバイス１０１及びメッセージ配信サーバ１０７Ａ−１０７Ｎの間でルーティングされるかを示し得る、及び／又はアンサブスクライブリクエストがどのタイプのオブジェクトに関連するかを示し得る）、及びアンサブスクライブリクエストが関連するオブジェクトのリスティングを備える。オブジェクトのリスティングは、ある実施形態では、アレイにおいて提供され得る。いったんアンサブスクライブリクエストがクライアントデバイス１０１においてアセンブルされると、クライアントデバイス１０１は、ブロック５０８で示されるように、アンサブスクライブリクエストをグループベース通信プラットフォーム１０５に送信し、ここでそれは、摂取され、メッセージ配信サーバ１０７Ａ−１０７Ｎに提供される。
【００９７】
ある実施形態では、アンサブスクリプションリクエストは、メッセージ配信サーバ１０７Ａ−１０７Ｎにおいて付加的であり、したがってオブジェクトのリスティングは、アンサブスクライブリクエストが提供されている新しいオブジェクトのリスティングだけを含む。ある実施形態では、メッセージ配信サーバ１０７Ａ−１０７Ｎのデフォルト動作は、特定のオブジェクトについてアンサブスクライブ状態であり、したがってアンサブスクライブリクエストは、メッセージ配信サーバ１０７Ａ−１０７Ｎが、特定のクライアントデバイス１０１についてメッセージ配信サーバ１０７Ａ−１０７Ｎにおいて保持されているサブスクリプションリストからリストされたオブジェクトを除去するようにし得る。
【００９８】
ある実施形態においては、クライアントデバイス１０１をグループベース通信プラットフォーム１０５から切断すること及び／又は再接続することは、クライアントデバイス１０１を、クライアントデバイスのサブスクリプションリスト内に含まれる全てのサブスクリプションからアンサブスクライブするよう動作する（例えばクライアントデバイス１０１から送信された別個のアンサブスクライブリクエストのあるなしにかかわらず）。例えば、切断イベントの後に、クライアントデバイス１０１がグループベース通信プラットフォーム１０５に再接続されると、クライアントデバイス１０１は、切断イベントの前に存在した以前に確立されたサブスクリプションの全てについてのアンサブスクライブリクエストを生成及び送信し得る。他の例として、クライアントデバイス１０１がグループベース通信プラットフォーム１０５に再接続されると、メッセージ配信サーバ１０７Ａ−１０７Ｎは、クライアントデバイス１０１を、切断イベントの前に存在していた全ての以前に確立されたサブスクリプションから自動的にアンサブスクライブし得る。これは、クライアントデバイスのサブスクリプションリストの中に残っている任意の外部の（extraneous）サブスクリプションをクリーンアップするよう動作し得て、それによりクライアントデバイス１０１がグループベース通信プラットフォーム１０５と再接続する時に、関連するサブスクリプションだけが更新される。図５に関連して説明される方法に従って示されるように、再接続すると、クライアントデバイス１０１は、トリガイベントが検出される（例えばオブジェクトインジケータがディスプレイの視野の中にあることを検出すること及び／又はその他）オブジェクトについてだけ、サブスクリプションリクエストを生成する。
【００９９】
メッセージ配信サーバの動作
図６は、ある実施形態によるサブスクリプション変更リクエストについてメッセージ配信サーバ１０７Ａ−１０７Ｎによって実行されるステップの例示的セットを示す。ブロック６０１で示されるように、メッセージ配信サーバ１０７Ａ−１０７Ｎは、サブスクリプション変更リクエストを１つ以上のクライアントデバイス１０１Ａ−１０１Ｎから受信する。これらリクエストは、送信元クライアントデバイス１０１の身元を示すメタデータと共に受信され、それによってメッセージ配信サーバ１０７Ａ−１０７Ｎは、送信元クライアントデバイス１０１Ａ−１０１Ｎについてのサブスクリプションリストを適切にアップデートし得る。さらに、それらサブスクリプション変更リクエストは、リクエスト識別子（メッセージ配信サーバ１０７Ａ−１０７Ｎにおいて生成されたレスポンスを、クライアントデバイス１０１において生成された初期リクエストと関連付けるのに用いられ得る）、リクエストタイプ（例えば、中でも、そのリクエストがサブスクライブ又はアンサブスクライブリクエストのどちらであるか、及びどのタイプのオブジェクトにそのリクエストが関するのかを示し得る）、及びリクエストが関連するオブジェクトのリスティングを備えるアレイを備え得る。具体的な例として、リクエストタイプは、リクエストがファイルアップデートについてのサブスクライブリクエストであることを示し得て、含まれるアレイは、リクエストが関連する特定のファイル（群）を特定するデータを備え得る。さらに他の例として、リクエストは、そのリクエストがユーザアップデートについてのアンサブスクライブリクエストであることを示し得て、含まれるアレイは、そのリクエストが関連する特定のユーザ（群）を特定するデータを備え得る。オブジェクトアップデートは、アップデートが関連するオブジェクトのタイプ及びアップデートが関連するオブジェクトの身元を特定する１つ以上の識別子と共に配信サーバ１０７Ａ−１０７Ｎから送信されるので、リクエストの中に含まれるデータは、メッセージ配信サーバ１０７Ａ−１０７Ｎが、クライアントデバイス１０１Ａ−１０１Ｎに送信されたオブジェクトアップデートにフィルタを適用させるのに十分であり得る。
【０１００】
図６のブロック６０２で示されるように、メッセージ配信サーバ１０７Ａ−１０７Ｎは、クライアントデバイス１０１についてのサブスクリプションリストを、受け取られたサブスクリプション変更リクエストに基づいてアップデートする。上述のように、特定のクライアントデバイス１０１Ａ−１０１Ｎについてメッセージ配信サーバ１０７Ａ−１０７Ｎにおいて記憶されているサブスクリプションリストは付加的であり、それによりサブスクリプションリストをアップデートすることは、あるクライアントデバイスのサブスクリプションについて非重複的オブジェクトを、クライアントデバイスに固有のサブスクリプションリストに追加することを含む。
【０１０１】
ある実施形態においては、メッセージ配信サーバ１０７Ａ−１０７Ｎは、サブスクリプションリストをアップデートする前に、単一のクライアントデバイス１０１から受け取られたサブスクライブリクエスト及びアンサブスクライブリクエストを比較するよう構成され、それにより、サブスクリプションリストに対して正味の変化をきたさないであろうサブスクライブリクエスト及びアンサブスクライブリクエストの組み合わせは、サブスクリプションリストをアップデートする前にキャンセルされ得る。具体的な例として、もし既存のサブスクリプションリストが、クライアントデバイス１０１がオブジェクトＡをサブスクライブしていることを示すなら、メッセージ配信サーバ１０７Ａ−１０７Ｎは、オブジェクトＡに関連するアンサブスクライブリクエスト及びサブスクライブリクエストの両方をそれから受け取り、これらは全体としては、オブジェクトＡのアップデートへの連続したアンサブスクリプション（unsubscription）に続くリサブスクリプション（resubscription）を結果として生じ、メッセージ配信サーバ１０７Ａ−１０７Ｎは、これらリクエストをキャンセルし得るが、それは、アンサブスクライブ及びサブスクライブイベントの正味の結果は、オブジェクトＡについてのサブスクリプションの現状を維持することになるからである。
【０１０２】
さらにある実施形態においては、メッセージ配信サーバ１０７Ａ−１０７Ｎは、特定のクライアントデバイス１０１Ａ−１０１Ｎについて最大数の同時サブスクリプションを実現し得る。よって少なくとも実質的に同時のサブスクライブ及びアンサブスクライブリクエストを受信する時、メッセージ配信サーバ１０７Ａ−１０７Ｎは、サブスクライブリクエストに基づいて新しいサブスクリプションを追加する前に、アンサブスクライブリクエストに基づいて、サブスクリプションリストをアップデートするよう構成され得る。さらにそのような実施形態においては、メッセージ配信サーバ１０７Ａ−１０７Ｎは、最大許容数のサブスクリプションを超えるサブスクリプションの合計数になるようなサブスクライブリクエストを拒否するよう構成され得る。他の実施形態においては、メッセージ配信サーバ１０７Ａ−１０７Ｎは、サブスクリプションの合計数がサブスクリプションの最大数を超えるサブスクライブリクエストを拒否せずに、その代わりにクライアントデバイス１０１を、サブスクリプションリストの中の最も古いサブスクリプションから自動的にアンサブスクライブすることによって、サブスクライブリクエスト内の新しくリクエストされたサブスクリプションを含むサブスクリプションの合計数が、クライアントデバイス１０１のサブスクリプションの最大数と同じかそれ未満に維持されるようにし得る。
【０１０３】
アップデートされたサブスクリプションリストに基づいて、メッセージ配信サーバ１０７Ａ−１０７Ｎは、ブロック６０３に示されるように、オブジェクトアップデートをクライアントデバイス１０１Ａ−１０１Ｎに配布する。これらオブジェクトアップデートは、インタフェース計算エンティティ１０９を通して提供され得て、このエンティティは、それらオブジェクトアップデートを適切なクライアントデバイス１０１Ａ−１０１Ｎに渡すよう構成され得る。ある実施形態においては、例えば、切断から回復するためにクライアントデバイス１０１をグループベース通信プラットフォーム１０５に再接続した後に、メッセージ配信サーバ１０７Ａ−１０７Ｎは、全ての適切なオブジェクトアップデートがクライアントデバイス１０１に提供されることによって、オブジェクトアップデートを最新の状態にすることを確実にするようさらに構成され得る。
【０１０４】
さらに図６には不図示であるが、メッセージ配信サーバ１０７Ａ−１０７Ｎは、サブスクリプション変更リクエストが成功したか不成功だったかを示すメッセージを、クライアントデバイス１０１に送信するよう構成され得る。これらの応答するメッセージ（リクエスト識別子に基づいてオリジナルリクエストと関連付けられ得る）は、ある実施形態においては、任意のオブジェクトアップデートデータからは別個に送信され得る。他の実施形態においては、応答するメッセージは、クライアントデバイス１０１に送信されたオブジェクトアップデートメッセージに追加される（例えば連結される）ことによって、サブスクリプション変更リクエストが成功したという表示をクライアントデバイス１０１に提供し得る。
【０１０５】
ある実施形態においては、クライアントデバイス１０１において生成されたサブスクリプション変更リクエストは、グループベース通信プラットフォーム１０５からデータを受け取るためにクライアントデバイス１０１によって利用される特定の接続メカニズムついて固有である。例えば、クライアントデバイス１０１がグループベース通信プラットフォーム１０５を持つ１つ以上のウェブソケット接続を介してデータを受け取る実施形態においては、サブスクリプション変更リクエストは、１つ以上のウェブソケット接続のそれぞれについて独立してクライアントデバイス１０１において生成される。よってクライアントデバイス１０１及びグループベース通信プラットフォーム１０５が全体として複数のウェブソケット通信をそれらの間に維持する実施形態においては（例えば別個のディスプレイ、チャネル、及び／又はその他をサポートする）、それぞれのウェブソケット接続は、クライアントデバイス１０１から送信され、メッセージ配信サーバ１０７Ａ−１０７Ｎによって処理されたサブスクリプション変更リクエストに基づいて維持される対応するサブスクリプションリストを有し得る。
【０１０６】
さらにある実施形態においては、メッセージ配信サーバ１０７Ａ−１０７Ｎは、宛先クライアントデバイス１０１Ａ−１０１Ｎが１つ以上のメッセージを既に受信しているか、又はメッセージが依然としてそれらの宛先クライアントデバイス１０１Ａ−１０１Ｎに送信されなければならないかを決定するよう構成される。そのような機能は、通信切断の後のクライアントデバイス１０１Ａ−１０１Ｎ及びグループベース通信プラットフォーム１０５の間の再接続の間に特に関連し得る。そのような場合、メッセージ配信サーバ１０７Ａ−１０７Ｎは、クライアントデバイス１０１Ａ−１０１Ｎがそこに記憶されるアップトゥデートなメッセージを示すデータを有するためには、どのメッセージ（又は他のデータ）がクライアントデバイス１０１Ａ−１０１Ｎに送信されなければならないかを決定するよう構成され得る。例えばメッセージ配信サーバ１０７Ａ−１０７Ｎは、特定のオブジェクトについて特定のクライアントデバイス１０１Ａ−１０１Ｎに提供された最後のメッセージを示すデータ（例えばクライアントデバイス１０１Ａ−１０１Ｎに提供されたオブジェクトのバージョン識別子を示すデータ）を、特定のオブジェクトについて生成された全てのメッセージを示すデータ（例えば特定のオブジェクトについての最新バージョン識別子を示すデータ）と比較し得る。メッセージ配信サーバ１０７Ａ−１０７Ｎは、どのメッセージ（もしあれば）がクライアントデバイス１０１Ａ−１０１Ｎに提供されるべきであって、それによってそれらクライアントデバイス１０１Ａ−１０１Ｎが、サブスクライブされたオブジェクトについてオブジェクトアップデートについて十分に最新の状態にあるようにできるか、クライアントデバイス１０１Ａ−１０１Ｎ上に記憶されているそれらサブスクライブされたオブジェクトを示すそのようなデータが十分に現在のものであるようにできるかをそれから判断し得る。
【０１０７】
インタフェース計算エンティティの動作
一般に、インタフェース計算エンティティ１０９は、メッセージ、オブジェクトアップデート、及び／又はその他をクライアントデバイス１０１Ａ−１０１Ｎ及びメッセージ配信サーバ１０７Ａ−１０７Ｎの間でリレーするよう構成される。メッセージが、クライアントデバイス１０１Ａ−１０１Ｎに配布されるべくメッセージ配信サーバ１０７Ａ−１０７Ｎから受信される時、インタフェース計算エンティティ１０９は、宛先クライアントデバイス１０１Ａ−１０１Ｎとの適切なウェブソケット接続を特定し、それらメッセージを適切なクライアントデバイス１０１Ａ−１０１Ｎに渡すよう構成される。ある実施形態では、アサインされた宛先クライアントデバイス１０１Ａ−１０１Ｎでインタフェース計算エンティティ１０９において受信されたメッセージ（オブジェクトアップデート）は、ここで説明されたサブスクリプション方法に従って既にフィルタリングされていて、よってインタフェース計算エンティティ１０９は、特定のクライアントデバイス１０１が、インタフェース計算エンティティ１０９において受信されたオブジェクトアップデートをサブスクライブしたかを判断する必要がない。さらに、インタフェース計算エンティティ１０９は、特定のクライアントデバイス１０１がその特定のクライアントデバイス１０１に宛先が設定されたメッセージを既に受信したかを判断する必要がない。そのような実施形態では、インタフェース計算エンティティ１０９は、メッセージをメッセージ配信サーバ１０７Ａ−１０７Ｎ及びクライアントデバイス１０１Ａ−１０１Ｎの間で単に届けるよう動作する。
【０１０８】
ここで説明されたたように、インタフェース計算エンティティ１０９は、クライアントデバイス１０１Ａ−１０１Ｎのうちのそれぞれと１つ以上のウェブソケット接続（又は他のデータ送信接続）を維持するよう構成され得る。同様に、インタフェース計算エンティティ１０９は、メッセージ配信サーバ１０７Ａ−１０７Ｎとの１つ以上のバックエンド接続を維持するよう構成され、それによってオブジェクトアップデート及び／又は他のメッセージがクライアントデバイス１０１Ａ−１０１Ｎ及びメッセージ配信サーバ１０７Ａ−１０７Ｎの間で届けられることを可能にする。
【０１０９】
さらに、ある実施形態においては、メッセージ配信サーバ１０７Ａ−１０７Ｎを参照してここで説明された１つ以上の機能は、インタフェース計算エンティティ１０９によって実行され得ることを理解されたい。例えば、ある実施形態のインタフェース計算エンティティ１０９は、１つ以上のクライアントデバイス１０１Ａ−１０１Ｎについてのサブスクリプションデータを保持し得て、及び／又はインタフェース計算エンティティ１０９は、サブスクライブされたオブジェクトについてクライアントデバイス１０１Ａ−１０１Ｎにおいて記憶されるオブジェクトに関連するデータが完全に最新であるかを判断し得る。よって、グループベース通信プラットフォーム１０５のさまざまな機能を実行するとしてここで説明された計算エンティティの性質は、ある種の構成に限定される必要はないことを理解されたい。
【０１１０】
結論
多くの改変及び他の実施形態には、本開示が関連する技術における当業者なら、前述の記載及び関連する図面において提示された教示を利用し、想到することができよう。したがって、本開示は、開示された特定の実施形態に限定されるべきではなく、改変及び他の実施形態は、添付の特許請求の範囲の範囲内に含まれるよう意図されていると理解されるべきである。ここでは特定の語が採用されているが、それらは一般的な叙述的な意味で用いられているのに過ぎず、限定を目的としたものではない。
【図１】
2020184354.tif 000003
【図２】
2020184354.tif 000004
【図３】
2020184354.tif 000005
【図４】
2020184354.tif 000006
【図５】
2020184354.tif 000007
【図６】
2020184354.tif 000008
【手続補正書】
【提出日】令和2年6月29日(2020.6.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
クライアントデバイスに記憶されたオブジェクトアップデートを動的に維持するクライアントデバイスであって、
複数のオブジェクトについてのオブジェクトデータのローカルデータ記憶を維持する１つ以上のメモリ記憶領域と、
前記複数のオブジェクトとのユーザインタラクションをモニタし、
前記複数のオブジェクトのうちの１つ以上の特定のオブジェクトとのユーザインタラクションにおける変化を示す１つ以上のトリガイベントを検出し、
前記１つ以上のトリガイベントに少なくとも部分的に基づいて、前記１つ以上の特定のオブジェクトについてのサブスクリプション変更リクエストを生成し、前記サブスクリプション変更リクエストは、前記１つ以上の特定のオブジェクトに関連するサブスクリプションを開始するためのサブスクライブリクエスト、又は前記１つ以上の特定のオブジェクトに関連するサブスクリプションを終了するアンサブスクライブリクエストのいずれかを含み、
前記サブスクリプション変更リクエストをリモートコンピューティングプラットフォームに送信することによって、前記１つ以上の特定のオブジェクトに関連する前記クライアントデバイスに送信されたオブジェクトデータの変更をリクエストする
ように集合的に構成される１つ以上のプロセッサと
を備えるクライアントデバイス。
【請求項２】
前記１つ以上のトリガイベントは、前記１つ以上の特定のオブジェクトをグラフィカルユーザインタフェースの見える部分及び隠れた部分の間で移動させることを含む
請求項１に記載のクライアントデバイス。
【請求項３】
前記１つ以上のトリガイベントは、前記１つ以上の特定のオブジェクトをグラフィカルユーザインタフェースの見える部分の境界を横切って移動させることを含む
請求項１に記載のクライアントデバイス。
【請求項４】
グラフィカルユーザインタフェースの隠れた部分から見える部分への前記１つ以上の特定のオブジェクトの動きを検出すると同時に、前記サブスクリプション変更リクエストは、前記１つ以上の特定のオブジェクトについての前記サブスクライブリクエストを含むことによって、前記１つ以上の特定のオブジェクトに関連する前記サブスクリプションを開始する
請求項１に記載のクライアントデバイス。
【請求項５】
グラフィカルユーザインタフェースの見える部分から隠れた部分への前記１つ以上の特定のオブジェクトの動きを検出すると同時に、前記サブスクリプション変更リクエストは、前記１つ以上の特定のオブジェクトについての前記アンサブスクライブリクエストを含むことによって、前記１つ以上の特定のオブジェクトに関連する前記サブスクリプションを終了する
請求項１に記載のクライアントデバイス。
【請求項６】
前記サブスクリプション変更リクエストは、前記サブスクリプション変更リクエストが前記サブスクライブリクエスト又は前記アンサブスクライブリクエストであることを示すタイプを含み、前記タイプは、前記１つ以上の特定のオブジェクトがグラフィカルユーザインタフェースの一部分の中で見えるかどうかに少なくとも部分的には基づいて決定される
請求項１に記載のクライアントデバイス。
【請求項７】
前記サブスクリプション変更リクエストは、リクエスト識別子、メッセージルーティング又はオブジェクトタイプに関連付けられたサブスクライブタイプ、又は前記１つ以上の特定のオブジェクトに関連付けられた情報のうちの少なくとも１つを含む
請求項１に記載のクライアントデバイス。
【請求項８】
前記サブスクリプション変更リクエストは、前記記憶されたオブジェクトデータのバージョンを示すバージョン識別子を含む
請求項１に記載のクライアントデバイス。
【請求項９】
１つ以上のプロセッサは、前記サブスクリプション変更リクエストを前記リモートコンピューティングプラットフォームに送信することに応答して、前記記憶されたオブジェクトデータに対するアップデートを受信するよう集合的にさらに構成される
請求項１に記載のクライアントデバイス。
【請求項１０】
前記１つ以上のトリガイベントは、前記クライアントデバイス及び前記リモートコンピューティングプラットフォームの間の接続性に少なくとも部分的には基づいて検出される
請求項１に記載のクライアントデバイス。
【請求項１１】
クライアントデバイスに関連付けられたデータ記憶において、１つ以上のオブジェクトに関連付けられたオブジェクトデータを記憶すること、
前記１つ以上のオブジェクトとのユーザインタラクションをモニタすること、
前記１つ以上のオブジェクトのうちの１つのオブジェクトとのユーザインタラクションにおける変化を示す１つ以上のトリガイベントを検出すること、
前記トリガイベントに少なくとも部分的に基づいて、前記オブジェクトについてのサブスクリプション変更リクエストを生成することであって、前記サブスクリプション変更リクエストは、前記オブジェクトに関連するサブスクリプションを開始するためのサブスクライブリクエスト、又は前記オブジェクトに関連するサブスクリプションを終了するアンサブスクライブリクエストのいずれかを含む、サブスクリプション変更リクエストを生成すること、及び
前記サブスクリプション変更リクエストをリモートコンピューティングプラットフォームに送信することによって、前記オブジェクトに関連する前記クライアントデバイスに送信された新しいオブジェクトデータの変更をリクエストすること
を含むコンピュータで実現される方法。
【請求項１２】
前記トリガイベントは、前記オブジェクトをグラフィカルユーザインタフェースの見える部分及び隠れた部分の間で移動させることを含む
請求項１１に記載のコンピュータで実現される方法。
【請求項１３】
前記トリガイベントは、前記オブジェクトをグラフィカルユーザインタフェースの見える部分の境界を横切って移動させることを含む
請求項１１に記載のコンピュータで実現される方法。
【請求項１４】
グラフィカルユーザインタフェースの隠れた部分から見える部分への前記オブジェクトの動きを検出すると同時に、前記サブスクリプション変更リクエストは、前記オブジェクトについての前記サブスクライブリクエストを含むことによって、前記オブジェクトに関連する前記サブスクリプションを開始する
請求項１１に記載のコンピュータで実現される方法。
【請求項１５】
グラフィカルユーザインタフェースの見える部分から隠れた部分への前記オブジェクトの動きを検出すると同時に、前記サブスクリプション変更リクエストは、前記オブジェクトについての前記アンサブスクライブリクエストを含むことによって、前記オブジェクトに関連する前記サブスクリプションを終了する
請求項１１に記載のコンピュータで実現される方法。
【請求項１６】
前記サブスクリプション変更リクエストは、前記サブスクリプション変更リクエストが前記サブスクライブリクエスト又は前記アンサブスクライブリクエストであることを示すタイプを含み、前記タイプは、前記オブジェクトがグラフィカルユーザインタフェースの一部分の中で見えるかどうかに少なくとも部分的には基づいて決定される
請求項１１に記載のコンピュータで実現される方法。
【請求項１７】
前記サブスクリプション変更リクエストは、リクエスト識別子、メッセージルーティング又はオブジェクトタイプに関連付けられたサブスクライブタイプ、又は前記オブジェクトに関連付けられた情報のうちの少なくとも１つを含む
請求項１１に記載のコンピュータで実現される方法。
【請求項１８】
前記サブスクリプション変更リクエストは、前記記憶されたオブジェクトデータのバージョンを示すバージョン識別子を含む
請求項１１に記載のコンピュータで実現される方法。
【請求項１９】
前記サブスクリプション変更リクエストを前記リモートコンピューティングプラットフォームに送信することに応答して、前記記憶されたオブジェクトデータに対するアップデートを受信することをさらに含む
請求項１１に記載のコンピュータで実現される方法。
【請求項２０】
１つ以上の非一時的なコンピュータ読み取り可能な媒体であって、前記媒体は、クライアントデバイスの１つ以上のプロセッサによって実行される時、
クライアントデバイスに関連付けられたデータ記憶において、１つ以上のオブジェクトに関連付けられたオブジェクトデータを記憶すること、
前記１つ以上のオブジェクトとのユーザインタラクションをモニタすること、
前記１つ以上のオブジェクトのうちの１つのオブジェクトとのユーザインタラクションにおける変化を示すトリガイベントを検出すること、
前記トリガイベントに少なくとも部分的に基づいて、前記オブジェクトについてのサブスクリプション変更リクエストを生成することであって、前記サブスクリプション変更リクエストは、前記オブジェクトに関連するサブスクリプションを開始するためのサブスクライブリクエスト、又は前記オブジェクトに関連するサブスクリプションを終了するアンサブスクライブリクエストのいずれかを含む、サブスクリプション変更リクエストを生成すること、及び
前記サブスクリプション変更リクエストをリモートコンピューティングプラットフォームに送信することによって、前記オブジェクトに関連する前記クライアントデバイスに送信された新しいオブジェクトデータの変更をリクエストすること
を含む操作を前記クライアントデバイスに実行させる命令を記憶する、１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２１】
前記トリガイベントは、前記オブジェクトをグラフィカルユーザインタフェースの見える部分及び隠れた部分の間で移動させることを含む
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２２】
前記トリガイベントは、前記オブジェクトをグラフィカルユーザインタフェースの見える部分の境界を横切って移動させることを含む
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２３】
グラフィカルユーザインタフェースの隠れた部分から見える部分への前記オブジェクトの動きを検出すると同時に、前記サブスクリプション変更リクエストは、前記オブジェクトについての前記サブスクライブリクエストを含むことによって、前記オブジェクトに関連する前記サブスクリプションを開始する
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２４】
グラフィカルユーザインタフェースの見える部分から隠れた部分への前記オブジェクトの動きを検出すると同時に、前記サブスクリプション変更リクエストは、前記オブジェクトについての前記アンサブスクライブリクエストを含むことによって、前記オブジェクトに関連する前記サブスクリプションを終了する
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２５】
前記サブスクリプション変更リクエストは、前記サブスクリプション変更リクエストが前記サブスクライブリクエスト又は前記アンサブスクライブリクエストであることを示すタイプを含み、前記タイプは、前記オブジェクトがグラフィカルユーザインタフェースの一部分の中で見えるかどうかに少なくとも部分的には基づいて決定される
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２６】
前記サブスクリプション変更リクエストは、リクエスト識別子、メッセージルーティング又はオブジェクトタイプに関連付けられたサブスクライブタイプ、又は前記オブジェクトに関連付けられた情報のうちの少なくとも１つを含む
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２７】
前記サブスクリプション変更リクエストは、前記記憶されたオブジェクトデータのバージョンを示すバージョン識別子を含む
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。
【請求項２８】
前記操作は、前記サブスクリプション変更リクエストを前記リモートコンピューティングプラットフォームに送信することに応答して、前記記憶されたオブジェクトデータに対するアップデートを受信することをさらに含む
請求項２０に記載の１つ以上の非一時的なコンピュータ読み取り可能な媒体。