(58)【調査した分野】(Int.Cl.,DB名)
前記プロセッサはさらに、前記タイプ識別子、前記ターゲット対象識別子、前記ターゲットユーザ識別子のそれぞれが同一の場合にのみ、ふたつ以上の通知レコードを統合するよう構成されていることを特徴とする請求項16または17に記載のシステム。
前記タイプ識別子、前記ターゲット対象識別子、前記ターゲットユーザ識別子のそれぞれが同一である場合にのみ、ふたつ以上の通知レコードが統合されることを特徴とする請求項20に記載のクライアントデバイス。
【発明を実施するための形態】
【0011】
本発明のある実施の形態は、複数のクライアントデバイスまたはプラットフォームに亘ってユーザにイベント通知を提供することに関する。ある実施の形態では、通知フィードはメッセージのストリームまたはシーケンスを含んでもよい。メッセージのストリームまたはシーケンスは、ユーザが共有コンテンツレポジトリまたはグループに参加するよう招待されたときや、ユーザがそのような招待を受け入れた(または拒否した)ときや、ユーザのアカウントを含む活動(例えば、パスワードなどのセキュリティ設定の変更や課金エラーや割り当て超過など)が検出されたときなどのさまざまなイベントの発生を報告する。ユーザがあるデバイスにおいて行動を起こした場合、すべてのデバイスにおける通知はその行動を反映するべく更新されてもよい。
【0012】
通知フィードはフレキシブルフィードであってもよい。フレキシブルフィードでは、ユーザに出される通知情報(本明細書では「アラート」とも称される)は、例えば新たなイベントが起こると旧い情報を現在の情報に置き換えることで、現在の状態を反映するよう実質的にリアルタイムで更新される。ある実施の形態では、各通知をトピック識別子に加えて時間シーケンス情報およびコンテンツを含むよう構成することで、フレキシブルフィードを実装してもよい。通知のリストが与えられると、サーバおよび/またはクライアントはトピック識別子を使用して、同じトピックに係る複数の通知を特定してもよい。複数の通知が同じトピックを含む場合、クライアントは時間シーケンス情報を使用して、どの通知がユーザにアラートとして出されるべきかを決定してもよい。例えば、より古い通知はユーザに対して隠されてもよい。ある実施の形態では、サーバは時間情報を使用して、例えばまだ送られていない通知が後のイベントによってすでに取って代わられている場合にある通知は特定のクライアントには送信される必要がないと決定してもよい。
【0013】
図1は、本発明の実施の形態に係るオンラインコンテンツ管理サービス100にアクセスするクライアントを示す図である。オンラインコンテンツ管理サービス100は、例えば、ファイル保管サービスとファイル共有サービスとユーザがメッセージおよび/または他のコンテンツを掲示することを可能とするソーシャルメディアサービスなどを含んでもよい。オンラインコンテンツ管理サービス100はサービス提供者によって維持されるサーバ上でホストされ、インターネットなどのネットワーク102を介してアクセスされてもよい。
【0014】
ユーザは、種々のクライアント110、112、114、116を操作することでオンラインコンテンツ管理サービス100にアクセスしてもよい。本明細書において、「クライアント」は主に、ユーザがオンラインコンテンツ管理サービス100とやりとりすることを可能とするコンピュータハードウエアとソフトウエアとの組み合わせを指す。例えば、クライアント110はウェブブラウザ(例えば、インターネットエクスプローラ(登録商標)、グーグルクローム(登録商標)、またはサファリ(登録商標))を実行するデスクトップまたはラップトップコンピュータであってもよい。このウェブブラウザは、HTTP(Hypertext Transfer Protocol)などのウェブプロトコルを使用してオンラインコンテンツ管理サービス100と通信する。クライアント112は、オンラインコンテンツ管理サービス100の提供者によって提供されるアプリケーションプログラムを実行するデスクトップまたはラップトップコンピュータであってもよい。オンラインコンテンツ管理サービスがファイルへのアクセスを提供するある例では、アプリケーションプログラムはサーバ上にホストされたファイルがクライアントコンピュータのオペレーティングシステムに関連するファイルシステム構造内に存在するように現れることを可能としてもよい。ある例では、同じクライアントコンピュータがウェブブラウザおよびデスクトップアプリケーションプログラムの両方を実行することができることに注意すべきである。したがって、単一の物理的なデバイスがひとつ以上のクライアントを実装しうることは理解されるべきである。
【0015】
クライアントの他の例は、タブレットコンピュータ114や携帯電話116などのモバイルデバイスを含み、それらはオンラインコンテンツ管理サービス100と通信するアプリケーションプログラム(「apps」とも称される)を実行することができる。様々なときに、ユーザはクライアント110、112、114、116のうちのひとつ以上とやりとりしてもよい。
【0016】
ある実施の形態では、オンラインコンテンツ管理サービス100は、ユーザおよび/またはクライアントが関心を持ちうるイベントの通知を提供してもよい。本明細書では、「イベント」はユーザに関連する任意のタイプの活動を含んでもよい。例えば、ユーザがファイルを含む共有フォルダへのアクセスを有し、かつ、他のユーザがその共有フォルダのファイルを変更する場合、オンラインコンテンツ管理サービス100は通知を提供してもよい。他の例としては、第2ユーザはユーザにコンテンツを共有する機会を提供してもよい。これは例えば第2ユーザによって生成または管理される共有フォルダに「参加」するようにユーザを招待することによる。ある実施の形態では、ユーザが現在どのプラットフォームとやりとりしているかによらずに、イベント通知はユーザに関連するすべてのクライアント110、112、114、116に提供される。
【0017】
イベントが通知されることに続いて、通知されたユーザ(または他のユーザ)はそのイベントに関して行動を起こしてもよいし、この行動は他のイベントを構成してもよい。例えば、共有フォルダに参加するための招待を受けることに応じて、ユーザはその招待を受け入れてもよいし拒否してもよい。または招待するユーザは受け取りユーザが受け入れる前にその招待を取り下げてもよい。これらの行動はさらなるイベントを構成してもよく、このさらなるイベントについて通知が作成されうる。
【0018】
本明細書において、「通知」は主にサービスがひとつ以上のクライアントに提供するイベント関連情報を指す。ある実施の形態では、クライアントはそれが受けた通知のいくつかまたはすべてをユーザによって視認可能(または知覚可能)としてもよい。例えば、クライアントは通知が受け取られたことを示す視覚的インジケータを表示してもよいし、通知を説明するテキスト(例えば「ジョーがフォルダ3を共有するようあなたを誘いました。」)を表示してもよいし、音を流してもよいし、振動してもよいし、通知を説明する言葉を話してもよい。本明細書において、「アラート」という語はユーザ視認可能(知覚可能)な形の通知を指すために使用される。
【0019】
ある実施の形態では、個々のイベント通知に加えてまたはその代わりに、クライアント110、112、114、116の任意のものまたはすべてはユーザに通知フィードを提供してもよい。本明細書において、「通知フィード」(または単に「フィード」)はイベント関連アラートのリストである。例示的なフィード120はクライアント110のディスプレイ122に示される。フィードは時系列にリストされたアラートであってもよく、各通知のコンテンツおよび/または状態についてユーザに知らせる種々のしるしを含んでもよい。フィードは「フレキシブルな」フィードであってもよい。このフレキシブルなフィードでは、同じトピックに係る通知は統合されるかまたは折りたたまれる。これにより例えばフィードは同じトピックに関する直近の通知のみを提供する。例として、フィード120は「ジョーがフォルダ3を共有するようあなた(ユーザボブ)を誘いました。」というアラートを含む。ユーザボブがジョーの招待を受け入れた場合、フィード120は表示されたアラートを隠し、表示されたアラートを「あなたはフォルダ3を共有するジョーの誘いを受け入れました。」に置き換えるよう更新されてもよい。または表示されたアラートは隠されてもよい。他の例として、ユーザケイが共有フォルダに写真をアップロードすると、各新たな写真はイベント通知を生成してもよく、一方でフィード120は「ケイがフォルダ7に写真をアップロードしました。」などの単一のアラートを出してもよい。通知を統合するために使用されうる技術の例は後述する。
【0020】
フィードはクライアント110、112、114、116の任意のものまたはすべてで提示可能である。異なるクライアントで提示されるフィードは同期されうるかまたは整合されうる。例えば、オンラインコンテンツ管理サービス100はクライアント110、112、114、116に「プッシュ」通知を行ってもよい。
【0021】
図2は、本発明の実施の形態に係るクライアント110、112、114、116へプッシュ通知を行うためのシステム200を示す図である。システム200は通知サーバ202とモバイルディスパッチャ204とウェブディスパッチャ206とデスクトップディスパッチャ208とを含む。これらのすべては、
図1のオンラインコンテンツ管理サービス100の提供者によって維持および/または運営されるサーバ(または他のコンピュータシステム)に実装されうる。サーバ202は通知データストア210に通信可能に接続される。サーバ202はメッセージキュー214を維持し、メッセージキュー214はモバイルディスパッチャ204とウェブディスパッチャ206とデスクトップディスパッチャ208とによってアクセス可能である。
【0022】
通知サーバ202はイベント通知の生成およびこれらの通知のクライアントへの発布に関する動作を行ってもよい。この例は後述する。ある実施の形態では、通知サーバ202はサーバなどの適切なコンピュータハードウエア上で実行されるひとつ以上のソフトウエア(コード)モジュールとして実装されうる。ある例では、通知サーバ202は、コンテンツ管理(例えばファイル保管および取得)および/またはユーザアカウント管理(例えばユーザアカウントの生成および更新、課金等)などのオンラインコンテンツ管理サービスの他の側面に関する動作を行う他のサーバから物理的または論理的に離されてもよい。
【0023】
リスナデータストア212は、例えばデータベースまたは他の任意のデータ保管技術と適切なコンピュータ読み取り可能保持媒体とを使用して、実装されてもよい。リスナデータストア212は、特定のクライアントデバイスおよび/または特定のユーザに関連するクライアントを特定する情報を含んでもよい。例えば、ユーザ名「ボブ」を有する特定のユーザは、彼の家のコンピュータにインストールされたデスクトップアプリケーションプログラム(例えば、クライアント112)と、彼の家のコンピュータまたは他のコンピュータ上で動くウェブブラウザクライアント(例えば、クライアント110)と、iOSオペレーティングシステム(アップル社の製品)を実行するタブレット(例えば、クライアント114)と、アンドロイド(登録商標)オペレーティングシステム(Open Handset Allianceの製品)を実行する携帯電話(例えば、クライアント116)と、を有してもよい。リスナデータストア212は、ユーザ名「ボブ」で質問された場合に、これらのクライアントのそれぞれについての特定情報を提供できる。リスナデータストア212は、種々のクライアントからの通信に基づいてオンラインコンテンツ管理サービスによって入力されてもよい。例えば、ボブが最初に特定のクライアントからオンラインコンテンツ管理サービスにサインインした場合、通知サーバ202(またはオンラインコンテンツ管理サービスに関連する他のサーバ)はリスナデータストア212にボブとそのクライアントとを関連付けるレコードを生成してもよい。
【0024】
通知サーバ202は、それについての通知が生成されるべきイベントを検出することができる。ある実施の形態では、オンラインコンテンツ管理サービスに関連する他のサーバによって通知サーバ202に送られたイベント情報220に基づいて、イベントが検出されうる。したがって、例えば、ユーザアカウントサーバまたはコンテンツ管理サーバは、それらのサーバで発生する行動に基づいて通知サーバ202にイベント情報220を送ってもよい。イベントおよび関連情報の例は
図4を参照して後述する。
【0025】
通知サーバ202はイベント情報220に基づいて通知レコード222を生成し、通知レコード222を通知データストア210に保持してもよい。通知データストア210は、例えばデータベースまたは他の任意のデータ保管技術と適切なコンピュータ読み取り可能保持媒体とを使用して実装されてもよい。通知レコード222はデータベーステーブル内の列を含んでもよいし、または任意の構造化されたデータオブジェクトを含んでもよい。列やデータオブジェクトは、クライアントからの要求に応じてサーバ202が特定の通知を容易に取得できるようにするような形でイベント情報220を表す。通知レコード222の例示的な構造は
図5を参照して後述する。
【0026】
通知サーバ202は、通知レコードがデータストア210に加えられたときにクライアントに知らせるために、クライアントにメッセージを発してもよい。ある実施の形態では、通知サーバ202は通知レコード222に対応するメッセージ224を生成し、メッセージ224をメッセージキュー214に加える。メッセージ224は通知レコード222内の実際の情報を含んでもよいが、そうである必要はない。ある実施の形態では、メッセージ224は単に通知レコード222の存在を示し、かつメッセージ224をクライアントへルートするのに使用可能な情報を提供し、かつ受け取るクライアントがデータストア210から通知レコード222を取得することを可能としてもよい。例えば、メッセージ224はメッセージが向けられているユーザの識別子とレコード222の識別子とを含んでもよい。メッセージ224の例示的な構造は
図6を参照して後述する。
【0027】
クライアントへ発せられたメッセージ224の配送は、モバイルディスパッチャ204、ウェブディスパッチャ206およびデスクトップディスパッチャ208などのディスパッチャを使用することでクライアント特定的な形で達成可能である。それらのディスパッチャのそれぞれは、メッセージキュー226のなかの新たなメッセージ224を独立に検出し、適切な技術を使用して対応するクライアント特定メッセージ(CSM)240、242、244、246をクライアントにプッシュしてもよい。クライアント特定メッセージ240、242、244、246は、メッセージ224と構造的および/または内容的に同等であってもよい(が、そうである必要はない)。特定のクライアント特定メッセージのフォーマットおよびコンテンツは、そのクライアントについて使用される配送プロトコルに合わせられる。クライアント特定メッセージが通知データストア210内で対応する通知レコードを見つけるのに使用可能な参照情報を含む限り、クライアントは後述のように通知レコードを取得することができるであろう。
【0028】
例えば、タブレットコンピュータや携帯電話などのモバイルプラットフォームは、クライアント特定メッセージを特定のデバイスに配送するために、そのオペレーティングシステムに関連するプッシュ通知サービスに依存してもよい。プッシュ通知サービスの例は、アップル社によって運営されiOSオペレーティングシステムを実行するデバイスに関連するApple Push Notification Service (APNS)と、グーグル社によって運営されアンドロイド(登録商標)オペレーティングシステムを実行するデバイスに関連するGoogle Cloud Messaging (GCM)と、を含む。
【0029】
あるプッシュ通知サービスは、クライアントへのメッセージのソースが宛先デバイスの識別子とメッセージの内容とを提供することを要求する。したがって、ある実施の形態では、モバイルディスパッチャ204がメッセージキュー214に新たなメッセージ224を検出した場合、モバイルディスパッチャ204はメッセージ224からユーザ識別子を抽出してもよい。モバイルディスパッチャ204はユーザ識別子を使用してリスナデータストア212に質問し、どの(あれば)モバイルデバイスがユーザ識別子と関連付けられているかを決定してもよい。リスナデータストア212からの情報に基づいて、モバイルディスパッチャ204は、例えばAPNS(クラウド232として表される)、GCM(クラウド234として表される)または特定のモバイルデバイスにとって適切な他のプッシュ通知サービスと通信することによって、ひとつ以上のプッシュ通知(クライアント特定メッセージ240、242として表される)を生成してもよい。
【0030】
ウェブディスパッチャ206は、ロングプリング(long pulling)などの技術を使用して、クライアント110などのアクティブなウェブクライアントにクライアント特定メッセージ244を(例えば(明示的には図示されていない)インターネットを介して)配送してもよい。
【0031】
デスクトップディスパッチャ208は、クライアント112などのアクティブなデスクトップクライアントにクライアント特定メッセージ246を(例えばインターネットを介して)配送してもよい。デスクトップクライアント112とオンラインコンテンツ管理サービスとの間に確立された特定の通信プロトコルに応じて、種々の技術が使用可能である。その例は、ロングプリングやデスクトップクライアントによるディスパッチャ208のポーリングやHTTPサーバプッシュなどを含む。
【0032】
各ディスパッチャ204、206、208は独立にメッセージキュー214をスキャンし、それがまだ処理していないメッセージを特定してもよい。ある実施の形態では、ディスパッチャ204、206、208はメッセージキュー214からメッセージを除去しない。代わりに、キュー214はFIFO(first in、first out)キューとして管理されてもよく、各ディスパッチャは個別にキュー内での自己の現在のリード位置を追跡してもよい。この場合、各ディスパッチャはすべてのメッセージを時系列で読むことができる。その結果、各ディスパッチャ204、206、208はキュー214内の各メッセージを適切なクライアントへ送り出すことができ、特定のユーザに関連するすべてのクライアントはそのユーザへのすべてのメッセージを受けることができる。
【0033】
ある実施の形態では、メッセージキュー214から定期的に、古いメッセージ(例えば、1日や1週間などのある固定期間の後にメッセージは期限切れとなってもよい)および/またはすべてのディスパッチャ204、206、208によって処理されたことが知られているメッセージがパージされうる。
【0034】
メッセージ224に対応するクライアント特定メッセージ(例えば、メッセージ240、242、244、246のひとつ)を受けることに応じて、受け取ったクライアントは、例えばサーバ202または他のサーバ(不図示)に要求を送ることで、関心のあるレコードを特定するための受け取ったクライアント特定メッセージに含まれる情報を使用して、通知データストア210から対応する通知レコード222を要求してもよい。
【0035】
本明細書で説明される種々の動作はコンピュータシステムに実装されてもよく、そのようなコンピュータシステムは一般的に用いられているデザインのものであってもよい。
図3は、代表的なコンピュータシステム300を示す簡略化されたブロック図である。種々の実施の形態では、コンピュータシステム300または類似のシステムは、クライアント(例えば、プラットフォーム110、112、114、116のいずれか)またはサーバ(例えば、サーバ200)を実現してもよい。
【0036】
コンピュータシステム300は、処理ユニット305と保持サブシステム310と入力デバイス320と出力デバイス325とネットワークインタフェース335とバス340とを備える。
【0037】
処理ユニット305は単一のプロセッサを含んでもよく、そのプロセッサはひとつ以上のコアを有してもよい。あるいは処理ユニット305は複数のプロセッサを含んでもよい。ある実施の形態では、処理ユニット305は汎用プライマリプロセッサに加えて、グラフィックプロセッサやデジタル信号プロセッサなどのひとつ以上の特定用途コプロセッサを含んでもよい。ある実施の形態では、いくつかまたはすべての処理ユニット305は、特定用途向け集積回路(ASICs)やフィールドプログラマブルゲートアレイ(FPGAs)などのカスタマイズされた回路を使用して実装されてもよい。ある実施の形態では、そのような集積回路は回路自体に保持されているインストラクションを実行する。他の実施の形態では、処理ユニット305は保持サブシステム310に保持されるインストラクションを実行してもよい。
【0038】
保持サブシステム310は、システムメモリやリードオンリーメモリ(ROM)やパーマネントストレージデバイスなどの種々のメモリユニットを含んでもよい。ROMは、処理ユニット305および電子デバイス300の他のモジュールが必要とする静的データおよびインストラクションを保持してもよい。パーマネントストレージデバイスは読み書きメモリデバイスであってもよい。このパーマネントストレージデバイスは、コンピュータシステム300の電源が切られた場合でもインストラクションおよびデータを保持する不揮発性メモリユニットであってもよい。本発明のある実施の形態は、パーマネントストレージデバイスとしてマスストレージデバイス(例えば、磁気ディスクや光学ディスクやフラッシュメモリ)を使用してもよい。他の実施の形態は、パーマネントストレージデバイスとしてリムーバブルストレージデバイス(例えば、フロッピー(登録商標)ディスクやフラッシュドライブ)を使用してもよい。システムメモリは、読み書きメモリデバイスであってもよく、あるいはまたダイナミックランダムアクセスメモリなどの揮発性の読み書きメモリであってもよい。システムメモリは、処理ユニット305が実行中に必要とするいくつかまたはすべてのインストラクションおよびデータを保持してもよい。
【0039】
保持サブシステム310は、いろいろな種類の半導体メモリチップ(DRAM、SRAM、SDRAM、フラッシュメモリ、プログラマブルリードオンリーメモリ)などを含むコンピュータ読み取り可能保持媒体の任意の組み合わせを含んでもよい。磁気ディスクおよび/または光学ディスクが使用されてもよい。ある実施の形態では、保持サブシステム110は読み取り可能および/または書き込み可能なリムーバブルストレージ媒体を含んでもよい。そのような媒体の例は、コンパクトディスク(CD)やリードオンリーデジタルバーサタイルディスク(例えば、DVDROMやデュアルレイヤDVDROM)やリードオンリーかつ記録可能ブルーレイ(登録商標)ディスクやウルトラデンシティー光学ディスクやフラッシュメモリカード(例えば、SDカードやミニSDカードやマイクロSDカードなど)や磁気「フロッピー(登録商標)」ディスクなどを含む。コンピュータ読み取り可能保持媒体は、無線で通過するまたは有線接続を介する搬送波も一時的な電気信号も含まない。
【0040】
ある実施の形態では、保持サブシステム310は、オペレーティングシステムやブラウザアプリケーションやオンラインコンテンツ管理サービスにアクセスするためのモバイルアプリケーションやオンラインコンテンツ管理サービスにアクセスするためのデスクトップアプリケーションなどの、処理ユニット305によって実行されるべきひとつ以上のソフトウエアプログラムを保持してもよい。「ソフトウエア」は主に、処理ユニット305によって実行されるとコンピュータシステム300に種々の動作を行わせ、したがってソフトウエアプログラムの動作を実行するひとつ以上の特定のマシン実装を規定する一連のインストラクションを指す。インストラクションは、リードオンリーメモリに存在するファームウエアとしておよび/または不揮発性保持媒体に保持されるアプリケーションとして保持されてもよく、処理ユニット305による実行のために揮発性の作業メモリに読み出されてもよい。ソフトウエアは、単一のプログラムとして、または別個のプログラムの集合として、または所望の通りに作用し合うプログラムモジュールとして、実装されてもよい。処理ユニット305は保持サブシステム310から実行すべきプログラムインストラクションと処理すべきデータとを取得し、本明細書で説明される種々の動作を実行してもよい。
【0041】
ユーザインタフェースは、ひとつ以上のユーザ入力デバイス320とひとつ以上のユーザ出力デバイス325とによって提供されてもよい。入力デバイス320は、それを介してユーザがコンピュータシステム300に信号を提供できる任意のデバイスを含んでもよい。コンピュータシステム300はその信号を、特定のユーザ要求または情報を示すものとして解釈してもよい。種々の実施の形態では、入力デバイス320は、キーボード、タッチパッド、タッチスクリーン、マウスまたは他のポインティングデバイス、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、マイクロホンなどのいずれかまたはすべてを含んでもよい。
【0042】
ユーザ出力デバイス325は、それを介してコンピュータシステム300が情報をユーザに提供できる任意のデバイスを含んでもよい。例えば、ユーザ出力デバイス325はコンピューティングシステム300によって生成された画像を表示するディスプレイを含んでもよい。ディスプレイは、例えば液晶ディスプレイ(LCD)や有機発光ダイオード(OLED)を含む発光ダイオード(LED)や投影システムや陰極線管(CRT)などの種々の画像生成技術を、支持エレクトロニクス(例えばデジタルアナログコンバータやアナログデジタルコンバータやシグナルプロセッサなど)といっしょに組み入れてもよい。ある実施の形態は、入力デバイスおよび出力デバイスの両方として機能するタッチスクリーンなどのデバイスを含んでもよい。ある実施の形態では、他のユーザ出力デバイス325がディスプレイに加えてまたはその代わりに提供されてもよい。その例は、インジケータライトやスピーカや触覚「ディスプレイ」デバイスやプリンタなどを含む。
【0043】
ネットワークインタフェース335はコンピュータシステム300にボイスおよび/またはデータ通信能力を提供してもよい。ある実施の形態では、ネットワークインタフェース335は、(例えば、携帯電話技術や3G、4G、EDGE、WiFi(IEEE802.11ファミリー規格)などのアドバンストデータネットワーク技術や他のモバイル通信技術やそれらの任意の組み合わせを使用して)無線ボイスおよび/またはデータネットワークにアクセスするための無線(RF)送受信コンポーネント、GPSレシーバコンポーネント、および/または他のコンポーネント、を含んでもよい。ある実施の形態では、ネットワークインタフェース335は無線インタフェースに加えてまたはその代わりに有線ネットワーク接続(例えば、イーサネット(登録商標))を提供してもよい。ネットワークインタフェース335は、ハードウエアコンポーネント(例えば、アンテナや変調器/復調器や符号化器/復号化器や他のアナログおよび/またはデジタル信号処理回路)とソフトウエアコンポーネントとの組み合わせを使用して実装されてもよい。
【0044】
バス340は、コンピューティングシステム300の種々のコンポーネントを通信可能に接続する種々のシステムバス、周辺バスおよびチップセットバスを含んでもよい。例えば、バス340は処理ユニット305を保持サブシステム310と通信可能に接続してもよい。バス340は、入力デバイス320および出力デバイス325に接続されてもよい。バス340は、ネットワークインタフェース335を介してコンピュータシステム300をネットワークに接続してもよい。このようにして、コンピューティングシステム300は複数のコンピュータシステムのネットワーク(例えば、ローカルエリアネットワーク(LAN)やワイドエリアネットワーク(WAN)やイントラネットやインターネットなどのネットワークのネットワーク)の一部であってもよい。
【0045】
ある実施の形態は、コンピュータ読み取り可能保持媒体にコンピュータプログラムインストラクションを保持するマイクロプロセッサ、ストレージおよびメモリなどの電子コンポーネントを含む。本明細書で説明される特徴の多くは、コンピュータ読み取り可能保持媒体上で符号化されているプログラムインストラクションの組として特定される処理として実装されてもよい。これらのプログラムインストラクションがひとつ以上の処理ユニットによって実行されると、それらは処理ユニットにそれらのプログラムインストラクションに示される種々の動作を行わせる。プログラムインストラクションまたはコンピュータコードの例は、コンパイラにより生成されるようなマシンコードと、コンピュータや電子コンポーネントやマイクロプロセッサによってインタプリタを使用して実行される高レベルコードを含むファイルと、を含む。
【0046】
適切なプログラミングを通して、処理ユニット305はコンピューティングデバイス300に種々の機能を提供してもよい。例えば、モバイルコンピューティングデバイスでは、処理ユニット305は、プッシュ通知を受けることができるオペレーティングシステムを実行してもよく、またオンラインコンテンツ管理サービス100と通信するアプリケーションを実行してもよい。デスクトップコンピューティングデバイスでは、処理ユニット305は、オンラインコンテンツ管理サービス100とのインタフェースを提供するデスクトップアプリケーションプログラムおよびオペレーティングシステムを実行してもよい。ある実施の形態では、このインタフェースはオペレーティングシステムによって維持されるファイルシステムとのインタフェースと統合されてもよい。ある実施の形態では、処理ユニット305はブラウザアプリケーションを実行してもよい。このブラウザアプリケーションは、オンラインコンテンツ管理サービス100などのソースからコンテンツアイテムを(例えばHTTPまたはウェブページを取得して表示するための他のデータトランスファプロトコルを使用して)取得して表示する能力と、見るアイテムの選択や特定のコンテンツアイテムに応じたユーザによるデータの提出(例えば、インタラクティブウェブページ上のフォームに入力すること)などのコンテンツアイテムに係るユーザ入力を受けて解釈する能力と、を提供する。
【0047】
ある実施の形態では、コンピュータシステム300または類似のシステムは、通知サーバ202および/またはモバイルディスパッチャ204やウェブディスパッチャ206やデスクトップディスパッチャ208などのディスパッチャを実現してもよい。そのような例では、ユーザインタフェースは処理ユニット305および/または保持サブシステム310から離れて配置されてもよい。同様に、保持サブシステム310またはその部分は処理ユニット305から離れて配置されてもよい。したがって、ある例では、コンピュータシステム300の種々のコンポーネントは互いに物理的に近接して配置される必要はない。
【0048】
コンピュータシステム300は例示であり、変形や変更が可能であることは理解されるであろう。コンピュータシステム300は本明細書で特に説明されてはいない他の能力(例えば、携帯電話、グローバルポジショニングシステム(GPS)、電力管理、ひとつ以上のカメラ、外部デバイスやアクセサリを接続するための種々の接続ポートなど)を有してもよい。さらに、コンピュータシステム300は特定のブロックを参照して説明されたが、これらのブロックは説明の便宜上規定されたものであり、コンポーネント部分の特定の物理的な構成を暗示することを意図したものではないことは理解されるべきである。さらに、ブロックは物理的に別個のコンポーネントに対応する必要はない。ブロックは、例えばプロセッサをプログラムするかまたは適切な制御回路を提供することによって、種々の動作を行うよう構成されてもよい。種々のブロックは、初期設定がどのように得られるかに依存して、再構成可能であってもよいし、そうでなくてもよい。本発明の実施の形態は、回路とソフトウエアとの任意の組み合わせを使用して実装される電子デバイスを含む種々の装置で実現されてもよい。
【0049】
図2を参照して上述した通り、システム200は種々のイベントをクライアントに知らせるよう動作する。ここで、イベントは複数の起こりうる出来事のいずれかを含んでもよい。ある実施の形態では、さまざまな種類のイベントは階層的分類を参照して特定されてもよい。
【0050】
図4は、本発明の実施の形態に係るイベント分類体系を示す図である。この例では、イベント(ノード400)は第1レベルにおいて、イベントがアカウント(ノード402)に関するかソーシャル活動(ノード404)に関するかに基づいて分類されてもよい。ノード402のアカウント関連イベントは第2レベルにおいて、イベントがセキュリティ(ノード406)に関するか課金(ノード408)に関するかに基づいてさらに分類されてもよい。ノード406のセキュリティイベントは、パスワード変更(葉ノード410)や疑わしい行動(葉ノード412)などの具体的なイベントにさらに分類されてもよい。疑わしい行動は、ユーザのアカウントが毀損されているかまたは攻撃されているかもしれないことを示す。同様に、ノード408の課金イベントは、支払いエラー(葉ノード414)や割り当ていっぱい(葉ノード416)などの具体的なイベントにさらに分類されてもよい。
【0051】
同様に、ノード404のソーシャル活動イベントは第2レベルにおいて、イベントが共有フォルダ(ノード418)に関するかリンクの共有(ノード420)に関するかに基づいてさらに分類されてもよい。ノード418の共有フォルダイベントは、招待(葉ノード422)や参加(葉ノード424)や更新(葉ノード426)などの具体的なイベントにさらに分類されてもよい。ノード420のリンク共有イベントは、一般ファイルリンクの共有(葉ノード428)や写真リンクの共有(葉ノード430)やコレクションの共有(例えば、フォルダへのリンク)(葉ノード432)などの具体的なイベントにさらに分類されてもよい。
【0052】
ある実施の形態では、各イベントには階層構造化イベント識別子が割り当てられてもよい。この識別子は分類体系におけるその位置を表す。例えば、割り当ていっぱいイベントは402 408 416というイベント識別子を有しうる。イベント識別子を割り当てるための他の規則が使用されてもよい。
【0053】
図4に示されるイベント分類体系および具体的なイベントは例示であり、変形や変更が可能であることは理解されるであろう。イベント分類体系は任意の数のレベル(単一レベルが縮退したケースを含む)を含んでもよい。また、各レベルに任意の数のノードが存在してもよい。ある実施の形態では、例えばどのアラートをユーザに出すか決めるためにまたはアラートの出し方を調整するためにまたは通知データストア210の検索をより容易にするために、イベント分類体系を使用して通知をフィルタしてもよい。
【0054】
上述の通り、通知サーバ202は通知レコード222を生成して保持してもよい。
図5は、本発明の実施の形態に係る通知レコード222の例を示す図である。この例では、各通知レコード222は列502に示される構造を有する。列504、506、508はこの構造を有する通知レコードの例を提供する。
【0055】
この例では、トピックおよび時刻によるソーティングおよび/またはフィルタリングを容易にするように通知レコードを構成する。例えば、トピックフィールド510はひとつ以上のフィールドを含んでもよく、これらのフィールドを合わせると通知レコードの主題を示す情報が提供される。この例では、トピックフィールド510はイベントタイプ識別子とターゲット対象とターゲットユーザとを含む。イベントタイプ識別子は
図4の階層からのノード識別子であってもよい。ターゲット対象はイベントが関連するファイルやフォルダの識別子であってもよい。ターゲットユーザはそのユーザのクライアントが通知を受けるべきであるユーザであってもよい。列504、506、508のそれぞれにおいて、トピックフィールドは通知が同じトピックに係ることを示す。そのトピックはユーザ「ボブ」に対する共有フォルダ招待であって、そのフォルダは「VacationPhotos」と称される。上述の通り、ある実施の形態では、トピックフィールド510をキーとして使用することで、統合のための通知レコードを特定してもよい。
【0056】
シーケンスフィールド512は、通知レコードを論理的なシーケンスにソートする並べるのに使用可能な情報を提供する。ある実施の形態では、ソーティングは時刻に基づいてもよく、シーケンスフィールド512は通知レコードを時間シーケンスにソートするのに使用可能な時刻ベース情報を提供してもよい。例えば、特定のレコードを特定するために、通知サーバ202は各通知レコードが生成されるたびにその通知レコードにシリアル番号を割り当ててもよい。ある実施の形態では、シリアル番号は単調増大的なシーケンスで生成されてもよい。ある実施の形態では、通知データストア210のすべてのメッセージに対してシリアル番号は一意であってもよく、特定の通知レコードはそのシリアル番号を参照することで見つけられてもよい。他の実施の形態では、同じターゲットユーザを有するすべてのメッセージに対してシリアル番号は一意であってもよく、特定の通知レコードはターゲットユーザIDとシリアル番号とを参照することで見つけられてもよい。
【0057】
シーケンスフィールド512はひとつ以上のタイムスタンプを含んでもよい。この例では、送信時刻が含まれる。送信時刻は、サーバ202が通知レコードを生成した時刻および/またはサーバ202がメッセージキュー214のための対応するメッセージ224を生成した時刻を反映してもよい。この例では、「フィード時刻」が含まれる。フィード時刻は、基のイベントのソース(例えば、特定のクライアントまたはサーバ)によって確立された時刻基準を反映してもよい。例えば、クライアントが第1イベントに応じた行動を起こした場合、第2通知レコードは、第1通知レコードのフィード時刻にマッチするフィード時刻を有してもよい。ある実施の形態では、クライアントまたはイベントを報告する他のソースは、対応する通知レコードに関連付けられるべきフィード時刻を特定することを許可される。サーバ202は許されるフィード時刻について制限を課してもよい。例えば、フィード時刻は送信時刻(これはサーバ202によって決定される)より後であってはならないということを規定すうルールである。
【0058】
他の時刻フィールド(不図示)が含まれてもよい。例えば、通知レコードの生成を導いたイベントがいつ発生したかを示すためにイベント時刻フィールドを使用してもよい。
【0059】
コンテンツフィールド514はイベントに関するさらなる詳細を提供してもよい。例えば、コンテンツフィールド514は、ペイロードフィールドと原ユーザフィールドと原アプリケーションフィールドと状態フィールドとを含んでもよい。ペイロードフィールドはイベント特定データを含んでもよい。ある実施の形態では、ペイロードフィールドはキー/値辞書としてフォーマットされてもよい。そこでは、キーおよび値の特定の組み合わせが特定のイベントについて定められる。例えば、ユーザが招待を受け入れるか拒否する場合、ペイロードは招待が受け入れられたかまたは拒否されたかを示すキー値ペアを含んでもよい。原ユーザフィールドは、イベントを引き起こした行動をとったユーザを特定してもよい。例えば、招待の場合、原ユーザは招待を発行したユーザであってもよい。原アプリケーションは、特定のアプリケーションまたはプラットフォームから行動が引き起こされたときのその特定のアプリケーションまたはプラットフォームを特定してもよい。
【0060】
状態フィールドは通知に関連する状態を示してもよい。ある実施の形態では、状態フィールドは通知レコードの異なる状態に対応する列挙型であってもよい。例えば、列挙値は「unread、read、invisible」を含んでもよい。この例では、「unread」はユーザが(おそらく)イベント(または通知)にまだ気付いていないことを示し、「read」はユーザが基のイベント(または通知)に気付いたことを示し、「invisible」は基のイベント(または通知)を廃れさせるようななんらかの行動が発生したことを示す。ある実施の形態では、クライアントによって通知に対して行動が起こされた場合、更新された状態フィールド(およびおそらくは他の更新されたコンテンツフィールド)を伴う新たなイベントが生成される。
【0061】
同じトピックに関連する複数の通知を処理するときに、サーバ202および/またはクライアント110、112、114、116のいずれかまたはすべては状態フィールドを使用してもよい。具体例として、ユーザ(アリス)が自分が生成した「VacationPhotos」と称されるフォルダを共有しませんかとユーザボブを招待したとする。アリスがその招待を送ると、この最初のイベントにより通知サーバ202が通知レコード504を生成する。イベントトピックは、イベントがフォルダVacationPhotosについての共有フォルダ招待に関し、ボブに向けられていることを示す。コンテンツフィールドはアリスを原ユーザとして特定し、状態をunreadとする。サーバ202はボブがその招待を読んだということを示す情報を受け取っていないからである。通知レコード504の生成はボブに招待を送ることとは別でありうることは理解されるべきである。例えば、オンラインコンテンツ管理サービス100はボブのインボックスに実際の招待を含む電子メールまたは他のメッセージを送ってもよい。通知サーバ202は、ボブのクライアントにボブが彼の注意を待つ招待を有していることを知らせるための独立した経路を提供する。
【0062】
次に、通知レコード504に基づいてひとつ以上の彼のクライアントによって生成されたアラートを見た結果として、またはどのアラートとも無関係に、ボブは招待を読んでもよい。例えば、ボブはたまたま彼のインボックスをチェックし招待を見るかもしれない。ボブが招待を読むと、この第2イベントにより通知サーバ202が通知レコード506を生成する。第2イベントもまたアリスからのVacationPhotosフォルダを共有しませんかという招待に関するので、トピックフィールドは通知レコード504のそれと同じであってもよい。時刻フィールドは異なる。これは、ボブが招待を読んだことは別個のイベントであり、この場合ボブのクライアントがイベントのソースとなるため原ユーザおよび原アプリケーションもまた異なりうることを反映する。状態はreadとして特定され、ボブが招待を読んだことを示す。
【0063】
招待を読んだ後のある時点で、ボブはそれを受け入れることを決めるかもしれない。ボブが招待を受け入れると、この第3イベントにより通知サーバ202が通知レコード508を生成する。第3イベントもまたアリスからのVacationPhotosフォルダを共有しませんかという招待に関するので、トピックフィールドは通知レコード504および506のそれと同じであってもよい。時刻フィールドはより後のものである。これは招待の受け入れはそれを読んだ後に発生することを反映する。コンテンツフィールドは、ボブが招待を受け入れた(それを拒否することに対して)ことおよびボブのクライアントが再びイベントのソースであることを示すペイロードを含んでもよい。状態はinvisibleとして特定され、ボブはもはや通知に関心を持たない可能性が高いことを示す。
【0064】
この例では、各イベントは既存のレコードの更新よりむしろ新たな通知レコードの生成を導く。後述するように、このメカニズムによって、クライアントは現在の状態をよりよく反映するよう動的に更新されうる通知フィードを提供することができる。
【0065】
再び
図2を参照すると、通知レコード222が生成されると、サーバ202はメッセージキュー214に対応するメッセージ224を追加する。メッセージ224は通知レコード222と同じ情報を含んでもよいが、そうである必要はない。ある実施の形態では、代替的に、メッセージ224はクライアントが対応する通知レコード222を取得するのに使用可能な情報を提供してもよい。
【0066】
図6は、本発明の実施の形態に係るメッセージ224について使用できる一般化可能なデータ構造600を示す図である。データ構造600はソースフィールド600と対象フィールド602と取得コードフィールド604とを含む。通知サーバ202はメッセージ224について構造600を使用してもよい。ソースフィールド600は通知サーバ202(メッセージ224のソース)を特定するのに使用されてもよい。対象フィールド602はターゲットユーザを特定するのに使用されてもよい。取得コードフィールド604はメッセージのシリアル番号(
図5参照)を提供するのに使用されてもよい。上述のように、メッセージの受け手(クライアントデバイス)は、通知データストア210から対応する通知レコード222を取得するために、フィールド604からのシリアル番号をそれだけでまたはフィールド602からのターゲットユーザ識別子と組み合わせて使用してもよい。
【0067】
より一般的には、データ構造600は異なるソースからのおよび/または異なる宛先に向けられたメッセージについて使用されてもよい。構造600は通知が利用可能であることを示すクライアントへのメッセージに限られるものではない。例えば、ある実施の形態では、オンラインコンテンツ管理サービス上で保持されるファイルに対する更新はサーバファイルジャーナルに記録される。ファイルの更新に関するメッセージはサーバファイルジャーナルをソースとして特定し、更新されたファイルに関連する名前空間を対象として特定し、シリアルファイルジャーナルエントリに割り当てられたシリアル番号を取得コードとして特定してもよい。そのようなファイル更新メッセージは異なるクライアント間で交換されてもよい。これにより例えば異なるクライアントでデータを同期することができる。またはサーバとクライアントとの間で交換されてもよい。これにより例えばクライアントはファイルのローカルコピーをサーバにより維持されるマスターコピーと同期させることができる。
【0068】
ある実施の形態では、オンラインコンテンツ管理サービスの提供者はメッセージ224のクライアントへの配送を制御できないかもしれない。例えば、モバイルデバイスへのプッシュ通知はセキュアでないチャネルを使用する場合があり、侵入者による傍受に遭うかもしれない。データ構造600が実際の通知コンテンツを含まない場合、メッセージ傍受によるユーザへの潜在的な危害(例えば、機密データの暴露)は低減される。データ構造600に準拠するメッセージを受ける認証されたクライアントはセキュアなチャネルを通じてサーバ202にアクセスし、通知レコードのコンテンツを取得してもよい。認証されていないクライアントは通知レコードの取得を禁止されてもよい。
【0069】
図5および
図6のデータ構造は例示であり、変形や変更が可能である。通知レコードは任意の数のフィールドを含んでもよく、図示されるよりも多くのまたは少ないフィールドを有してもよい。同様に、メッセージのフィールドの数字および内容は図示のものと異なってもよい。
【0070】
図5および
図6に示されるようなデータ構造を用いることで、
図2のシステム200は特定のユーザに関連する複数のクライアントに亘って通知を調整することができる。これにより、ユーザが任意の所与の時刻にどのクライアント(または複数のクライアント)をアクティブに操作しているかによらずに、すべてのクライアントが関連するユーザに動的通知フィードを提供することが可能となる。クライアント通知サービスを提供するために通知サーバ202およびクライアント110、112、114、116で実現されてもよい処理の例が下に説明される。
【0071】
図7は、本発明の実施の形態に係るユーザに関連する複数のクライアントへイベント通知をプッシュするための処理700のフロー図である。処理700は例えば通知サーバ202などのサーバに実装されてもよい。
【0072】
ブロック702において、通知サーバ202はイベントを検出してもよい。例えば、サーバ202は他のサーバからまたはクライアントからイベント情報220を受けてもよい。ブロック704において、通知サーバ202は検出されたイベントに基づいて通知レコード222を生成してもよい。
図5のデータ構造500または他のデータ構造が使用されてもよい。ある実施の形態では、通知サーバ202は、特定のイベントに応じて通知レコードが生成されるべきか否かを判定するための判定ルールを適用してもよい。例えば、ユーザはあらゆる通知の受け取りを許可しないようまたはあるタイプの通知の受け取りを許可しないよう設定できる。通知サーバ202はユーザがオプトアウトしたかどうかを判定してもよい。例えば後述されるように、処理の後段で、ユーザオプションが実装されてもよい。
【0073】
ブロック706において、通知サーバ202は通知レコード222を通知データストア210に追加してもよい。ブロック708において、通知サーバ202は、通知レコード222が利用可能であることを示すメッセージ224を生成してもよい。
図6のデータ構造600または他のデータ構造が使用されてもよい。
【0074】
ブロック710において、通知サーバ202はメッセージ224をユーザに関連する複数のクライアントへ発してもよい。ある実施の形態では、メッセージ224を発することは、メッセージ224をメッセージキュー214に追加することを含んでもよい。メッセージキュー214は定期的に種々のディスパッチャ204、206、208によって読み取られ、その後そのディスパッチャは上述の通りメッセージをクライアントにプッシュしてもよい。ある実施の形態では、所与のユーザに対するすべてのメッセージはそのユーザのクライアントのすべてに発せられる。他の実施の形態では、発布はより選択的であってもよい。例えば、ユーザは彼の複数のクライアントのうちのすべてではないいくつかについて通知の受け取りを許可しないよう設定できる。ディスパッチャ204、206、208はそのようなユーザのプリファレンスを実現できる。メッセージ224を特定のクライアントへ発することによりそのクライアント上でユーザ視認可能なアラートが出されてもよいがその必要はないことは理解されるべきである。アラートの提示に関するユーザプリファレンスはクライアント内で実装され、いくつかまたはすべてのアラートメッセージが抑制されてもよい。
【0075】
処理700はサーバが検出するイベントごとに繰り返されてもよい。したがって、各イベントは通知データストア210に追加される個々の通知レコードを生じさせてもよい。ある実施の形態では、通知レコードは通知データストア210から削除されない。他の実施の形態では、通知レコードは、例えば送信時刻に基づき古いと判定された通知の定期的なパージを通して、削除されてもよい。例えば、通知は固定期間、例えば1日や1週間や1ヶ月、の間維持されて、その後その通知はもはや興味の対象ではないと仮定されて削除されてもよい。イベントタイプや通知トピックに基づくルールなどの通知データストア210をパージするためのより複雑なルールが使用されてもよい。例えば、支払いエラーに関する通知はそのエラーが解消されるまで保存されてもよく、一方、共有フォルダ招待の受領や受諾についての通知はある固定期間の後に削除されてもよい。
【0076】
図8は、本発明の実施の形態に係るユーザに通知を提供するための処理800のフロー図である。処理800は例えばクライアント116やクライアント110、112、114のいずれかで実装されてもよい。
【0077】
ブロック802において、クライアント116は通知が利用可能であることを示すメッセージを受けてもよい。このメッセージは、処理700のブロック710でサーバ202によって発せられたメッセージ224であってもよい。ブロック804において、クライアント116は通知サーバ202に、対応する通知レコードを求める要求を送ってもよい。
【0078】
ある実施の形態では、クライアント116はメッセージが受け取られるのとリアルタイムで通知レコードを要求してもよい。他の実施の形態では、クライアント116は待機し、後の任意のときに通知レコードを要求してもよい。したがって、クライアント116がブロック804において通知レコードの要求を行う前に、複数のメッセージがサーバ202によって発せられおよび/またはクライアント116によって受け取られることが可能である。通知レコードがシリアル番号で特定されるある実施の形態では、クライアント116は既に受け取った直近の通知レコードのシリアル番号を含む要求を送ってもよい。サーバ202は、クライアントによって報告された直近に受け取ったシリアル番号に続くシリアル番号を有する、クライアント116のユーザへの通知レコードを送ってもよい。ある実施の形態では、通知レコードを要求するためにおよび/またはどのレコードを提供するかを特定するために、シリアル番号に加えてまたはその代わりに、タイプスタンプを使用してもよい。
【0079】
ブロック806において、クライアント116はサーバ202からひとつ以上の新たな通知レコードを受けてもよい。ある実施の形態では、クライアント116は、新たな通知レコードを、以前に受け取った通知レコードと一緒に保持してもよい。
【0080】
ある実施の形態では、クライアント116は、例えばトピックフィールド510のいくつかまたはすべてをキーとして使用することで、同じトピックに関する複数の通知レコード(新たなおよび/または以前に受け取ったレコードを含む)を統合してもよい。したがって、ブロック808において、クライアント116は、例えばトピックフィールド510を比較することによって、ふたつ以上の通知レコードが同じトピックに関するか否かを判定してもよい。ある実施の形態では、トピックフィールド510のすべてがマッチする場合(そしてその場合にのみ)、通知は同じトピックに関する。
【0081】
ふたつ以上の通知レコードのトピックフィールド510がマッチする場合、クライアント116は例えばシーケンスフィールド512のいくつかまたはすべてに基づいて、ブロック810においてレコードを統合してもよい。例えば、各レコードに関連するシリアル番号および/またはタイムスタンプに基づいて、クライアント116は最も最近のレコードを特定しより古いレコードを廃棄してもよい。他の例では、クライアント116はシーケンスフィールド512の情報に基づいて同じトピックに関する通知レコードをソートしおよび/または優先順位を付けてもよい。クライアント116は所与のトピックに関する通知レコードの部分集合(例えば、ひとつ)を選択し、他のレコードを廃棄してもよい。レコードを廃棄することは、例えばクライアント116のストレージからそれを削除することや、それを廃れたものとしてマークすることを含んでもよい。ある実施の形態では、特定のレコードを廃棄するというクライアントの決定はそのローカルコピーのみに影響を与え、通知データストア210に保持されるレコードには影響を与えない。ある実施の形態では、統合は複数のレコードからの情報をマージすることを含んでもよい。例えば、ユーザが同じ共有フォルダにファイルをアップロードしたことをそれぞれが示す5つのレコードをクライアント116が受ける場合、その5つのレコードは単一のレコードに統合されてもよく、その単一のレコードは5つのファイルが共有フォルダにアップロードされたことを示す。
【0082】
ブロック812において、クライアント116は統合された通知レコードに基づいてユーザ視認可能なアラートを表示してもよい。例えば、
図5を参照すると、ユーザボブが招待を受け取って読んだがまだ返事をしていない場合、クライアント116はサーバ202から同時にまたは異なるときに、通知レコード504および506を受けてもよい。クライアント116は例えばより古いレコード504を廃棄することで、これらのレコードを統合してもよい。最も直近のレコード506に基づいて、ボブに彼が未処理の招待を有していることを思い出させるユーザ視認可能アラートが生成されてもよい。あるいはまた、レコードの状態フィールドはボブが既に招待を読んだことを示しているので、クライアント116はレコード506に基づきアラートが生成されるべきではないと決定してもよい。任意の特定の通知レコードについてアラートが生成されるか否かはクライアント116の特定の実装によるものであり、ユーザプリファレンスおよび設定によって部分的に導かれてもよい。
【0083】
クライアント116は、アラートを生成することに加えてまたはその代わりに、受け取った通知レコードに基づいて他の行動を起こしてもよいことは理解されるべきである。例えば、クライアント116はローカルファイルを更新してもよいし、設定を変更してもよいし、ユーザにアラートを出しつつまたは出さずに他の処理を行ってもよい。
【0084】
処理800はクライアント116(または他のクライアント)によって繰り返し実行されてもよい。これにより、クライアント116がほぼリアルタイムでユーザアラートを更新し生成することが可能となる。ある実施の形態では、クライアント116はアラートフィード(通知フィードとも単にフィードとも称される)を表示してもよい。アラートフィードは、新たな通知レコードが受け取られて以前のレコードと統合されるにつれて動的に更新される。例えば、ボブが共有フォルダ招待を受けた場合、アラートが生成される。そのアラートはボブがその招待を読んだときに更新されてもよい(例えば、招待が読まれたがまだ未処理であることを示すため)。そしてそのアラートはボブが招待を受け入れた(または拒否した)ときに再び更新される。ある実施の形態では、招待が読まれたか招待が受け入れられたときにアラートは消えてもよい。他の実施の形態では、アラートに関連する表示されたテキストおよび/または他の状態インジケータ(例えば、色、アイコン)は、最新の行動を反映するべく動的に変更されてもよい。例えば、招待が受け取られるとアラートがある色で提示されてもよい。招待が読まれるとその色が変わってもよい。招待が受け入れられると(または拒否されると)アラートは完全に消えてもよいし、ボブに彼が招待に対して行動したことを示すようテキストが変わってもよい(例えば、「あなたには、アリスからのVacationPhotosというフォルダを共有しようという招待があります」が「あなたは、アリスからのVacationPhotosというフォルダを共有しようという招待を受け入れました」に変更されてもよい)。ある実施の形態では、アラートのテキストおよび/またはアラートの他のプロパティは、トピックフィールド510および/またはコンテンツフィールド514に部分的に基づいて決定されてもよい。
【0085】
クライアントのスタートアップ時(例えば、アプリケーションが開始されたときまたはブラウザクライアントがオンラインコンテンツ管理サービスと接続したとき)、クライアントは通知レコードの現在の組を有さないかもしれない。ある実施の形態では、クライアントのスタートアップ時、クライアントは処理800をブロック804から始める形で実行することでアラートフィードを初期化してもよい。そこでは、クライアントは通知の組を初期化するための要求を送ってもよい。それに応じて、サーバ202は通知レコードの「スタートアップ」組を配送してもよい。スタートアップ組は種々の方法で規定されうる。例えば、スタートアップ組は10個(または他の数の)の直近の通知レコードを含んでもよいし、今から12時間前までのまたは昨日のまたは他のある期間のすべての通知レコードを含んでもよい。
【0086】
図9は、本発明の実施の形態に係るクライアント、例えばクライアント116(またはクライアント110、112、114のいずれか)へ通知レコードを提供するための処理900のフロー図である。処理900は例えば通知サーバ202に実装されてもよい。
【0087】
ブロック902において、サーバ202はクライアント116から通知レコードの要求を受けてもよい。ある実施の形態では、要求は取得されるべき特定の通知レコードの識別子(例えば、シリアル番号またはシリアル番号とユーザID)を含んでもよい。他の実施の形態では、要求はクライアントが既に受けた最も新しい通知レコードの識別子を含んでもよい。要求は、サーバが特定されたレコードよりも新しい通知レコードのすべてを提供するよう要求してもよい。ある実施の形態では、要求は例えば上述されたような通知レコードのスタートアップ組の要求であってもよい。
【0088】
ブロック904において、サーバ202はクライアントの要求にマッチする通知レコードの組を特定してもよい。サーバ202はこの組をクライアントへ送ってもよいし、ある実施の形態ではサーバ202は送る前に通知レコードを統合してもよい。例えば、ブロック906において、サーバ202は、例えばトピックフィールド510を比較することによって、ふたつ以上の通知レコードが同じトピックに関するか否かを検出してもよい。ある実施の形態では、トピックフィールド510のすべてがマッチする場合(そしてその場合にのみ)、通知は同じトピックに関する。ふたつ以上の通知レコードのトピックフィールド510がマッチする場合、サーバ202はブロック908においてレコードを統合してもよい。例えば、各レコードに関連するシリアル番号および/またはタイムスタンプに基づいて、サーバ202は最も最近のレコードを特定し統合された組からより古いレコードを除いてもよい。ブロック910において、サーバ202はクライアント116にレコードの統合された組を送ってもよい。他の例として、サーバ202は通知データストア210に、複数の通知レコードからの情報を反映するマージされたレコードを生成してもよい。例えば、それはユーザが特定のフォルダに複数のファイルをアップロードしたことを示す単一のレコードであり、各アップロードについての別個のレコードの代わりである。ブロック908におけるサーバ202による統合は、通知データストア210の内容を変更することなしに、特定のクライアントに送られるレコードの組に影響を与えることができることは理解されるべきである。したがって、任意のあるクライアントに送られる通知レコードのシーケンスは他の任意のクライアントに通知レコードを送ることによって影響を受ける必要はないのであって、これにより、各クライアントが自己が要求した任意の通知を受けることが可能となる。
【0089】
ある実施の形態では、サーバ202による統合は繰り返し行われてもよい。例えば、上述の通り、クライアント116は固定数(例えば10)の通知レコードを含む通知レコードのスタートアップ組を要求してもよい。サーバ202はブロック904においてそのクライアントについての10個の直近のレコードを特定してもよい(例えば、クライアントに関連するユーザIDに基づいて)。しかしながら、ブロック908における統合によりレコードの数が減らされてもよく、例えば6となる。これが生じる場合、サーバ202は減らされた組を送ってもよい。あるいはまた、サーバ202は、数が10に戻るように組にレコードを追加し、再び統合し、統合された組のレコードの数が10(または他の所望の固定数)に至るまでこれらの行動を繰り返してもよい。
【0090】
ある例では、サーバ202は、要求に応じて送られるべき通知レコードが存在しないと判定してもよい。その場合、サーバ202はクライアント116にこの状態を示す応答を返してもよい。
【0091】
処理700、800および900は例示であり、変形や変更が可能であることは理解されるであろう。逐次的に示されているステップは並列に実行されてもよく、ステップの順番は変更されてもよく、ステップは変更されても組み合わされても追加されても省略されてもよい。処理700、800および900(または類似の処理)が併せて使用されることで、クライアントはユーザに現在の情報を提供しかつ旧い情報を更新する(例えば、上書きまたは除去する)リアルタイム通知フィードを提供することができる。フィードはユーザのクライアントのいずれかまたはすべてで提示されてもよい。各プラットフォームのフィードは任意のクライアントでの行動に基づいて(ほぼリアルタイムで)自動的に更新される。任意のあるクライアントへの通知レコードの配送は任意の他のクライアントへの配送と独立しているので、ユーザの各クライアントはすべての通知を受けることができ、かつ完全な現在のアラートフィードを提示できる。あるクライアントとのユーザインタラクションは他のクライアントで提示されるフィードに反映されてもよい。
【0092】
本発明が具体的な実施の形態に関して説明されたが、当業者であればさまざまな変形例が可能であることを認識するであろう。例えば、本明細書で説明された特定のイベントやデータ構造やプラットフォームは例示のために使用されているのであって、他のイベントやデータ構造やプラットフォームで置き換えられてもよい。クライアントへメッセージをプッシュする技術もまた特定のクライアントについて適切となるように変更されてもよい。
【0093】
上述の通り、すべての通知がすべてのクライアントまたはいずれかのクライアントでアラートを生じさせることは要求されない。通知がアラートを生じさせる場合、アラートは所望の態様でユーザに出されてもよい。アラートは視覚的要素(テキストやアイコンや画像や色など)、聴覚的要素(トーンや話語など)、触覚的要素(振動やパルスなど)、および/または他の任意の知覚可能な要素を組み入れてもよい。
【0094】
上述の実施の形態はデータ構造およびデータベースまたはデータストアを参照してもよい。これらの用語は、コンピュータシステムによって保持され、取得されおよび解釈されうる個々のレコードへと情報を整理するための任意の技術を包含してもよいことは理解されるべきである。
【0095】
本発明の実施の形態は、専用コンポーネントおよび/またはプログラマブルプロセッサおよび/または他のプログラマブルデバイスの任意の組み合わせを使用して実現されてもよい。本明細書で説明される種々の処理は同じプロセッサまたは任意の組み合わせの異なるプロセッサで実行されてもよい。コンポーネントが所定の動作を行うよう構成されるものとして記述される場合、そのような構成は例えば電子回路をその動作を行うよう設計することにより、またはプログラマブル電子回路(例えば、マイクロプロセッサ)をその動作を行うようプログラムすることにより、またはそれらの任意の組み合わせにより、達成されうる。さらに、上述の実施の形態は特定のハードウエアおよびソフトウエアコンポーネントに言及しているが、当業者であればハードウエアおよび/またはソフトウエアコンポーネントの異なる組み合わせが使用されてもよいこと、およびハードウエアで実行されるものとして記述されている動作がソフトウエアで実行されてもよいことおよびその逆もしかりであること、を理解するであろう。
【0096】
本発明の種々の特徴を組み入れたコンピュータプログラムは符号化されて種々のコンピュータ読み取り可能保持媒体に保持されてもよい。適切な媒体は、磁気ディスク、磁気テープ、コンパクトディスク(CD)やDVD(digital versatile disk)などの光学保持媒体、フラッシュメモリ、および他の非一時的媒体を含む。プログラムコードで符号化されたコンピュータ読み取り可能媒体はコンパチブルな電子デバイスと共にパッケージされてもよい。またはプログラムコードは電子デバイスとは別に提供されてもよい(例えば、インターネットダウンロードを介してまたは別個にパッケージされたコンピュータ読み取り可能保持媒体として)。
【0097】
したがって、本発明が具体的な実施の形態に関して説明されたが、本発明は以下の請求の範囲内のすべての変形例および均等物をカバーするよう意図されていることは理解されるであろう。