(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0007】
[0013] 本明細書では、多数の体験モジュールを含むアプリケーションについて論ずる。多数の体験モジュールを含むアプリケーションを多数の異なるタイプのデバイスに配信し、これらのデバイスにおいて、アプリケーションをインストールし実行する。アプリケーションにおける各体験モジュールは、そのモジュールと関連付けられた体験に合わせて1つ以上で1組とした機構(feature)を実装する。各体験モジュールは、関連付けられた体験に対するビジネス・ロジック(例えば、命令およびデーター)を含む包括ビジネス・ロジック・コンポーネントを含む。この包括ビジネス・ロジック・コンポーネントは、全てのデバイスに共通であり、デバイスのタイプには関係なく、種々のデバイスにインストールするために供給される。また、各体験モジュールは、デバイス・タイプに特定のプレゼンテーション・コンポーネントも含む。このプレゼンテーション・コンポーネントは、関連付けられた体験に対するプレゼンテーション・ロジック(例えば、命令およびデーター)、およびリソース(画像、ユーザー体験レイアウト・マークアップ(layout markup)等のような、体験をユーザーに表示するためのリソース)を含む。異なるタイプのデバイスには異なるタイプのプレゼンテーション・コンポーネントを供給することによって、個々のタイプのデバイス、およびその個々のタイプのデバイスの能力に合わせて、関連付けられた体験のプレゼンテーションを個別に作成することが可能になる。
【0008】
[0014] また、アプリケーションがインストールされている種々のデバイスに、アプリケーション更新を配信することもできる。アプリケーション配信は、体験モジュール毎であり、したがってアプリケーション全体ではなく、アプリケーションの体験モジュールを更新する。体験モジュールのビジネス・ロジックに対する変更は、デバイスのタイプには関係なく、アプリケーションが実行している全てのデバイスに供給することができる。しかしながら、体験モジュールのプレゼンテーション・コンポーネントに対する変更は、アプリケーションが実行しており、変更されるプレゼンテーション・コンポーネントに対応するタイプのデバイスのみに供給することができる。
【0009】
[0015]
図1は、1つ以上の実施形態にしたがって、多数の体験モジュールを含むアプリケーションを実装することができるシステム例100を示す。システム100は、パーソナル・コンピューター(PC)、テレビジョン・デバイス、および/または移動体デバイスというような、種々のデバイス上においてアプリケーションを実行するときに、共通のユーザー体験のための環境を可能にする。サービスおよびアプリケーションは、アプリケーションを利用している間、ビデオ・ゲームをプレーしている間、ビデオを見ている間等において、あるデバイスから次のデバイスに移り変わるときに、共通のユーザー体験に対する3つの環境全てにおいて実質的に同様である。
【0010】
[0016] デバイス102は、多数の体験モジュールで構成されているアプリケーションのインストールおよび実行をサポートするアプリケーション・シェル104を含む。種々の実施態様において、デバイス102は、コンピューター106、移動体デバイス108、またはテレビジョンに基づくデバイス110というような、種々のタイプの計算デバイスとすることができる。これら異なるタイプのデバイスは、一般に異なる構造および能力を有すると考えられ、したがって、デバイス102は異なるデバイス・タイプの1つ以上に応じて構成することができる。例えば、デバイス102は、パーソナル・コンピューター、デスクトップ・コンピューター、多画面コンピューター、ラップトップ・コンピューター、ノートブック等というような、コンピュー・タイプのデバイス106として実現することもできる。
【0011】
[0017] また、デバイス102は、移動体電話機、携帯用音楽プレーヤー、携帯用ゲーミング・デバイス、タブレット・コンピューター、多画面コンピューター等というような、移動体タイプのデバイス108として実現することもできる。また、デバイス102は、日常的な視聴環境において通常もっと大きな画面を有するまたは接続されているデバイスのような、テレビジョン・タイプのデバイス110として実現することもできる。例えば、テレビジョン・タイプのデバイス110は、テレビジョン、セットトップ・ボックス、ゲーミング・コンソール等を含むことができる。
【0012】
[0018] 加えて、デバイス102は、家電製品(例えば、冷蔵庫、電子レンジ等)、自動車用PC、衣服等というような種々の他のタイプのデバイスとして実現することもできる。本明細書において記載する技法は、種々のタイプのデバイス102によってサポートすることができ、ここに記載する具体的な例に限定されるのではない。
【0013】
[0019] システム例100では、1つ以上の異なるタイプの多数のデバイス102が、いずれの所与の時点においてもクラウド112と通信することができる。クラウド112は、1つ以上のサーバー・コンピューター、および/またはネットワークおよび/または他のデーター通信リンクを通じてデバイス102に接続されている他のタイプのデバイスの集合体である。このようなネットワークは、例えば、インターネット、ローカル・エリア・ネットワーク(LAN)、セルラーまたは他の電話ネットワーク、イントラネット、WiFiネットワーク、他の公衆ネットワークおよび/または企業固有のネットワーク、その組み合わせ等とすることができる。このような他のデーター通信リンクは、ユニバーサル・シリアル・バス(USB)リンク、ワイヤレスUSBリンク、無線周波(RF)リンク、他の公衆通信リンクおよび/または企業固有の通信リンク、その組み合わせ等というような、有線リンクおよび/またはワイヤレス・リンクとすることができる。
【0014】
[0020] 異なるタイプのデバイス102は、各々、異なる物理的要件および能力を有する可能性がある。本明細書において論ずる多数の体験モジュールを含むアプリケーションは、デバイス120への体験の配信を可能にする。これらの体験は、個々のタイプのデバイスに合わせて特別に用意されるのであると共に、全てのタイプのデバイスに共通である。1つ以上の実施形態では、デバイスのタイプが定義され、包括的なタイプのデバイスに合わせて体験が個別に用意される。デバイスのタイプは、物理的特徴(例えば、表示画面サイズ、プロセッサー・パワー、サポートされているデーター入力メカニズム等)、使用形態、および/またはデバイスの他の共通な特性によって定義することができる。
【0015】
[0021] クラウド112は、1つ以上の体験サービス116およびデプロイ・サービス(deployment service)118のためのプラットフォーム114を表す。プラットフォーム114は、クラウド112のハードウェア(例えば、サーバー)およびソフトウェア・リソースの基礎的な機能を抽象化する。サービス116および118は、デバイス102によって利用することができるがデバイス102から離れているアプリケーションおよび/またはデーターを含むことができる。サービス116および118は、ネットワークおよび/または先に論じたような他のデーター通信リンク上における1つ以上のサービスとして提供することができる。プラットフォーム114は、デバイス102を他の計算デバイス)例えば、他のデバイス102)に接続するために、リソースおよび機能を抽象化することができる。また、プラットフォーム114は、プラットフォーム114を通じて実施されるサービス116に対して出された(encounter)要求に合わせて、対応する程度の規模(scale)を提供するために、リソースの規模調整(scaling)を抽象化するように機能することもできる。
【0016】
[0022] 体験サービス116は、アプリケーション、および/またはアプリケーションに種々の機能を設けるデーターを含む。設けられる個々の機能は、アプリケーションのタイプに基づいて様々であり、買い物または電子店舗機能、歌または画像(または他のデーター)記憶および/または引き出し機能、検索機能等を含むことができる。デプロイ・サービス118は、多数の体験モジュールを含むアプリケーションのデバイス102へのデプロイを管理する。ときの経過と共に種々の変更をアプリケーションに対して行うことができ、デプロイ・サービス118はこれらの変更のデバイス102に対するデプロイも管理する。以下で更に詳しく論ずるように、これらの変更が適用されるデバイス102に、当該変更をデプロイする。
【0017】
[0023] 各アプリケーションは、多数の体験モジュールで構成されており、各体験モジュールは、その体験モジュールと関連付けられた体験またはそれによって提供される体験に対して、1組の1つ以上の機構を実現する。異なる機構とは、アプリケーションの異なる機能を指し、アプリケーションのユーザーによってあるいは他のコンポーネントまたはモジュールによって呼び出すことができる。1つのアプリケーションにおける異なる体験モジュールは、アプリケーションの開発者によって定義され、機構または機能の論理的集合体(grouping)をアプリケーションのユーザーに供給するように定義されるのが一般的である。個々の体験モジュール、および各体験モジュールにおける1組の機構または機能は、アプリケーションの開発者が決定する。
【0018】
[0024] 一例として、ある特定の移動体デバイスが携帯用音楽プレーヤーおよび携帯用ゲーミング・デバイスの双方として動作することができると仮定する。移動体デバイス上におけるアプリケーションは、音楽再生体験と関連付けられた第1体験モジュールを含むことができ、トランスポート制御(例えば、停止、再生、巻き戻し、シャッフルなどの機構)、プレーリスト選択、および作成機構等というような、音楽再生体験に関する種々の機構を実装する。また、アプリケーションは、ゲーミング体験と関連付けられた第2体験モジュールも含むことができ、ゲーム選択機構、オンライン・ゲーミングのための体験サービス116との通信等というような、ゲーミング体験に関する種々の機構を実装する。また、アプリケーションは、市場体験と関連付けられた第3体験モジュールも含むことができ、ユーザーが購入のために歌またはゲームを選択することを可能にする検索およびブラウズ機構、歌またはゲームの購入のためにクレジット・カードまたは他の情報を提供するための体験サービス116との通信等というような、ユーザーが新たな歌またはゲームを購入することができるオンライン市場に関する種々の機構を実装する。
【0019】
[0025] 各体験モジュールは、2つのコンポーネント、即ち、包括ビジネス・ロジック・コンポーネントおよびデバイス・タイプ特定のプレゼンテーション・コンポーネントに分離されている。包括ビジネス・ロジック・コンポーネントは、関連付けられた体験に対するビジネス・ロジック(例えば、コード、即ち、命令およびデーター)を含み、全てのタイプのデバイスにわたって共通である。異なるタイプのデバイス毎に異なる必要がない命令およびデーターは、包括ビジネス・ロジック・コンポーネントに含まれる。包括ビジネス・ロジック・コンポーネントに含まれる個々の命令およびデーターは、個々のアプリケーションに基づいて様々に変化する。例えば、包括ビジネス・ロジック・コンポーネントは、プレーリスト上にある歌をシャッフルするための命令およびデーター、文書内で単語または句を検索するための命令およびデーター、表計算機能を実装するための命令およびデーター等を含むことができる。
【0020】
[0026] デバイス・タイプ特定のプレゼンテーション・コンポーネントは、関連付けられた体験に対するプレゼンテーション・ロジック(例えば、コード、即ち、命令およびデーター)およびリソース(例えば、画像、ユーザー体験レイアウト・マークアップ等というような体験をユーザーに表示するまたそれ以外で提示するためのリソース)を含む。異なるタイプのデバイスには異なるプレゼンテーション・コンポーネントを提供することができ、アプリケーションの開発者が、個々のタイプのデバイスおよびその個々のタイプのデバイスの能力に合わせて、関連付けられた体験の提示を特別に用意することを可能にする。異なるタイプのデバイス毎に異なるプレゼンテーション・コンポーネントを提供することができるが、同じプレゼンテーション・コンポーネントを異なるタイプのデバイスに提供するという状況が起こる可能性もある。
【0021】
[0027] 1つ以上の実施形態では、プレゼンテーション・ロジックおよびリソースが、個々のタイプのデバイスに合わせて、このタイプのデバイスの物理的特徴(例えば、表示画面サイズ、プロセッサー・パワー、入力および/出力コンポーネント等)に基づいて、関連付けられた体験の提示を特別に用意する。例えば、データー入力のために大型画面および大型キーボードを通例有するコンピューター・タイプのデバイス106に合わせて、第1プレゼンテーション・ロジックおよびリソースを特別に用意することができる。この第1プレゼンテーション・ロジックおよびリソースは、データーを表示する大きなウィンドウおよび/またはフレーム、キーボードまたはマウスによる種々の異なるユーザー入力等をサポートするユーザー・インターフェース(UI)を含むことができる。第2プレゼンテーション・ロジックおよびリソースは、データー入力のために小型画面を通例有し、任意に小さなキーボードを有する移動体タイプのデバイス108に合わせて特別に用意することができる。この第2プレゼンテーション・ロジックおよびリソースは、データーを表示する小さいウィンドウおよび/またはフレーム、マイクロフォン(例えば、音声コマンド)またはタッチスクリーンによる種々の異なるユーザー入力等をサポートするUIを含むことができる。第3プレゼンテーション・ロジックおよびリソースは、通例非常に大型の画面を有するがデーター入力のためのキーボードを有していないテレビジョン・タイプのデバイス110に合わせて特別に用意することができる。この第3プレゼンテーション・ロジックおよびリソースは、データーを表示する大きなウィンドウおよび/またはフレーム、ハンドヘルド・リモコンまたはハンドヘルド・ゲーム・コントローラによる種々の異なるユーザー入力等をサポートするUIを含むことができる。
【0022】
[0028] 尚、本明細書において論ずるアプリケーションは、単にデバイス102にダウンロードしウェブ・ブラウザーにおいて実行するウェブ・アプリケーションだけではないことは注記してしかるべきである。逆に、本明細書において論ずるアプリケーションは、種々の環境においてクラウド112からデバイス102にデプロイおよびインストールされる。また、アプリケーションに対する種々の更新も、クラウド112からデバイス102にデプロイおよびインストールすることができる。更に、本明細書において論ずるアプリケーションは、デバイス102がクラウド112に接続されていないときに実行することができる(しかし、オンライン市場にアクセスするというような一部の機能は、デバイス102がクラウド112に接続されていないときには、デバイス102には利用可能ではあり得ない)。加えて、本明細書において論ずるアプリケーションにおける異なる体験の提示は、そのアプリケーションが実行するデバイスの個々のタイプに合わせて特別に用意される。
【0023】
[0029]
図2は、1つ以上の実施形態にしたがって、多数の体験モジュールを含むアプリケーションを実行するデバイス例200を示す。デバイス200は、種々の異なるタイプの計算デバイスとすることができ、例えば、
図1のデバイス102である。
【0024】
[0030] デバイス200は、アプリケーション・シェル202およびオペレーティング・システム204を含む。オペレーティング・システム204は、ワシントン州RedmondのMicrosoft Corp.(マイクロソフト社)から入手可能なオペレーティング・システムのWindows(登録商標)オペレーティング・システム・ファミリーのいずれか、カリフォルニア州CupertinoのApple Corporation(アップル社)から入手可能なオペレーティング・システムのMac OS(登録商標)オペレーティング・システム・ソフトウェア・ファミリーのいずれか、Linux(登録商標)系オペレーティング・システム、Google Chrome系オペレーティング・システム、電話系オペレーティング・システム、携帯用ゲーミング・デバイス系オペレーティング・システム、セットトップ・ボックス系オペレーティング・システム等というような、種々の従来からのオペレーティング・システムのいずれでも可能である。多数の体験モジュールを含むアプリケーションをサポートするために、オペレーティング・システム204によってアプリケーション・シェル202を実行する。あるいは、アプリケーション・シェル202をオペレーティング・システム204の一部として含めることもでき、またはオペレーティング・システム204をアプリケーション・シェル202の一部として含めることもできる。また、1つ以上の追加のアプリケーションまたはシェル(図示せず)をオペレーティング・システム204によって実行することもできる。
【0025】
[0031] アプリケーション・シェル202は、本明細書において論ずる多数の体験モジュールを含むアプリケーションをサポートする。図示した例では、アプリケーション218は、シェル202に含まれるものとして、またはシェル202において実行するものとして示されている。1つのアプリケーション218がシェル202において実行することが示されているが、多数のアプリケーションをシェル202において同時に実行できることは認められてしかるべきである。加えて、1つのアプリケーション・シェル202を示すが、多数のアプリケーション・シェル202(各々0個以上のアプリケーションを実行する)をデバイス200上において同時に実行できることも認められてしかるべきである。
【0026】
[0032] アプリケーション218は、多数の(n個)体験モジュール220(1)、...、220(n)を含み、各体験モジュールは異なる体験と関連付けられている。1つ以上の実施形態では、多数の体験モジュール220の集合体がアプリケーション218となり、体験モジュール220以外には、他の追加のコンポーネントやモジュールはアプリケーション218には含まれない。つまり、このような実施形態では、体験モジュール220は、シェル202において実行する個別モジュールとすることができ、これらがまとまってアプリケーションとなる。
【0027】
[0033] シェル202は、デバイス/サービス通信フレームワーク212、体験ストレージ214、およびコア・コンポーネント・インターフェース216を含む。尚、デバイス/サービス通信フレームワーク212およびコア・コンポーネント・インターフェース216の機能は、1つのコンポーネントまたはモジュールとして、または別個のコンポーネントまたはモジュールとして実装できることは認められてしかるべきである。また、デバイス/サービス通信フレームワーク212およびコア・コンポーネント・インターフェース216の内一方または双方の機能は、多数のコンポーネントまたはモジュールとして実装できることも認められてしかるべきである。
【0028】
[0034] デバイス/サービス通信フレームワーク212は、デバイス200とクラウド(例えば、
図1のクラウド112)との間における通信を管理する。アプリケーション218のコンポーネントは、デバイス/サービス通信フレームワーク212に要求を送ることによって、および/またはデバイス/サービス通信フレームワーク212から応答または他の情報を受信することによって、クラウドと通信することができる。デバイス/サービス通信フレームワークは、種々のしかるべき設定およびプロトコルで構成され、またそうでなければこれらにアクセスすることができ、デバイス200がクラウドと通信することを可能にする。つまり、アプリケーション218は、クラウドとの通信を管理する負担が軽減されている。代わりに、アプリケーション218のコンポーネントは、デバイス/サービス通信フレームワーク212によって露出される標準的なインターフェース(例えば、アプリケーション・プログラミング・インターフェース(API))を呼び出すことができる。異なるタイプのデバイス上における異なるデバイス/サービス通信フレームワーク212は、異なるやり方で動作してクラウドと通信することができるが、それでもなお同じインターフェースをアプリケーションに提供することができる。アプリケーションの開発者は、これらのアプリケーションが実行するデバイスがクラウドとどのように通信するかについて具体的な知識を必要とせずに、アプリケーションを書くことができる。
【0029】
[0035] 体験ストレージ214は、アプリケーション218に対するコンポーネントのストレージを管理する。アプリケーションは、クラウド(例えば、
図1のクラウド112)からデバイス200にデプロイされる。各アプリケーションは、多数のユーザー体験モジュールを含み、各ユーザー体験モジュールは、先に論じたような、多数のコンポーネントを含む。アプリケーションをデプロイすると、これらの種々のコンポーネントがデバイス/サービス通信フレームワーク212によって受け取られ、体験ストレージ214に供給される。体験ストレージ214は、受け取ったコンポーネントを不揮発性メモリー(例えば、磁気ディスク、光ディスク、フラッシュ・メモリー等)に格納する。
【0030】
[0036] デバイス200にアプリケーション218を最初にインストールするとき、デバイス200のコンポーネント(例えば、以下で論ずるコア・コンポーネント・インターフェース216)がインストールを実行する。アプリケーション218のインストールには、個々のファイルを記憶デバイスの特定の位置に書き込む、情報を登録ストレージ(例えば、オペレーティング・システムのレジストリー)に追加する等というような、種々のインストール動作(action)が含まれる。ファイルは、体験ストレージ214および/またはデバイス200の他の記憶デバイスに書き込むことができる。インストールの後、シェル202においてアプリケーション218を実行することができる。また、アプリケーション218の新たなバージョンが入手可能になったとき、アプリケーション218を後から更新することもできる。これについては、以下で更に詳しく論ずる。
【0031】
[0037] アプリケーション218は、デバイス200のユーザーから受けた要求に応答して実行することができ、あるいは他のコンポーネント、モジュール、またはデバイスからの要求に応答して実行することができる。アプリケーション218を実行する要求に応答して、シェル202は、体験ストレージ214および/またはデバイス200の他の記憶デバイスから、アプリケーション218のためにインストールされたファイルを入手して、入手したコンポーネントを実行する。例えば、体験ストレージ214によって維持されているファイルまたは他の情報において、入手および実行すべき特定のコンポーネントを識別することができる。
【0032】
[0038] 1つ以上の実施形態では、コンポーネント218の多数のバージョンが体験ストレージ214に含まれる。例えば、コンポーネントの更新バージョンは、更新パッケージの形態で、デバイス/サービス通信フレームワーク212によって受信することができる。これについては、以下で更に詳しく論ずる。更新パッケージをインストールすると、デバイス200上にコンポーネントの新たなバージョンが得られる。以前にデプロイされていたコンポーネントおよびいずれの更新パッケージも体験ストレージ214内に維持されるので、コンポーネントの更新バージョンおよび以前のバージョンは双方共体験ストレージ214に維持される。コンポーネントの以前のバージョンを維持することによって、例えば、アプリケーション218の以前のバージョンにロール・バック(roll back)する、即ち、戻ること、アプリケーション218に対する変更の記録を付けること等が可能になる。体験ストレージ214は、任意に、特定の時間量が経過した後、コンポーネントに対する特定数の更新パッケージがその後体験ストレージ214に格納された後等というような、種々の規準に基づいて、以前のバージョンのコンポーネントを削除することができる。
【0033】
[0039] アプリケーション218に含まれている異なる体験モジュールの指示、およびこれらの体験モジュールのバージョン番号も、体験ストレージ214に維持される。これらのバージョン番号は、デバイス200上にインストールされている体験モジュールの現在のバージョンを特定し、これらの体験モジュールにおいて新たなバージョンのコンポーネントがデバイス200上にインストールされると更新される。体験ストレージ214には、アプリケーションのマスター・バージョン番号も維持することができる。マスター・バージョン番号は、デバイス上にインストールされているアプリケーション218の現在のバージョンを特定し、アプリケーション218の体験モジュールにおけるコンポーネントの新たなバージョンがデバイス200上にインストールされる毎に更新される。
【0034】
[0040] コア・コンポーネント・インターフェース216は、オペレーティング・システム204および他のデバイス200との通信を管理し、シェル202内における種々の通信に関する種々のデーターを維持し、種々の通信をサポートする。1つ以上の実施形態では、コア・コンポーネント・インターフェース216は、デバイス/サービス通信フレームワーク212がクラウドに送った要求の結果を格納するデーター・キャッシュを維持する。このデーター・キャッシュは、一時的に維持することができ(例えば、アプリケーション218またはシェル202が実行している間)、あるいは不揮発性メモリーにもっと長い期間存続させることもできる。
【0035】
[0041] 加えて、1つ以上の実施形態では、コア・コンポーネント・インターフェース216は、デバイス特定コマンドを抽象化するプレゼンテーション・フレームワークを含む。異なるタイプのデバイス、そして同じタイプの異なるデバイスであっても(デバイスの異なるモデル、異なる製造業者からのデバイス等というような)、異なるやり方で特定のプレゼンテーション機能を実装することができる。インターフェース216のプレゼンテーション・フレームワークは、特定のプレゼンテーション機能を実装するやり方を抽象化し、標準的なインターフェース(例えば、API)をアプリケーション218のコンポーネントに提供する。このため、アプリケーションのコンポーネントは、コア・コンポーネント・インターフェース216によって露出される標準的なインターフェースを呼び出すことができ、アプリケーションの開発者は、特定のプレゼンテーション・コマンドまたは情報が、アプリケーションが実行しているデバイスの特定のハードウェアにどのようにして伝達されるかについて具体的な知識を必要とせずに、アプリケーションを書くことが可能になる。1つ以上の実施形態では、プレゼンテーション・フレームワークは、ワシントン州RedmondのMicrosoft Corp.から入手可能なSilverlight(登録商標)プラットフォームとすることができる。
【0036】
[0042] アプリケーション218は、多数(n)の体験モジュール220(1)、...、220(n)を含み、各々が異なる体験と関連付けられている。これらの異なる体験は、先に論じたような、異なる1組の機構を含む。加えて、各体験モジュール220は、デバイス・タイプ専用プレゼンテーション・コンポーネント222および包括ビジネス・ロジック・コンポーネント224の双方を含む。包括ビジネス・ロジック・コンポーネント224は、関連付けられた体験に対するビジネス・ロジック(例えば、命令およびデーター)を含み、先に論じたような全てのタイプのデバイスにわたって共通である。デバイス・タイプ専用プレゼンテーション・コンポーネント222は、関連付けられた体験に対するプレゼンテーション・ロジック(例えば、命令およびデーター)およびリソース(例えば、画像、ユーザー体験レイアウト・マークアップ等というような、体験をユーザーに表示するまたそれ以外で提示するためのリソース)を含み、これらは、デバイス200のタイプに専用であることができ、またはデバイス200のタイプに合わせて特別に用意することができる。
【0037】
[0043] 1つ以上の実施形態では、アプリケーション・シェル202は、体験モジュール220が互いに分離されるように、コンポーネント222および224の実行を(例えば、コア・コンポーネント・インターフェース216を通じて)管理する。この分離によって、1つの体験モジュール220におけるコンポーネントが他の体験モジュール220のコンポーネント(または、コンポーネントが使用する汎用メモリー空間)に直接アクセスすることを防止する。また、この分離は、サンドボクシング(sandboxing)と呼ぶこともでき、シェル202によって種々の異なる従来のやり方で実現することができる。
【0038】
[0044] 体験モジュール220は互いに直接アクセスすることが禁止されているが、1つ以上の実施形態では、コア・コンポーネント・インターフェース216が体験間相互作用モジュール(cross-experience interaction module)226を含み、1つの分離された体験の中では不可能な、もっと豊富な機能を可能にするように、体験間相互作用をサポートする。体験間相互作用モジュール226はインターフェースを設け、これを通じて、1つの体験モジュール220が他の体験モジュール220にメッセージを送ることができる。このようなメッセージは、例えば、動作の要求、0個以上のパラメーター、およびメッセージを送るべき先である体験の指示を含む。パラメーターは、通例、データーへのポインターまたはデーターの他の識別子(特定の歌の題名へのポインター、特定のムービー・データーへのポインター等)を含むが、代わりに実際のデーター(例えば、歌の題名、ムービー・データー等)を含むこともできる。例えば、1つの体験モジュール220が、コンテンツ・ライブラリー体験モジュールであって、ユーザーが彼または彼女のライブラリー(例えば、歌あるいは他のオーディオおよび/またはビデオ・コンテンツのライブラリー)から特定のコンテンツを維持および選択することを可能にするコンテンツ・ライブラリー体験を提供するのであってもよく、一方他の体験モジュールが、コンテンツ再生体験モジュールであって、特定のコンテンツの再生を可能にするコンテンツ再生体験を提供するのであってもよい。コンテンツ・ライブラリー体験モジュールは、再生のためにユーザーが選択する特定のコンテンツのメディア項目識別子であるパラメーターを有する「歌演奏」(play song)メッセージをコンテンツ再生体験モジュールに送ることができる。
【0039】
[0045] 加えて、1つ以上の実施形態では、体験モジュール220は、体験間相互作用モジュール226に、体験モジュール220が実行することができる動作のタイプを示すように登録することもできる。この登録は、例えば、体験モジュール220が実行することができる、潜在的に要求される可能性がある動作のリストを含む。他の体験モジュール220は、体験間相互作用モジュール226に問い合わせて、どの要求された動作をどの体験モジュール220によって実行できるか特定することができ、こうして、個々の要求された動作を実行させるためには、どの体験モジュール220に個々のメッセージを送ればよいか知ることができる。あるいは、いずれの所与の要求された動作についても、1つの体験モジュール220のみがその動作を実行できることを、体験間相互作用モジュール226に登録するのでもよい。したがって、他の体験モジュール220がその動作を実行させたい場合、その特定の動作を要求するメッセージを(しかるべきパラメーターと共に)体験間相互作用モジュール226に送ることができる。体験間相互作用モジュール226は、要求された動作を実行することが登録されているのはどの体験モジュール220か把握しており、メッセージをその体験モジュール220に供給する。
【0040】
[0046] 1つ以上の実施形態では、体験間相互作用モジュール226は、要求元の体験モジュール220に応答メッセージを返送することもサポートする(特定の動作を要求するメッセージを発信した元である体験モジュール220)。この応答メッセージは、例えば、要求されたデーター、動作が実行されたことの確認等を含むことができる。応答メッセージを送る応答側の体験モジュール220は、この応答メッセージを送るべき要求元の体験モジュール220を特定することができる(例えば、要求元の体験モジュール220の指示が、体験間相互作用モジュール226によって当該体験モジュールに供給された場合)。あるいは、体験間相互作用モジュール226が、送られたメッセージの記録を維持し、応答側の体験モジュールがどの体験モジュール220が要求元の体験モジュール220であるか知ることなく、応答メッセージを要求元の体験モジュール220に転送することもできる。
【0041】
[0047] 体験モジュール220が受信したメッセージを理解できないという状況が発生することもあり得る。例えば、受信側の体験モジュール220が実行しない(またはしようとしない)動作を要求することがあり、受信側の体験モジュールが、その動作をサポートしない古いバージョンであること等もあり得る。このような状況では、受信側体験モジュール220は単にそのメッセージを無視することができる。あるいは、受信側体験モジュール220は、応答メッセージ、または要求された動作が実行されなかったことの指示を返送することができる。
【0042】
[0048] 1つ以上の実施形態では、体験モジュール220は、互いにメッセージを送り合う際に、ユニフォーム・リソース・ロケーター(URL)に基づくプロトコルを採用する。メッセージを送ろうとする先の体験モジュール220、要求された動作、およびパラメーターを、URLに埋め込む。このURLの記録は、メッセージを送る体験モジュール220が保持することができ、メッセージの履歴を維持することができ、実行取り消し(undo)コマンドおよび/または再実行コマンドを含むメッセージを体験モジュール220に送ることができる等である。
【0043】
[0049] 加えて、1つ以上の実施形態では、コア・コンポーネント・インターフェース216は、デバイス間通信をサポートし、デバイス200が1つ以上の他のデバイスと通信することが可能になる。例えば、デバイス間通信によって、
図1の異なるデバイス102同士が互いに通信することが可能になる。デバイス間通信は、先に論じたクラウド(例えば、
図1のクラウド112)との通信と同じように、種々の異なるネットワークまたは通信リンクを跨いで実行することができる。
【0044】
[0050] コア・コンポーネント・インターフェース216は、異なるやり方でデバイス間通信をサポートすることができる。1つ以上の実施形態では、コア・コンポーネント・インターフェース216は、相互作用モジュールを含む。相互作用モジュールは、デバイス/サービス通信フレームワーク212がクラウド(例えば、
図1のクラウド112)と通信するのと同様のやり方で、他のデバイスとの通信をサポートする。コア・コンポーネント・インターフェース216は、先に論じたフレームワーク212によって露出されるインターフェースと同様の標準インターフェースを露出し、アプリケーション218のコンポーネントがこの標準インターフェースを呼び出すことができる。あるいは、1つのインターフェースを露出することができ(例えば、フレームワーク212によって)、アプリケーション218のコンポーネントからの、他のデバイスにアクセスする要求は、クラウドに導かれるのではなく、フレームワーク212によってコア・コンポーネント・インターフェース216に導かれる。
【0045】
[0051] つまり、他のデバイスに通信を送ることを望むアプリケーション218のコンポーネントが、フレームワーク212を通じてクラウドに通信を送るのと同様のやり方で通信を送り、その他のデバイスから、フレームワーク212を通じてクラウドから通信を受信するのと同様のやり方で応答を受信することができ、他のデバイスと通信するために用いられる種々の設定および/またはプロトコルに関与する必要はない。代わりに、コア・コンポーネント・インターフェース216には、他のデバイスと通信するために用いられるこのような設定および/またはプロトコルが組み込まれており(configure)、またそうでなければこれらにアクセスすることができる。また、コア・コンポーネント・インターフェース216は、デバイス200が通信することができる他のデバイス200を特定するように構成されている。他のデバイスは、従来のBluetooth(登録商標)デバイス発見技法を用いる、照合サービス(例えば、
図1の体験サービス116によって設けられる)を用いる等というような、種々の異なるやり方で特定することができる。
【0046】
[0052] 本明細書では、アプリケーション218に対する更新に関する種々の論述が含まれるが、デバイス200の他のコンポーネントまたはモジュールも更新できることは認められてしかるべきである。例えば、シェル202を更新することができる。デバイス200のこのような他のコンポーネントまたはモジュールに対する更新は、本明細書において論ずるアプリケーション218を更新する技法と同様の技法を用いる、または他の技法を用いるというような、種々のやり方で供給し、デバイス200上で行うことができる。
【0047】
[0053]
図3は、1つ以上の実施形態にしたがって、多数の体験モジュールを含むアプリケーションをサポートするプラットフォーム例300を示す。プラットフォーム300は、例えば、
図1のプラットフォーム114とすることができる。プラットフォーム300は、種々の異なるタイプのサービス、または種々のソフトウェアを実行する他の計算デバイスの内1つ以上を用いて実装することができる。
【0048】
[0054] プラットフォーム300は、アプリケーション・インターフェース302、1つ以上の体験特定サービス304、およびデプロイ・サービス306を含む。アプリケーション・インターフェース302は、プラットフォーム300によって露出されるインターフェース(例えば、API)であり、デバイス(例えば、
図1のデバイス102または
図2のデバイス200)上で実行するアプリケーションがプラットフォーム300と通信すること可能にする。1つ以上の実施形態において、
図2のデバイス200のデバイス/サービス通信フレームワーク212は、アプリケーション・インターフェース302を呼び出すことによって、プラットフォーム300と通信する。デバイスは、アクセス体験特定サービス304および/またはデプロイ・サービス306に、アプリケーション・インターフェース302を通じてアクセスする。
【0049】
[0055] 体験特定サービス304は、例えば、
図1の体験サービス116である。体験特定サービス116はアプリケーションおよび/またはこのアプリケーションに種々の機能を設けるデーターを含む。設けられる個々の機能は、サービス304が機能を設けるアプリケーションのタイプに基づいて様々である。例えば、体験特定サービス304によって設けられる個々の機能は、買い物または電子店舗機能、歌または画像(または他のデーター)記憶および/または引き出し機能、検索機能、オンライン・ゲーミングのための友人または仲間との対決(matching)、ソーシャル・ネットワーク交流機能等を含むことができる。
【0050】
[0056] デプロイ・サービス306は、アプリケーションのデバイス(例えば、
図1のデバイス102または
図2のデバイス200)へのデプロイを管理する。アプリケーションのデバイスへのデプロイには、アプリケーションの初期デプロイ(例えば、アプリケーションを最初にデバイスにインストールするとき)が含まれる。また、アプリケーションのデバイスへのデプロイには、デバイスにインストールされているアプリケーションに変更をデプロイすることも含まれる。あるいは、デバイスに最初にインストールするアプリケーションは、光ディスク(例えば、DVDまたはCDROM)から、他のデバイスから等というように、他のやり方で入手することもできる。しかしながら、デバイス上における初期インストールのために、デプロイ・サービス306以外からアプリケーションを入手する場合であっても、デプロイ・サービス306はその後このアプリケーションに対する変更のデプロイを管理する。
【0051】
[0057] アプリケーションの開発者は、種々の理由から、種々の時点においてアプリケーションを変更することを望む可能性がある。例えば、開発者は、新たな機能をアプリケーションに追加する、アプリケーションにおいて発見された問題を解決する、特定のタイプのデバイス上においてアプリケーションによって情報を提示するやり方を変更する(例えば、ユーザー・フィードバックによって)等を望むこともあり得る。これらの変更は、アプリケーションに対する非常に重要な変更から、アプリケーションに対する非常に些細な変更までの範囲を取り得る。
【0052】
[0058] 開発者がアプリケーションを変更するとき、開発者はそのアプリケーションの1つ以上の体験モジュールの1つ以上のコンポーネントを変更し、その結果新たなバージョンの体験モジュールが得られる。開発者は、通例、アプリケーション全体を変更する必要はない。代わりに、所望の変更による影響を受ける体験モジュールのみを変更すればよい。例えば、10個の体験モジュールを含むアプリケーションの内1つの体験モジュールだけに影響を及ぼす変更を行うことを望む場合、その1つの体験モジュールの新たなバージョンだけを生成し、デバイスにデプロイすればよい。
【0053】
[0059] 1つ以上の実施形態では、体験モジュールにおけるコンポーネントへの変更をデプロイするには、変更する体験モジュールに対する更新パッケージを、アプリケーションをインストールしその変更を適用するデバイスに送る。更新パッケージは、体験モジュールに対する1つ以上の交換コンポーネントを含ませる、コンポーネントに対する1つ以上の変更の指示(例えば、新たなバージョンのコンポーネントと以前のバージョンのコンポーネントとの間の相違のリスト)を含ませること等によって、異なるやり方で変更を特定することができる。また、更新パッケージは、アプリケーションに追加する新たな体験モジュールの新たなコンポーネントも含むことができる。
【0054】
[0060] 開発者がアプリケーションを変更するために新たな更新パッケージを作成するとき、開発者は新たな更新パッケージをプラットフォーム300に供給する。デプロイ(deployment)306は、更新パッケージが格納されている更新レポジトリー312を含む。また、更新パッケージの以前のバージョンも更新レポジトリー312に維持し、その結果、体験モジュールの多数の異なるバージョンの更新パッケージを、更新レポジトリー312に含めることができる。
【0055】
[0061] デバイス更新コンポーネント314は、更新レポジトリー312を管理し、そして適した更新パッケージを適したデバイスに供給する。デバイス更新コンポーネント314は、更新パッケージの以前の全てのバージョンを維持することができ、あるいは種々の規準に基づいて更新パッケージの以前のバージョンを削除することができる。例えば、デバイス更新コンポーネント314は、特定の時間量が経過した後、同じコンポーネントに対して特定数の更新パッケージがその後更新レポジトリー312に格納された後等に、以前の更新パッケージを削除することができる。
【0056】
[0062] また、デバイス更新コンポーネント314は、種々の更新パッケージを記述する情報をバージョン・カタログ316に維持する。バージョン・カタログ316は、更新レポジトリー312に格納されている更新パッケージに関する種々の情報を特定する、表またはリストのような、種々の異なるデーター構造とすることができる。バージョン・カタログ316は、デバイス更新コンポーネント314が、デバイスから受信したバージョン番号の指示に基づいて、更新レポジトリー312に格納されている更新パッケージ(ある場合)の内どれをそのデバイスにデプロイすべきか決定することを可能にする。1つ以上の実施形態では、バージョン・カタログ316は、アプリケーション毎に異なる表を含み、あるいは多数のアプリケーションに同じ表を用いることもでき、表におけるどの情報がどのアプリケーションに対応するかという指示を含むことができる。
【0057】
[0063] 尚、体験モジュールに対する変更の中には、アプリケーションがインストールされている全てのタイプのデバイスに適用できない場合もあることは、注記してしかるべきである。例えば、デバイス特定プレゼンテーション・コンポーネントに対する変更は、ある特定のタイプのデバイスには行ってもよいが、他のタイプのデバイスには行わないのでもよい。したがって、体験モジュールに対する変更は、その特定の一タイプには適用するが、他のタイプのデバイスには適用しない。
【0058】
[0064] 1つ以上の実施形態では、バージョン・カタログ316は、デバイス上にインストールされている(またはインストールすることができる)アプリケーション毎に表またはリストを含み、このような各表は1つ以上のレコードを含む。各レコードは、更新レポジトリー312に格納されている個々の更新パッケージに対応する。バージョン・カタログ316内におけるレコードに対応する個々の更新パッケージは、異なるやり方で識別することができる。1つ以上の実施形態では、各レコードは、少なくとも、体験モジュール識別子、マスター・バージョン番号、およびデバイス・タイプを含む。また、更新レポジトリー312は、体験モジュール識別子、マスター・バージョン番号、およびデバイス・タイプがキーに設定されて(keyed)おり、バージョン・カタログ316および更新レポジトリー312におけるレコード間の対応を維持する。
【0059】
[0065] 表1は、1つ以上の実施形態にしたがって、バージョン・カタログ316のレコードに含まれている情報の一例を示す。尚、表1は一例であり、代わりに、異なる情報をバージョン・カタログ316のレコードに含めることもでき、および/または表1に含まれている情報の一部がバージョン・カタログ316のレコードに含まれていなくてもよいことは注記してしかるべきである。
【0060】
【表1】
[0066] アプリケーションのマスター・バージョン番号は、そのアプリケーションの新たなバージョンが出る毎に増大する。これは、アプリケーションに対する新たな更新パッケージが更新レポジトリー312に追加される毎にと言うこともできる。デバイス更新コンポーネント314が、デバイス上にインストールされているアプリケーションの現バージョンの指示を受信すると、デバイス更新コンポーネント314は、受信したバージョンを、バージョン・カタログ316におけるアプリケーションの最新マスター・バージョン番号と比較する。2つのバージョン番号が同じである場合、デバイスにデプロイする新たな更新パッケージはないことになる。しかしながら、2つのバージョン番号が同じでない場合、新たなバージョンのアプリケーションが存在するので、デバイス更新コンポーネント314は、デバイスにデプロイすべき1つ以上の更新パッケージがあるか否か判断する。
【0061】
[0067] 体験識別子は、アプリケーションに含まれている多数の体験モジュールの内どれを、更新パッケージが変更するかを示す。通例、1つの異なる更新パッケージは、1つの体験モジュールに対する変更を含むが、代わりに、1つの更新パッケージが多数の体験モジュールに対する変更を含むこともできる。
【0062】
[0068] 体験バージョン番号は、体験モジュールに対する変更がある毎に増大する。したがって、体験モジュールの体験バージョン番号は、その体験モジュールに新たな更新パッケージができる毎に増大する。つまり、マスター・バージョン番号は、アプリケーションに含まれている体験モジュールのいずれかに変更がある毎に増大するが、体験バージョン番号は、体験識別子によって識別された体験モジュールに変更があるときにのみ増大する。新たな体験モジュールが更新パッケージによって追加された場合、体験バージョン番号は特定の値(例えば、1の値)を有することができる。
【0063】
[0069] 即座更新欄(field)は、対応する更新パッケージのインストールを即座に行うべきか、または遅らせることができるかを示す。アプリケーションの開発者は、対応する更新パッケージのインストールを直ちに行うべきか、または遅らせることができるか指示し、この指示が、その特定の更新パッケージに対応するレコードの即座更新欄として追加される。
【0064】
[0070] 先に論じたように、全ての更新パッケージが全てのデバイスに適用されるとは限らない。したがって、バージョン・カタログ316におけるアプリケーションのマスター・バージョン番号が、特定のデバイスにインストールされているアプリケーションの現バージョンと異なっていても、そのアプリケーションのもっと新しいバージョンが、その特定のデバイスには適用されないこともあり得る。デバイス更新コンポーネント314は、デバイス・タイプ・マスク、ユーザー識別子、およびロカール識別子の内1つ以上に基づいて、更新パッケージが特定のデバイスに適用されるか否か判断する。ユーザー識別子およびロカール識別子は、任意に、特定のデバイスのユーザーがオプトインに設定している(またはオプトアウトに設定していない)場合にのみ、更新パッケージがこのデバイスに適用され、彼または彼女のユーザー識別子および/またはロカール識別子がこのように用いられるのを許可するか否か判断するために用いることができる。
【0065】
[0071] デバイス・タイプ・マスクは、更新パッケージが適用されるデバイスの1つ以上のタイプを示す。アプリケーションの開発者は、特定の更新パッケージが適用されるデバイスのタイプを示し、この指示が、その特定の更新パッケージに対応するレコードのデバイス・タイプ・マスクとして追加される。
【0066】
[0072] 同様に、ユーザー識別子は、更新パッケージが適用される1人以上のユーザーを示す。アプリケーションの開発者は、例えば、アプリケーションの異なる2つのバージョンを試験することを望むこともある。開発者は、2つの異なるバージョンで2つの更新パッケージを作成し、どのユーザーがどのバージョンを受け取るかを示し、この指示が、対応するレコードのユーザー識別子欄に追加される。ユーザーは、例えば、そのユーザーに付随するユーザー名(例えば、ユーザーがログイン情報をプラットフォーム300に提供してある場合)、デバイスの識別子または物理的特徴等によって識別することができる。あるいは、何人かのユーザーが、特定のアプリケーションの検査人(tester)になるためにサインアップすることもできる。デバイス更新コンポーネント314は、特定のデバイスのユーザーが検査人になるためにサインアップしたか否かの指示を受け取る(例えば、デバイス自体から、プラットフォーム300の他のコンポーネントまたはモジュールから等)。次いで、ユーザー識別子は、デバイスのユーザーの識別子に基づいて、対応する更新パッケージがそのデバイスに適用されるか否か示すことができる。
【0067】
[0073] ロカール識別子は、更新パッケージが適用されるデバイスの1つ以上の位置を示す。アプリケーションの開発者が、他の地理的位置または境界に基づいて、あるいは他の位置に基づく境界に基づいて、例えば、異なる国毎、異なる州毎に異なるバージョンのアプリケーションを有することを望むこともあり得る。開発者は、異なるバージョンで異なる更新パッケージを作成し、どのデバイス位置(device location)がどのバージョンを受けるべきかを示し、この指示を対応するレコードのロカール識別子欄(locale identifier field)に追加する。デバイス更新コンポーネント314は、特定のデバイスの位置の指示を受け取る(例えば、デバイス自体から、プラットフォーム300の他のコンポーネントまたはモジュールから等)。次いで、ロカール識別子は、デバイスの位置に基づいて、対応する更新パッケージがそのデバイスに適用されるか否か示すことができる。
【0068】
[0074] デバイス更新コンポーネント314は、種々の異なるイベントに応答して、および/または種々の異なる時点において、アプリケーションがインストールされているデバイスに、1つ以上の更新パッケージを送ることができる。1つ以上の実施形態では、デバイスのコア・コンポーネント・インターフェース(例えば、
図2のコア・コンポーネント・インターフェース216)は、規則的な間隔または不規則な間隔で(例えば、毎日)、アプリケーションが実行し始めたとき、アプリケーションの実行が終了したとき、デバイスにインストールされているアプリケーションが要求をプラットフォーム300に提出したとき等に、デプロイ・サービス306にアクセスするために、更新チェック要求を送るように構成されている。
【0069】
[0075] デバイスによって送られる更新チェック要求は、デバイスのタイプの指示、およびそのデバイスにインストールされている現アプリケーションのマスター・バージョン番号を含む。デバイス更新コンポーネント314は、バージョン・カタログ316をチェックして、アプリケーションの体験モジュールのいずれかに対して、デバイスに適用される更新パッケージがあるか否か判断する。アプリケーションの体験モジュールのいずれかに対して、デバイスに適用される更新パッケージがある場合、これらの更新パッケージをデバイスにデプロイする。そうでない場合、デバイスには更新パッケージをデプロイしない。
【0070】
[0076] あるいは、デバイスは他のやり方でアプリケーションに対する更新をチェックすることもできる。例えば、デバイス上にインストールされている現アプリケーションのマスター・バージョン番号を送る代わりに、更新チェック要求は、特定の体験モジュールの識別子、およびデバイス上にインストールされている現アプリケーションの体験モジュールの体験バージョン番号を含むことができる。つまり、デバイスは、体験モジュール毎に、体験モジュールに対する更新をチェックすることができる。
【0071】
[0077] 他の実施形態では、デバイスに更新チェック要求をプラットフォーム300に送らせる代わりに、プラットフォーム300が更新パッケージをデバイスにプッシュすることができる。例えば、デバイス更新コンポーネント314は、種々のデバイス上にインストールされているアプリケーションのマスター・バージョン番号(および/または体験バージョン番号)のレコードを維持することができる。デバイスに適用されるがまだそのデバイスにデプロイされていない更新パッケージが入手可能になったとき、デバイス更新コンポーネント314はその更新パッケージをこのデバイスにデプロイする。
【0072】
[0078] また、デプロイ・サービス306は、更新パッケージの廃止もサポートする。1つ以上の実施形態では、更新パッケージを廃止するためには、開発者が交換更新パッケージを供給する(例えば、廃止される更新パッケージの前に用いられた直前の更新パッケージとすることができる)。また、開発者は、交換更新パッケージのインストールを即座に行うべきことを示す。こうして、しかるべきデバイスに交換更新パッケージをデプロイして、直前の更新パッケージを効果的に廃止する。
【0073】
[0079] 先に論じたように、開発者がアプリケーションを変更するとき、開発者は、更新レポジトリー312に格納する変更の更新パッケージ、およびバージョン・カタログ316に含ませるための更新パッケージを記述した情報を提供する。開発者は、更新パッケージおよびこの更新パッケージを記述する情報を異なるやり方で提供することができる。例えば、更新パッケージおよびこの更新パッケージを記述する情報を、プラットフォーム300の管理者に電子通信(例えば、電子メール)によって、光ディスクまたは他の携帯用記憶媒体等によって提供することができる。次いで、プラットフォーム300の管理者は、更新パッケージを更新レポジトリー312に追加し、更新パッケージを記述する情報をバージョン・カタログ316に追加することができる。
【0074】
[0080] あるいは、更新パッケージおよびこの更新パッケージを記述する情報を、デバイス更新コンポーネント314から自動的に入手することもできる。例えば、開発者は、サーバーまたは他の計算デバイス上に、更新パッケージおよびこの更新パッケージを記述する情報を維持することができる(デプロイ・サービス306が更新パッケージおよびこの更新パッケージを記述する情報を維持するのと同様のやり方で)。デバイス更新コンポーネント314は、開発者が維持している計算デバイスに更新要求を送り、この計算デバイスから、更新パッケージおよびこの更新パッケージを記述する情報を入手することができる。このように、デバイスが更新パッケージおよびこの更新パッケージを記述する情報をデプロイ・サービス306から入手するのと同様のやり方で、デプロイ・サービス306は、自動的に、更新パッケージおよびこの更新パッケージを記述する情報を、開発者が維持している計算デバイスから入手することができる。
【0075】
[0081]
図4は、1つ以上の実施形態にしたがってアプリケーションを更新する一例を示す。
図4の例では、
図3のデプロイ・サービス306および
図2のデバイス200が示されている。デバイス200上にインストールされているアプリケーション402は、マスター・バージョン番号が58であり、3つの体験モジュールを有する。アプリケーション402における第1体験モジュールは、体験識別子がAであり、体験バージョン番号が3である。アプリケーション402における第2体験モジュールは、体験識別子がBであり、体験バージョン番号が7である。アプリケーション402における第3体験モジュールは、体験識別子がCであり、体験バージョン番号が5である。
【0076】
[0082] バージョン・カタログ316は、データー例を含む表として示されている。このバージョン・カタログの表には、多数のレコード(各々は表における横方向の行になっている)が示されている。バージョン・カタログ316の表において、第1列はマスター・バージョン番号410を示し、第2列は体験識別子412を示し、第3列は体験バージョン番号414を示し、第4列はデバイス・タイプ・マスク416を示し、最後の列は即座更新値418を示す。また、バージョン・カタログ316には、マスター・バージョン番号57の前の更新パッケージに対応する行というような、追加の行(図示せず)を含めることもできる。デバイス・タイプ・マスク416について、「C」、「M」、および「T」の値が、コンピューター・タイプのデバイス(例えば、
図1のコンピューター・デバイス106)、移動体タイプのデバイス(例えば、
図1の移動体デバイス108)、およびテレビジョンに基づくタイプのデバイス(例えば、
図1のテレビジョンに基づくデバイス110)をそれぞれ表すために用いられている。即座更新値418について、対応する更新パッケージのインストールを即座に行うべきことを示すために、「T」の値が用いられており、対応する更新パッケージのインストールを遅らせることができることを示すために、「F」の値が用いられている。
【0077】
[0083] バージョン・カタログ316から分かるように、第1行は、マスター・バージョン番号が57の更新パッケージに対応し、体験識別子Aを有する体験モジュールについてであり、体験バージョン番号が3であり、コンピューター・タイプのデバイスおよびテレビジョンに基づくタイプのデバイスについでであり、対応する更新パッケージのインストールを即座に行うべきとなっている。
【0078】
[0084] デバイス200は、更新チェック要求420をデプロイ・サービス306に送り、デバイス200のタイプ(テレビジョンに基づくタイプのデバイス)、およびデバイス200の現マスター・バージョン番号(58である)を特定する。デバイス更新コンポーネント314は、更新チェック要求をバージョン・カタログと突き合わせて評価し、マスター・バージョン番号59、61、および62に対応する更新パッケージをデバイス200にデプロイすべきであると判断する。デバイス200の現バージョン番号以下のバージョン番号を有する更新パッケージは、既にデバイス200にデプロイされている。したがって、マスター・バージョン番号57および58に対応する更新パッケージを再度デバイス200にデプロイする必要はない。
【0079】
[0085] マスター・バージョン番号59に対応する更新パッケージは、未だデバイス200にインストールされていない新しい体験モジュールに対するものであり、したがって、デバイス200にデプロイしなければならない。マスター・バージョン番号61および62に対応する更新パッケージは、双方共、デバイス200上に既にインストールされている体験モジュールの新しいバージョンに対するものであり、したがって、デバイス200にデプロイしなければならない。マスター・バージョン番号60に対応する更新パッケージは、デバイス200上にインストールされていない新しい体験モジュールに対するものであるが、テレビジョンに基づくタイプのデバイスには適用されない(移動体タイプのデバイスに適用される)。したがって、マスター・バージョン番号60に対応する更新パッケージをデバイス200にはデプロイしない。
【0080】
[0086] このように、デバイス更新コンポーネント314は、マスター・バージョン番号59、61、および62に対応する更新パッケージをデバイス200にデプロイすべきであるという指示422をデバイス200に戻す。また、バージョン・カタログ316からの種々の情報も、指示422に含めることができる。1つ以上の実施形態では、デバイス更新コンポーネント314は、デバイス200にデプロイすべき更新パッケージ毎に、マスター・バージョン番号の指示、更新パッケージが変更する体験モジュール、体験モジュールの新たなバージョンに対する体験バージョン番号、体験モジュールの新たなバージョンに対する体験バージョン番号、および対応する更新パッケージのインストールを即座に行うべきか、または遅らせることができるかの指示を戻す。
【0081】
[0087]
図2に戻って、デバイス/サービス通信フレームワーク212は、デプロイ・サービス(例えば、
図3のデプロイ・サービス306)から更新チェック要求に対する応答を受け取る。この応答は、アプリケーション218のためにデバイス200上にインストールすべき特定の1つ以上の更新パッケージがある場合、そのいずれの指示も含む。また、1つ以上の更新パッケージ自体も、デプロイ・サービスから受け取る応答に含めることができ、あるいはデバイス/サービス通信フレームワーク212が、後に、特定の1つ以上の更新パッケージに対して要求をデプロイ・サービスに提出し、このような要求に応答して、特定の1つ以上の更新パッケージを、後続の要求に応答して、受け取ることができる。
【0082】
[0088] 1つ以上の実施形態では、デバイス200上にインストールすべき1つ以上の更新パッケージをデバイス/サービス通信フレームワーク212が受け取ったとき、フレームワーク212はこれらの更新パッケージを体験ストレージ214に格納し、コア・コンポーネント・インターフェース216に、受け取った1つ以上の更新パッケージについて通知する。すると、コア・コンポーネント・インターフェース216は、更新パッケージをデバイス200上にインストールし、その結果、デバイス200上にアプリケーションの更新バージョンがインストールされる。このインストールは、特定のファイルを記憶デバイス上の特定の位置に書き込む、情報を登録ストア(例えば、オペレーティング・システムのレジストリー)に追加する、データーベース方式を更新する等というような、種々の異なる動作を含むことができる。体験ストレージ214および/またはデバイス200の他の記憶デバイスに、ファイルを書き込むことができる。状況によっては、アプリケーション218に対する更新パッケージをインストールした後、デバイス200をブートし直さないと、アプリケーション218を実行できない場合がある。他の状況では、アプリケーション218に対する更新パッケージをインストールした後、デバイス200をブートし直すことなく、アプリケーション218を実行することができる。
【0083】
[0089] 更新パッケージの指示が、対応する更新パッケージのインストールを即座に行うべきであることを示す場合、コア・コンポーネント・インターフェース216は、できるだけ早く更新パッケージをインストールする。このできるだけ早いインストールは、アプリケーション218を再度実行する前に更新パッケージをインストールし、既に実行中である場合にはアプリケーション218を停止して更新パッケージをインストールすること等を含むことができる。
【0084】
[0090] しかしながら、更新パッケージの指示が、対応する更新パッケージのインストールを遅らせることができることを示す場合、コア・コンポーネント・インターフェース216は、更新パッケージをいずれかの後の時点にインストールする。コア・コンポーネント・インターフェース216は、インストールを遅らせることができる更新パッケージをいつインストールするか、アプリケーション218を再度実行する前、アプリケーション218の実行が終了した後、デバイス200を次に切る前またはリセットする前、アプリケーション218が実行しておらずデバイス200がアイドル状態にあるとき(例えば、デバイス200上におけるプロセッサーおよび/または他のリソースの使用が閾値量よりも少ないとき)等というように、異なるやり方で決定することができる。
【0085】
[0091]
図5は、1つ以上の実施形態にしたがって、多数の体験モジュールを含むアプリケーションをインストールし、その更新パッケージを入手するプロセス例500を示すフローチャートである。プロセス500は、
図2のデバイス102、または
図2のデバイス200のようなデバイスによって実行し、ソフトウェア、ファームウェア、ハードウェア、またはその組み合わせで実現することができる。プロセス500は、1組の動作(act)として示されているが、これら種々の動作の処理(operation)を実行するために示される順序には限定されない。プロセス500は、多数の体験モジュールを含むアプリケーションを実装するプロセス例であり、多数の体験モジュールを含むアプリケーションを実装することについての、異なる図を参照した追加の論述も、本明細書に含まれる。
【0086】
[0092] プロセス500では、多数の体験モジュールを含むアプリケーションをインストールする(動作502)。このアプリケーションは、プロセス500を実装するデバイス上にインストールされ、先に論じたように、多数の体験モジュールを含む。
【0087】
[0093] このアプリケーションを実行する要求に応答して、このアプリケーションの現バージョンを実行する(動作504)。このアプリケーションの現バージョンは、プロセス500を実装するデバイス上にインストールされているアプリケーションの最新バージョンである。
【0088】
[0094] 加えて、体験モジュールの内1つに対する更新パッケージが入手可能か否かについてチェックを行う(動作506)。このような更新パッケージがあるとすれば、プロセス500を実装するデバイスに適用される更新パッケージである。このチェックは、デプロイ・サービスに更新チェック要求を送ることによって行われる。
【0089】
[0095] アプリケーションの体験モジュールに対する更新パッケージが入手可能でない場合、プロセス500は動作504に戻って、現バージョンのアプリケーションを実行する。しかしながら、体験モジュールの内1つに対する更新パッケージが入手可能である場合、この更新パッケージを入手する(動作508)。
【0090】
[0096] 入手した更新パッケージをインストールして、現バージョンのアプリケーションを更新する(動作510)。更新パッケージは、アプリケーションが実行し終えた後にインストールすることができ(例えば、更新パッケージのインストールを遅らせることができる場合)、あるいは更新パッケージをインストールすることができるように、アプリケーションは実行を終了することができ(例えば、更新パッケージを即座にインストールすべきとき)、そしてアプリケーションを再度実行する。次いで、プロセス500は動作504に戻り、現バージョンのアプリケーションを実行し続ける。
【0091】
[0097] 尚、
図5における動作の順序に拘わらず、動作506における更新パッケージの入手可能性をチェックする前に、アプリケーションを実行することができ、あるいはアプリケーションを実行する前に、更新パッケージの入手可能性をチェックすることもできることは注記してしかるべきである。
【0092】
[0098]
図6は、1つ以上の実施形態にしたがって、更新をデバイスにデプロイするプロセス例600を示すフローチャートである。プロセス600は、ソフトウェア、ファームウェア、ハードウェア、またはその組み合わせで実現することができる。
図6の左側に示すプロセス600の動作は、
図1のデバイス102、または
図2のデバイス200のようなデバイスによって実行する。
図6の右側に示すプロセス600の動作は、
図1のデプロイ・サービス118、または
図3のデプロイ・サービス306のようなデプロイ・サービスによって実行する。プロセス600は、1組の動作(act)として示されているが、これら種々の動作の処理(operation)を実行するために示される順序には限定されない。プロセス600は、更新をデバイスにデプロイするプロセス例であり、更新をデバイスにデプロイすることについての、異なる図を参照した追加の論述も本明細書に含まれる。
【0093】
[0099] プロセス600では、更新パッケージのレポジトリーおよび更新パッケージ記述のカタログを、デプロイ・サービスにおいて維持する(動作602)。更新パッケージは、先に論じたように、個々のアプリケーションの体験モジュールに対する変更を含む。
【0094】
[00100] デバイスは、更新チェック要求をデプロイ・サービスに送る(動作604)。先に論じたように、更新チェック要求は、種々の時点においておよび/または種々のイベントに応答して送ることができる。
【0095】
[00101] デプロイ・サービスは、更新チェック要求を受け取り(動作606)、デバイスに適用するあらゆる更新パッケージを特定する(動作608)。更新パッケージをデバイスに適用するか否かは、デバイス上における現在の体験モジュールのバージョン、デバイスのタイプ、デバイスのユーザー等というような、先に論じたような種々の異なる規準に応じて判断することができる。
【0096】
[00102] デバイスに適用するあらゆる更新パッケージの指示をデバイスに戻す(動作610)。この指示は、デバイスに適用する0個以上の更新パッケージを特定する。
[00103] デバイスは、あらゆる更新パッケージの指示をデプロイ・サービスから受け取り(動作612)、この指示をチェックして、1つ以上の更新パッケージをデバイスに適用するか否か判断する(動作614)。
【0097】
[00104] デバイスに適用する更新パッケージがない場合、現在の更新についてのチェックは終了する(動作616)。しかしながら、デプロイ・サービスは、更新パッケージのレポジトリーおよび更新パッケージ記述のカタログを維持し続け(動作602)、今後デプロイ・サービスに送られる更新チェック要求のために、プロセス600を繰り返すことができる。
【0098】
[00105] しかしながら、1つ以上の更新パッケージをデバイスに適用する場合、更新パッケージ要求をデプロイ・サービスに送る(動作618)。この更新パッケージ要求は、デバイスに適用する1つ以上の更新パッケージをデプロイ・サービスから入手するための要求である。
【0099】
[00106] デプロイ・サービスは、更新パッケージ要求を受け取り(動作620)、要求された1つ以上の更新パッケージをデバイスに送ることによって応答する(動作622)。1つ以上の更新パッケージは、異なるやり方で(更新パッケージに付随するマスター・バージョン番号を用いることによってというように)特定することができる。デバイスは、要求した1つ以上の更新パッケージを受け取り(動作624)、受け取った1つ以上の更新パッケージをデバイス上にインストールする(動作626)。1つ以上の更新パケットの各々のインストールは、先に論じたように、即座に行うこと、または遅らせることができる。次いで、更新についての現在のチェックは終了する(動作616)。しかしながら、デプロイ・サービスは、更新パッケージのレポジトリーおよび更新パッケージ記述のカタログ維持し続け(動作602)、今後デプロイ・サービスに送られる更新チェック要求のために、プロセス600を繰り返すことができる。
【0100】
[00107] あるいは、1つ以上の更新パッケージをデバイスに適用する場合、動作610において、これらの更新パッケージをデバイスに戻すことができる。このような状況では、動作616〜620を実行する必要はない。
【0101】
[00108]
図7は、1つ以上の実施形態にしたがって、多数の体験モジュールを含むアプリケーションを実行するように構成することができる計算デバイス例700を示す。計算デバイス700は、例えば、
図1のデバイス102、
図2のデバイス200とすることができ、
図1のプラットフォーム114または
図3のプラットフォーム300の少なくとも一部を実装することができる。
【0102】
[00109] 計算デバイス700は、1つ以上のプロセッサーまたは演算装置702、1つ以上のメモリーおよび/または記憶コンポーネント706を含むことができる1つ以上のコンピューター読み取り可能媒体、1つ以上の入力/出力(I/O)デバイス708、ならびに種々のコンポーネントおよびデバイスが互いに通信することを可能にするバス710を含む。コンピューター読み取り可能媒体704および/または1つ以上のI/Oデバイス708は、計算デバイス700の一部として含ませることができ、あるいは計算デバイス700に結合されてもよい。バス710は、数種類のバス構造の内1つ以上を表し、メモリー・バスまたはメモリー・コントローラー、周辺バス、加速グラフィクス・ポート、プロセッサーまたはローカル・バス、および種々の異なるバス構造を用いるその他を含む。バス710は、有線バスおよび/またはワイヤレス・バスを含むことができる。
【0103】
[00110] メモリー/記憶コンポーネント706は、1つ以上のコンピューター記憶媒体を表す。コンポーネント706は、揮発性媒体(ランダム・アクセス・メモリー(RAM)のような媒体)、および/または不揮発性媒体(リード・オンリー・メモリー−(ROM)、フラッシュ・メモリー、光ディスク、磁気ディスク等のような媒体)を含むことができる。コンポーネント706は、固定媒体(例えば、RAM、ROM、固定ハード・ドライブ等)、およびリムーバブル媒体(例えば、フラッシュ・メモリー・ドライブ、リムーバブル・ハード・ドライブ、光ディスク等)を含むことができる。
【0104】
[00111] 本明細書において論じた技法は、1つ以上の演算装置702によって命令を実行することによって、ソフトウェアで実現することができる。尚、演算装置702、演算装置702の種々のキャッシュ・メモリー、デバイス700(図示せず)の他のキャッシュ・メモリー、他のコンピューター読み取り可能媒体等というような、計算デバイス700の異なるコンポーネントに、異なる命令を格納できることは認められてしかるべきである。加えて、計算デバイス700において命令を格納する場所は、ときの経過と共に変化する可能性があることも認められてしかるべきである。
【0105】
[00112] 1つ以上の入力/出力デバイス708は、ユーザーがコマンドおよび情報を計算デバイス700に入力することを可能にし、更に情報をユーザーおよび/または他のコンポーネントまたはデバイスに提示するのを可能にする。入力デバイスの例には、キーボード、カーソル制御デバイス(例えば、マウス)、マイクロフォン、スキャナー等が含まれる。出力デバイスの例には、ディスプレイ・デバイス(例えば、モニターまたはプロジェクター)、スピーカー、プリンター、ネットワーク・カード等が含まれる。
【0106】
[00113] 本明細書では、種々の技法をソフトウェアまたはプログラム・モジュールという一般的なコンテキストで説明することができる。一般に、ソフトウェアは、ルーチン、プログラム、オブジェクト、コンポーネント、データー構造等を含み、これらは特定のタスクを実行するか、または特定の抽象データー型を実装する。これらのモジュールおよび技法の実施態様は、コンピューター読み取り可能媒体上に格納することができ、またはコンピューター読み取り可能媒体の何らかの形態を通じて伝達することができる。コンピューター読み取り可能媒体は、計算デバイスによってアクセスすることができ入手可能な1つまたは複数のいずれの媒体でも可能である。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、「コンピューター記憶媒体」および「通信媒体」を含むことができる。
【0107】
[00114] 「コンピューター記憶媒体」は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターというような情報の格納のための方法または技術であればそのいずれでも実現できる。コンピューター記憶媒体は、RAM、ROM、EEPROM、フラッシュ・メモリーまたはその他のメモリー技術、CD−ROM、ディジタル・バーサタイル・ディスク(DVD)またはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたはその他の磁気記憶デバイス、あるいは所望の情報を格納するために用いることができ、コンピューターによってアクセスすることができる他のあらゆる媒体を含むが、これらに限定されるのではない。
【0108】
[00115] 「通信媒体」は、通例、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターを、搬送波というような変調データー信号、または他の伝達メカニズムに具体化する。また、通信媒体は、あらゆる情報配信媒体も含む。「変調データー信号」という用語は、その特性の1つ以上が、内部に情報をエンコードするようなやり方で設定または変化させられている信号を意味する。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続のような有線媒体と、音響、RF、赤外線、およびその他のワイヤレス媒体というようなワイヤレス媒体とを含む。以上の内いずれの組み合わせも、コンピューター読み取り可能媒体の範囲に含まれる。
【0109】
[00116] 一般に、本明細書において記載した機能または技法は、そのいずれもが、ソフトウェア、ファームウェア、ハードウェア(例えば、固定論理回路)、手作業の処理、またはこれらの実施態様の組み合わせを用いて実現することができる。「モジュール」および「コンポーネント」という用語は、本明細書において用いる場合、一般にソフトウェア、ファームウェア、ハードウェア、またはその組み合わせを表す。ソフトウェア実施態様の場合、モジュールまたはコンポーネントは、プロセッサー(例えば、1つまたは複数のCPU)において実行されると、指定されたタスクを実行するプログラム・コードを表す。プログラム・コードは、1つ以上のコンピューター読み取り可能メモリー・デバイスに格納することができる。これらの更に詳しい説明は、
図7を参照すれば見つけることができる。本明細書に記載した、多数の体験モジュールを含むアプリケーションの特徴は、プラットフォームに依存しないということであり、種々のプロセッサーを有する種々の商用計算プラットフォームにおいて、本技術を実現できることを意味する。
【0110】
[00117] 以上、構造的特徴および/または方法論的動作に特定的な文言で主題について説明したが、添付した特許請求の範囲において定義されている主題は、以上に記載した特定的な特徴または動作には必ずしも限定されないことは言うまでもない。逆に、以上に記載した特定的な特徴および動作は、特許請求の範囲を実現する形態例として開示したのである。