(57)【要約】  いくつかの例において、方法は、コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することと、コンピューティングデバイスの現在のユーザを決定することと、アプリケーションのリセット状態を決定することとを含む。上記方法はさらに、コンピューティングデバイスの現在のユーザと、リセット状態と、アプリケーションについてのアプリケーション識別子とに基づき、現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、一意識別子と情報についての１つ以上の要求とをアプリケーションサービスプロバイダに送信することと、情報についての１つ以上の要求を送信することに応答して、アプリケーションサービスプロバイダから、アプリケーションについての現在のユーザに関連付けられる状態情報を受信することとを含み得る。
2019503524.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することを含み、さらに、
前記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが前記コンピューティングデバイスのメモリに割り当てられていると決定することに応答して、
前記アプリケーションコンテナのコンテナランタイムによって、前記コンピューティングデバイスの現在のユーザを決定することと、
前記コンテナランタイムによって、前記アプリケーションのリセット状態を決定することとを含み、さらに、
前記コンテナランタイムによって、前記コンピューティングデバイスの前記現在のユーザと、前記リセット状態と、前記アプリケーションについてのアプリケーション識別子とに基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、
前記コンピューティングデバイスによって、前記一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、
前記情報についての１つ以上の要求を送信することに応答して、前記コンピューティングデバイスによって、前記アプリケーションサービスプロバイダから、前記アプリケーションについての前記現在のユーザに関連付けられる状態情報を受信することとを含む、方法。
【請求項２】
前記アプリケーションを実行するための前記要求は、前記アプリケーションを実行するための第１の要求であり、前記アプリケーションコンテナは第１のアプリケーションコンテナであり、前記方法はさらに、
前記スーパーバイザーコンポーネントによって、前記アプリケーションの前記インストール可能なサブパッケージを維持するための前記第１のアプリケーションコンテナを割当解除することと、
前記第１のアプリケーションコンテナを割当解除した後、前記コンピューティングデバイスによって、前記アプリケーションを実行するための第２の要求を受信することとを含み、さらに、
前記アプリケーションを実行するための前記第２の要求を受信することに応答して、
前記スーパーバイザーコンポーネントによって、前記アプリケーションの前記インストール可能なサブパッケージを維持するための第２のアプリケーションコンテナを割り当てることと、
前記第２のアプリケーションコンテナによって、前記アプリケーションを実行するための前記第２の要求において特定される前記アプリケーションの機能を実行するために必要とされる前記アプリケーションの前記インストール可能なサブパッケージの１つ以上をインストールすることと、
前記第２のアプリケーションコンテナのコンテナランタイムによって、前記アプリケーションのアップデートされた現在のユーザを決定することとを含み、前記アップデートされた現在のユーザは前記現在のユーザと同じであり、さらに、
前記コンテナランタイムによって、前記アプリケーションのアップデートされたリセット状態を決定することを含み、前記リセット状態は前記アップデートされたリセット状態と同じであり、さらに、
前記アプリケーションコンテナのコンテナランタイムによって、前記アップデートされた現在のユーザおよび前記アップデートされたリセット状態に基づいて、前記アップデートされた現在のユーザについての個人を識別可能である情報を含んでいないアップデートされた一意識別子を生成することを含み、前記アップデートされた一意識別子は前記一意識別子と同じであり、さらに、
前記コンピューティングデバイスによって、前記アプリケーションサービスプロバイダに前記アップデートされた一意識別子を送信することと、
前記コンピューティングデバイスによって、前記アプリケーションについて前記現在のユーザに関連付けられる前記状態情報を前記アプリケーションサービスプロバイダから受信することとを含む、請求項１に記載の方法。
【請求項３】
前記一意識別子は第１の一意識別子であり、前記コンピューティングデバイスは第１のコンピューティングデバイスであり、前記方法はさらに、
第２のコンピューティングデバイスによって、前記アプリケーションの異なるインスタンスを実行するための要求を受信することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスの現在のユーザを決定することと、
前記第２のコンピューティングデバイスによって、前記第２のデバイス上で前記アプリケーションのリセット状態を決定することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスの前記現在のユーザおよび前記第２のデバイス上の前記アプリケーションの前記リセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、前記リセット状態および前記アップデートされたリセット状態が同じである場合、前記第１の一意識別子および前記第２の一意識別子は同じであり、前記リセット状態が前記アップデートされたリセット状態とは異なる場合、前記第１の一意識別子および前記第２の一意識別子は異なり、さらに、
前記第２のコンピューティングデバイスによって、前記アプリケーションサービスプロバイダに前記第２の一意識別子を送信することと、
前記第１の一意識別子および前記第２の一意識別子が同じである場合、前記第２のコンピューティングデバイスによって、前記アプリケーションサービスプロバイダから前記１つ以上のアプリケーション要求に関する情報を受信することとを含む、請求項１および請求項２のいずれかの組み合わせに記載の方法。
【請求項４】
前記一意識別子は第１の一意識別子であり、前記方法はさらに、
前記コンピューティングデバイスによって、前記アプリケーションの状態をリセットするための要求を受信することと、
前記コンピューティングデバイスによって、前記アプリケーションの前記リセット状態をアップデートすることと、
前記コンピューティングデバイスによって、前記コンピューティングデバイスの前記現在のユーザおよび前記アプリケーションのアップデートされた前記リセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、前記第１の一意識別子および前記第２の一意識別子は異なっており、さらに、
前記コンピューティングデバイスによって、前記アプリケーションの前記状態をリセットした後、前記現在のユーザが前記アプリケーションサービスプロバイダには異なるユーザであるように現れるように、前記第２の一意識別子をアプリケーションサービスプロバイダに送信することを含む、請求項１〜３のいずれかの組み合わせに記載の方法。
【請求項５】
前記コンピューティングデバイスは、第１のコンピューティングデバイスであり、第２のコンピューティングデバイスは前記現在のユーザに関連付けられており、前記方法はさらに、
前記アプリケーションの前記状態をリセットするための前記要求を前記第１のコンピューティングデバイスから前記第２のコンピューティングデバイスに送信することと、
前記アプリケーションの前記状態をリセットするための前記要求を受信することに応答して、前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスにおける前記アプリケーションの前記リセット状態を、前記第１のコンピューティングデバイスにおける前記アプリケーションの前記リセット状態と同じになるようにアップデートすることとを含む、請求項４に記載の方法。
【請求項６】
前記一意識別子を生成することは、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルをハッシュすることを含む、請求項１〜５のいずれかの組み合わせに記載の方法。
【請求項７】
前記状態情報は、前記アプリケーションの現在状態に関する情報と、前記アプリケーションについての前記現在のユーザの履歴アプリケーション使用情報と、前記アプリケーションについての前記ユーザのユーザプレファレンス情報とのうちの１つ以上を含む、請求項１〜６のいずれかの組み合わせに記載の方法。
【請求項８】
請求項１〜７に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【請求項９】
コンピューティングシステムによって、第１のコンピューティングデバイスにおいて実行されるアプリケーションから、前記第１のコンピューティングデバイスのユーザを一意に識別するとともに個人を識別する情報を含んでいない識別子を受信することと、
前記コンピューティングシステムによって、前記第１のコンピュータにおいて実行される前記アプリケーションから、情報についての１つ以上の要求を受信することとを含み、前記１つ以上の要求は、ユーザプレファレンス情報についての要求を含んでおり、さらに、
前記コンピューティングシステムによって、前記１つ以上の要求に関する情報と前記識別子とに基づき、前記識別子に関連付けられる１つ以上の履歴要求情報をアップデートすることを含み、前記履歴情報は前記識別子に関連付けられるユーザプレファレンス情報を含んでおり、さらに、
前記コンピューティングシステムによって、第２のコンピューティングデバイスにおいて実行されるアプリケーションから前記識別子を受信することを含み、前記第１のコンピューティングデバイス上で実行される前記アプリケーションと、前記第２のコンピューティングデバイス上で実行される前記アプリケーションとは、単一のアプリケーションの異なるインスタンスであり、さらに、
前記コンピューティングシステムによって、前記識別子に基づいて、前記識別子に関連付けられる前記履歴要求情報に含まれるユーザプレファレンス情報を決定することと、
前記コンピューティングシステムによって、前記第２のコンピューティングデバイスに、前記識別子に関連付けられる前記履歴要求情報に含まれる前記ユーザプレファレンス情報の少なくとも部分を送信することとを含む、方法。
【請求項１０】
前記コンピューティングシステムによって、前記第１のコンピュータにおいて実行される前記アプリケーションから、前記情報についての１つ以上の付加的な要求を受信することをさらに含み、前記１つ以上の付加的な要求は、前記第１のコンピューティングデバイスの前記ユーザを一意に識別するとともに個人を識別する情報を含んでいない異なる識別子を含んでおり、さらに、
前記コンピューティングシステムによって、前記異なる識別子に基づいて、前記異なる識別子に関連付けられる履歴要求情報に含まれる異なるユーザプレファレンス情報を決定することと、
前記コンピューティングシステムによって、前記第２のコンピューティングデバイスに、前記異なるユーザプレファレンス情報の少なくとも部分を送信することとを含む、請求項９に記載の方法。
【請求項１１】
前記コンピューティングシステムによって、前記情報についての前記１つ以上の要求と前記識別子とに基づき、前記情報を決定することと、
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスに、前記情報の少なくとも部分を送信することとをさらに含む、請求項９に記載の方法。
【請求項１２】
前記履歴要求情報はさらに、前記アプリケーションの現在状態に関する情報と、アプリケーション使用情報とのうちの１つ以上を含む、請求項９に記載の方法。
【請求項１３】
前記識別子は、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルを少なくともハッシュすることにより生成される、請求項９に記載の方法。
【請求項１４】
前記第１のコンピューティングデバイスおよび前記第２のコンピューティングデバイスは同じコンピューティングデバイスであり、前記第２のコンピューティングデバイスにおいて実行される前記アプリケーションの前記異なるインスタンスは、前記アプリケーションの再インストールの後に同じコンピューティングデバイス上で実行される前記アプリケーションのインスタンスである、請求項９に記載の方法。
【請求項１５】
請求項９〜１４に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
コンピューティングデバイスは、アプリケーションを実行し、ユーザ入力を受信し、表示のための情報を出力するといった、さまざまな機能を実行し得る。たとえば、コンピューティングデバイスは、Ｅメールクライアント、トラベルアシスタントおよびメッセージングクライアントなどといったアプリケーションを実行し得る。複数のデバイスにわたって状態情報（たとえばユーザプレファレンス、ユーザ関心情報、履歴ユーザ挙動情報など）を維持するためには、ユーザは典型的に、当該アプリケーションについてユーザアカウントを作成することが必要であるか、またはそうでなければ、個人を識別可能である情報を提供して、アプリケーションに関連付けられるサーバが状態情報を格納し、ユーザが異なるデバイスでログインしたときまたはアプリケーション再インストールの後に、サーバがユーザを識別し、当該ユーザについての状態情報をデバイスに送信し得るようにすることが必要である。
【発明の概要】
【課題を解決するための手段】
【０００２】
概要
一般に、本開示の技術は、アプリケーションおよびコンピューティングデバイスが、安定識別子（stable identifier）を要求することなく、複数のデバイスにわたって、および、複数のアプリケーションインストールおよびアンインストールにわたって、状態情報を維持することを可能にする。たとえば、この開示の技術は、特定のアプリケーションまたはデバイスについて状態情報を使用するために各アプリケーションまたは各デバイスにログインすることをユーザに要求するのではなく、アプリケーションが、各アプリケーションおよびユーザについて一意であるオペーク識別子（opaque identifier）を使用することと、当該アプリケーションにこのオペーク識別子を提供することとを可能にする。識別子がオペーク識別子であるということは、識別子が、ユーザを個人的に識別する情報を含んでいないが、複数のデバイスにわたって、および、複数のアプリケーション再インストールにわたって、一貫しているということである。アプリケーションデベロッパは、このオペーク識別子を使用して、さまざまな他のデバイスまたはアプリケーションインストールに状態情報を提供し得る。すなわち、この開示の技術は単に、個人を識別可能な情報をデベロッパに提供することをユーザに要求することなく状態情報がコンピューティングデバイス間で維持され得るメカニズムを提供することを可能にするだけでなく、コンピューティングデバイスが、複数のアプリケーション再インストールにわたって状態情報を維持することによって、コンピューティングデバイスのユーザにトランスぺアレントである態様で、アプリケーションをアンインストールおよび再インストールすることも可能にする。
【０００３】
一例において、方法は、コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することを含み、さらに、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリに割り当てられていると決定することに応答して、アプリケーションコンテナのコンテナランタイムによって、コンピューティングデバイスの現在のユーザを決定することと、コンテナランタイムによって、アプリケーションのリセット状態を決定することとを含み、さらに、コンテナランタイムによって、コンピューティングデバイスの現在のユーザと、リセット状態と、アプリケーションについてのアプリケーション識別子とに基づき、現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、コンピューティングデバイスによって、一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、情報についての１つ以上の要求を送信することに応答して、コンピューティングデバイスによって、アプリケーションサービスプロバイダから、アプリケーションについての現在のユーザに関連付けられる状態情報を受信することとを含む。
【０００４】
別の例において、コンピューティングデバイスは、スーパーバイザーコンポーネントを格納する１つ以上のストレージデバイスと、１つ以上のプロセッサとを含む。１つ以上のプロセッサは、スーパーバイザーコンポーネントを実行して、アプリケーションを実行するための要求を受信することと、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが１つ以上のストレージデバイスにおいて割り当てられているかどうか決定することとを行わせる。１つ以上のプロセッサはアプリケーションコンテナを実行して、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが１つ以上のストレージデバイスに割り当てられていると決定することに応答して、コンピューティングデバイスの現在のユーザを決定することと、アプリケーションのリセット状態を決定することと、コンピューティングデバイスの現在のユーザと、リセット状態と、アプリケーションについてのアプリケーション識別子とに基づき、現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、情報についての１つ以上の要求を送信することに応答して、アプリケーションサービスプロバイダから、アプリケーションについての現在のユーザに関連付けられる状態情報を受信することとを行わせる。
【０００５】
別の例において、方法は、コンピューティングシステムによって、第１のコンピューティングデバイスにおいて実行されるアプリケーションから、第１のコンピューティングデバイスのユーザを一意に識別するとともに個人を識別する情報を含んでいない識別子を受信することと、コンピューティングシステムによって、第１のコンピュータにおいて実行されるアプリケーションから、情報についての１つ以上の要求を受信することとを含み、１つ以上の要求は、ユーザプレファレンス情報についての要求を含んでおり、さらに、コンピューティングシステムによって、１つ以上の要求に関する情報と識別子とに基づき、識別子に関連付けられる１つ以上の履歴要求情報をアップデートすることを含み、履歴情報は識別子に関連付けられるユーザプレファレンス情報を含む。上記方法はさらに、コンピューティングシステムによって、第２のコンピューティングデバイスにおいて実行されるアプリケーションから識別子を受信することを含み、第１のコンピューティングデバイス上で実行されるアプリケーションと、第２のコンピューティングデバイス上で実行されるアプリケーションとは、単一のアプリケーションの異なるインスタンスであり、さらに、コンピューティングシステムによって、識別子に基づいて、識別子に関連付けられる履歴要求情報に含まれるユーザプレファレンス情報を決定することと、コンピューティングシステムによって、第２のコンピューティングデバイスに、識別子に関連付けられる履歴要求情報に含まれるユーザプレファレンス情報の少なくとも部分を送信することとを含む。
【０００６】
別の例において、装置は、アプリケーションを実行するための要求を受信するための手段と、コンピューティングデバイスの現在のユーザを決定するための手段と、アプリケーションのリセット状態を決定するための手段と、コンピューティングデバイスの現在のユーザと、リセット状態と、アプリケーションについてのアプリケーション識別子とに基づき、現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成するための手段と、一意識別子と情報についての１つ以上の要求とをアプリケーションサービスプロバイダに送信するための手段と、アプリケーションについての現在のユーザに関連付けられる状態情報をアプリケーションサービスプロバイダから受信するための手段とを含む。
【０００７】
別の例では、装置は、第１のコンピューティングデバイスにおいて実行されるアプリケーションから、第１のコンピューティングデバイスのユーザを一意に識別するとともに個人を識別する情報を含んでいない識別子を受信するための手段と、第１のコンピュータにおいて実行されるアプリケーションから、情報についての１つ以上の要求を受信するための手段とを含み、１つ以上の要求は、ユーザプレファレンス情報についての要求を含んでおり、さらに、１つ以上の要求に関する情報と識別子とに基づき、識別子に関連付けられる１つ以上の履歴要求情報をアップデートするための手段を含み、履歴情報は識別子に関連付けられるユーザプレファレンス情報を含む。装置はさらに、第２のコンピューティングデバイスにおいて実行されるアプリケーションから識別子を受信するための手段を含み、第１のコンピューティングデバイス上で実行されるアプリケーションと、第２のコンピューティングデバイス上で実行されるアプリケーションとは、単一のアプリケーションの異なるインスタンスであり、さらに、識別子に基づいて、識別子に関連付けられる履歴要求情報に含まれるユーザプレファレンス情報を決定するための手段と、第２のコンピューティングデバイスに、識別子に関連付けられる履歴要求情報に含まれるユーザプレファレンス情報の少なくとも部分を送信するための手段とを含み得る。
【０００８】
１つ以上の例の詳細を添付の図面および以下の説明で述べる。本開示の他の特徴、目的および利点は、記載および図面ならびに添付の請求の範囲から明白になるであろう。
【図面の簡単な説明】
【０００９】
【図１】この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するための例示的なコンピューティングシステムを示すブロック図である。
【図２】この開示の技術に従った、エフェメラルアプリケーション（ephemeral application）についての複数のアプリケーションインスタンスにわたって識別子を提供する例示的なコンピューティングデバイスを示す概念図である。
【図３】本開示の１つ以上の局面に従った、コンピューティングデバイスのさらなる詳細を示すブロック図である。
【図４】この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するコンピューティングシステムの例示的な動作を示すフローチャートである。
【図５Ａ】この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するコンピューティングデバイスの例示的な動作を示すフローチャートである。
【図５Ｂ】この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するコンピューティングデバイスの例示的な動作を示すフローチャートである。
【発明を実施するための形態】
【００１０】
詳細な説明
図１は、この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するための例示的なコンピューティングシステムを示すブロック図である。図１のシステム１００は、ネットワーク１３０を介してコンピューティングデバイス１１０Ａ〜１１０Ｎ（まとめて「コンピューティングデバイス１１０」と称される）と通信するアプリケーションサービスプロバイダシステム１７０を含む。
【００１１】
ネットワーク１３０は、たとえば、セルラーネットワーク、Ｗｉ−Ｆｉ（登録商標）ネットワーク、および/または、他のタイプのネットワークといった、コンピューティングシステムとサーバとコンピューティングデバイスとの間でデータを送信するための任意のパブリック通信ネットワークまたはプライベート通信ネットワークを表わす。たとえば、アプリケーションサービスプロバイダシステム１７０は、コンピューティングデバイス１１０がネットワーク１３０に接続されている場合、共有されたアプリケーション状態情報を提供するよう、ネットワーク１３０を介してコンピューティングデバイス１１０とデータを交換し得、また、コンピューティングデバイス１１０は、他のデータとの間で、状態情報のリセット状態を同期させるようネットワーク１３０を介してデータを交換し得る。ネットワーク１３０は、動作可能に相互結合される１つ以上のネットワークハブ、ネットワークスイッチ、ネットワークルータまたは任意の他のネットワーク機器を含み得、これにより、コンピューティングデバイス１１０とアプリケーションサービスプロバイダシステム１７０との間の情報の交換が提供される。コンピューティングデバイス１１０およびアプリケーションサービスプロバイダシステム１７０は、任意の好適な通信技術を使用して、ネットワーク１３０を介してデータを送受信し得る。コンピューティングデバイス１１０およびアプリケーションサービスプロバイダシステム１７０は各々、それぞれのネットワークリンクを使用してネットワーク１３０に動作可能に結合され得る。コンピューティングデバイス１１０およびアプリケーションサービスプロバイダシステム１７０をネットワーク１３０に結合するリンクは、イーサネット（登録商標）または他のタイプのネットワーク接続であってもよく、そのような接続は無線および／または有線接続であってもよい。
【００１２】
アプリケーションサービスプロバイダシステム１７０は、１つ以上のデスクトップコンピュータ、ラップトップコンピュータ、メインフレーム、サーバ、クラウドコンピューティングシステムなどといった、ネットワーク１３０のようなネットワークを介してコンピューティングデバイス１１０に情報を送信することおよびコンピューティングデバイス１１０から情報を受信することが可能である任意の好適なリモートコンピューティングシステムを表わす。アプリケーションサービスプロバイダシステム１７０は、１つ以上のアプリケーションについてのそれぞれの状態情報のような、コンピューティングデバイス１１０によって実行可能な１つ以上のアプリケーションに関連付けられる情報をホスティング（または少なくとも当該情報へのアクセスを提供）する。いくつかの例において、アプリケーションサービスプロバイダシステム１７０は、クラウドを介してアプリケーションサービスを提供するクラウドコンピューティングシステムを表わす。
【００１３】
コンピューティングデバイス１１０の各々は、それぞれ個々のモバイルコンピューティングデバイスまたは非モバイルコンピューティングデバイスを表わす。コンピューティングデバイス１１０の例は、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、サーバ、メインフレーム、セットトップボックス、テレビジョン、ウェアラブルデバイス（たとえば、コンピュータ化されたウォッチ、コンピュータ化されたアイウェア、コンピュータ化された手袋など）、ホームオートメーションデバイスもしくはシステム（たとえば、インテリジェントサーモスタットもしくはホームアシスタントデバイス）、携帯情報端末（ＰＤＡ）、ゲームシステム、メディアプレイヤー、ｅブックリーダ、モバイルテレビジョンプラットフォーム、自動車ナビゲーションもしくは情報娯楽システム、または、ネットワーク１３０のようなネットワークを介して情報を送受信するように構成される任意の他のタイプのモバイルコンピューティングデバイス、非モバイルコンピューティングデバイス、ウェアラブルコンピューティングデバイス、および、非ウェアラブルコンピューティングデバイスを含む。
【００１４】
コンピューティングデバイス１１０は、ユーザインターフェイスデバイス（ＵＩＤ）１１２Ａ〜１１２Ｎ（まとめて「ＵＩＤ１１２」と称される）と、ユーザインターフェイス（ＵＩ）モジュール１２０Ａ〜１２０Ｎ（まとめて「ＵＩ１２０」と称される）と、一意識別子モジュール１２２Ａ〜１２２Ｎ（まとめて「一意識別子モジュール１２２」と称される）と、アプリケーション１２４Ａ〜１２４Ｎ（まとめて「アプリケーション１２４」と称される）とを含む。別個のモジュールとして示されているが、いくつかの例では、一意識別子モジュール１２２の機能はアプリケーション１２４に含まれてもよく、その一例は以下に図２に関して記載される。モジュール１２０および１２２は、それぞれのコンピューティングデバイス１１０において常駐および／または実行されるソフトウェア、ハードウェア、ファームウェア、または、ハードウェア、ソフトウェアおよびファームウェアの組み合わせを使用して、記載される動作を実行し得る。コンピューティングデバイス１１０は、複数のプロセッサまたは複数のデバイスによりモジュール１２０および１２２を実行し得る。コンピューティングデバイス１１０は、存在するハードウェア上で実行されるバーチャルマシンとしてモジュール１２０および１２２を実行し得る。モジュール１２０および１２２は、オペレーティングシステムまたはコンピューティングプラットフォームの１つ以上のサービスとして実行され得る。モジュール１２０および１２２は、コンピューティングプラットフォームのアプリケーション層において１つ以上の実行可能プログラムとして実行され得る。
【００１５】
コンピューティングデバイス１１０のＵＩＤ１１２は、コンピューティングデバイス１１０のための入力および／または出力デバイスとして機能し得、コンピューティングデバイス１１０がユーザインターフェイスを提供することが可能になるさまざまな技術を使用して実現され得る。たとえば、ＵＩＤ１１２の各々は、ユーザ入力を受信することにおいて使用されるマイクロフォン技術、赤外線センサ技術、存在感知型入力スクリーン、タッチスクリーン、圧力感知型スクリーン、または、他の入力デバイス技術を用いて入力デバイスとして機能し得る。ＵＩＤ１１２の各々は、ユーザに情報を出力することにおいて使用される任意の１つ以上のディスプレイデバイス、スピーカ技術、触覚フィードバック技術、または、他の出力デバイス技術を用いて出力（たとえばディスプレイ）デバイスとして機能し得る。図１の例では、ＵＩＤ１１２は、コンピューティングデバイス１１０において実行されるかまたはコンピューティングデバイス１１０からアクセス可能である１つ以上のアプリケーション１２４もしくは他のモジュール、コンポーネント、アプリケーション、および／または、サービスによって生成されるアプリケーショングラフィカルユーザインターフェイスを含むユーザインターフェイスを表示し得る。
【００１６】
ＵＩモジュール１２０の各々は、それぞれのＵＩＤ１１２およびコンピューティングデバイス１１０の他の入出力コンポーネントとのユーザインタラクションを管理し得る。なぜならば、当該インタラクションは、コンピューティングデバイス１１０によって提供されるユーザインターフェイスに関係があるからである。たとえば、１つ以上のＵＩモジュール１２０は、それぞれのＵＩＤ１１２に表示のためにユーザインターフェイスを出力させるコマンドおよび／または命令をそれぞれのＵＩＤ１１２に送信し得る。ＵＩモジュール１２０の各々は、ユーザがユーザインターフェイスとインタラクションする際に対応するＵＩＤ１１２によって検出される入力の１つ以上の指示（たとえば、タッチデータ、音声データなど）を受信し得る。ＵＩモジュール１２０は、ＵＩＤ１１２にユーザインターフェイスの提示を修正させる入力の指示に応答して、アップデートされた命令およびコマンドをＵＩＤ１１２に送信し得る。ＵＩモジュール１２０は、ＵＩＤ１１２によって検出される入力の指示を解釈し得、入力に関する情報をコンピューティングデバイス１１０の他のコンポーネント（たとえば、オペーク識別子モジュール１２２、コンピューティングデバイス１１０の他のモジュール、コンピューティングデバイス１１０において実行されるアプリケーション１２４、および／または、コンピューティングデバイス１１０において実行されるかもしくはコンピューティングデバイス１１０にアクセス可能であるサービス）にリレーし得る。ＵＩモジュール１２０は、ＵＩＤ１１２にユーザインターフェイスの提示をさらに修正させるよう、ＵＩモジュール１２０が他のコンポーネントから受信する他の情報に基づき、アップデートされた命令およびコマンドをＵＩＤ１１２に送信し得る。
【００１７】
この開示の技術に従うと、コンピューティングデバイス１１０Ａのユーザは、アプリケーション（たとえばアプリケーション１２４Ａａ）を実行するためにユーザ入力を提供し得る。ユーザ入力は、タッチ入力、音声入力、キーボード入力、マウス入力、トラックパッド入力、または、他のポインティングデバイス入力などを含み得る。ユーザ入力は、アプリケーションの特定の機能（たとえば、アプリケーションのデフォルトもしくは「ホーム」スクリーン、ナビゲーション命令機能、マッピング機能、レストランリスティング機能、近くの店舗機能、電話機能、ソーシャルネットワーク機能、または、当該アプリケーションによって提供される任意の他の機能）に関連付けられるアプリケーションアイコン、リンクまたは他のグラフィカルオブジェクトまたはテキストオブジェクトの選択であり得る。
【００１８】
アプリケーション１２４Ａａを実行するためのユーザ入力を受信することに応答して、オペーク識別子モジュール１２２Ａは、コンピューティングデバイス１１０Ａの現在のユーザを決定し得、アプリケーション１２４Ａａのリセット状態を決定し得る。コンピューティングデバイス１１０Ａの現在のユーザは、コンピューティングデバイス１１０Ａにおいて現在ログインされているユーザアカウントに関連付けられるユーザである。いくつかの例において、たとえば、ゲストアカウントが現在ログインされているアカウントである場合、コンピューティングデバイス１１０Ａは、たとえば、コンピューティングデバイス１１０Ａの前方カメラによってキャプチャされる画像に顔認識を適用することによって、異なるユーザがコンピューティングデバイス１１０Ａの現在のユーザであると決定し得る。アプリケーション１２４Ａａのリセット状態は、アプリケーション１２４Ａａの状態がリセットされることをコンピューティングデバイス１１０Ａのユーザが要求するたびに変化する任意の値であり得るが、そうでなければ、アプリケーション１２４Ａａの異なる実行インスタンスにわたる静的な値である。たとえば、アプリケーション１２４Ａａのリセット状態は最初は値１であり得る。ユーザは、コンピューティングデバイス１１０Ａにアプリケーション１２４Ａａを数回実行させ得るが、リセット状態は値１のままである。しかしながら、ユーザがアプリケーション１２４Ａａの状態をリセットするためにユーザ入力を提供すれば、オペーク識別子モジュール１２２Ａは、たとえば値２に、リセット状態の値をインクリメントまたはそうでなければ変更し得る。
【００１９】
コンピューティングデバイス１１０Ａの現在のユーザに関する情報と、リセット状態の値と、アプリケーション１２４Ａａについてのアプリケーション識別子とを使用して、オペーク識別子モジュール１２２Ａは、コンピューティングデバイス１１０Ａの現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成する。すなわち、オペーク識別子モジュール１２２Ａは、一意に現在のユーザおよびアプリケーション１２４Ａａを識別するがアプリケーションサービスプロバイダシステム１７０がコンピューティングデバイス１１０Ａの現在のユーザの個人識別性（personal identity）を決定することを可能にする如何なる情報も含んでいない識別子を生成するために情報のタプルを使用する。オペーク識別子モジュール１２２Ａは、アプリケーション１２４Ａａに一意識別子を提供し得るか、または、アプリケーションサービスプロバイダシステム１７０に一意識別子を送信し得る。いくつかの例において、アプリケーション１２４Ａａは、アプリケーションサービスプロバイダシステム１７０に一意識別子を送信し得る。オペーク識別子モジュール１２２Ａまたはアプリケーション１２４Ａａがアプリケーションサービスプロバイダシステム１７０に一意識別子を送信するかどうかに関わらず、一意識別子を送信する要素はさらに、アプリケーションサービスプロバイダシステム１７０が一意識別子に関連付けられる特定のアプリケーションを識別し得るように、アプリケーション識別子のようなアプリケーション１２４Ａａに関する情報を送信し得る。いくつかの例では、アプリケーション１２４Ａａの実行中に、アプリケーション１２４Ａａは、情報（たとえばユーザプレファレンス情報、アプリケーションの現在状態に関する情報、使用履歴情報などを含む状態情報）について１つ以上の要求を送信し得る。
【００２０】
アプリケーションサービスプロバイダシステム１７０は、一意識別子（すなわち、コンピューティングデバイス１１０Ａの現在のユーザを一意に識別するが個人を識別する情報を含んでいない識別子）、情報についての１つ以上の要求、および／または、コンピューティングデバイス１１０Ａからの１つ以上のアプリケーション要求をネットワーク１３０を介して受信する。情報についての１つ以上の要求は、ユーザプレファレンス情報、使用情報、アプリケーションサービスプロバイダシステム１７０によって維持されるアプリケーション１２４Ａａの現在状態、または、任意の他の情報についての要求を含み得る。さまざまな場合において、上記情報についての１つ以上の要求は、ナビゲーション命令、検索結果または任意の他のデータといった、アプリケーション１２４Ａａの特定の機能に関連付けられるある情報を提供するためのアプリケーションへの要求を含み得る。
【００２１】
一般に、アプリケーションサービスプロバイダシステム１７０は、この例において、アプリケーション１２４Ａａを含む１つ以上のアプリケーション１２４についての状態情報を維持する。状態情報は、アプリケーション使用情報、ユーザプレファレンス情報、および、アプリケーションの現在状態に関する情報を含み得る。典型的に、アプリケーションサービスプロバイダシステム１７０の状態情報モジュール１７２は、同じアプリケーションを使用する同じユーザがアプリケーションサービスプロバイダシステム１７０からの情報を要求する場合に、状態情報モジュール１７２が一意識別子を使用して情報を抽出するように、一意識別子に状態情報を関連付けることによって状態情報を維持する。個人を識別可能である情報を含む一意識別子を使用するのではなく、状態情報モジュール１７２は、オペーク識別子モジュール１２２Ａによって生成される、個人を識別可能である情報を含んでいない一意識別子を使用する。しかしながら、状態情報モジュール１７２は、個人を識別可能である情報を含み得る異なる一意識別子と実質的に同じ態様で、コンピューティングデバイス１１０Ａからの一意識別子を使用する。すなわち、この開示の技術は、アプリケーションサービスプロバイダシステム１７０への修正を必要とすることなく、コンピューティングデバイス１１０Ａの現在のユーザについての個人を識別可能である情報の保護を向上し得る。
【００２２】
状態情報モジュール１７２は、情報についての受信された要求と一意識別子とに基づいて、アプリケーション１２４Ａａについての状態情報をアップデートする。たとえば、状態情報モジュール１７２は、一意識別子に関連付けられるユーザプレファレンス情報を含み得る、一意識別子に関連付けられる履歴要求情報をアップデートし得る。すなわち、状態情報モジュール１７２は、１つ以上の要求がアプリケーション１２４Ａａについてのユーザプレファレンス情報を含んでいることを決定し得、１つ以上の要求において特定されるユーザプレファレンス情報を含むよう履歴要求情報をアップデートし得る。履歴要求情報は、アプリケーション１２４Ａａについての状態情報を含んでいる。たとえば、履歴要求情報は、アプリケーション使用情報、アプリケーションの現在状態についての情報、ユーザプレファレンス情報などを含み得る。
【００２３】
１つ以上のアプリケーション要求を受信することに応答して、状態情報モジュール１７２は、アプリケーションサービスプロバイダシステム１７０によって維持されるアプリケーション１２４Ａａについての状態情報をアップデートし得、状態情報の少なくとも部分をコンピューティングデバイス１１０Ａに送信し得る。コンピューティングデバイス１１０Ａは、受信した状態情報に基づいて、アプリケーション１２４Ａａの現在状態をアップデートし得る。
【００２４】
いくつかの例では、コンピューティングデバイス１１０Ａの現在のユーザとして識別されたユーザは、デバイスを切り替えて、コンピューティングデバイス１１０Ｎを使用し、コンピューティングデバイス１１０Ｎに同じアプリケーションの異なるインストールインスタンス（たとえばアプリケーション１２４Ｎａ（アプリケーション１２４Ｎａはアプリケーション１２４Ａａと同じであるが、コンピューティングデバイス１１０Ａではなくコンピューティングデバイス１１０Ｎにインストールされている、すなわち、単一のアプリケーションの異なるインスタンスである））を実行させ得る。そのような例において、オペーク識別子モジュール１２２Ｎは、コンピューティングデバイス１１０Ｎの現在のユーザに関する情報と、アプリケーション１２４Ｎａのリセット状態と、アプリケーション１２４Ｎａについてのアプリケーション識別子とを用いて、別の一意識別子を生成する。オペーク識別子モジュール１２２Ａが一意識別子を生成した時において、コンピューティングデバイス１１０Ｎの現在のユーザが１１０Ａの現在のユーザと同じである場合、アプリケーション１２４Ａｎはアプリケーション１２４Ａａと同じであり、アプリケーション１２４Ａｎのリセット状態がアプリケーション１２４Ａａのリセット状態と同じである場合、オペーク識別子モジュール１２２Ｎは、オペーク識別子モジュール１２２Ａによって生成された一意識別子と同じ値を有する一意識別子を生成する。
【００２５】
コンピューティングデバイス１１０Ｎは、オペーク識別子モジュール１２２Ｎによって生成される一意識別子をアプリケーションサービスプロバイダシステム１７０に送信し、アプリケーションサービスプロバイダシステム１７０は一意識別子を受信する。状態情報モジュール１７２は、一意識別子に基づいて、状態情報モジュール１７２によって維持されるとともに一意識別子に関連付けられる履歴要求情報に含まれるユーザプレファレンス情報を決定する。アプリケーションサービスプロバイダシステム１７０は、コンピューティングデバイス１１０Ｎにユーザプレファレンス情報を送信する。ユーザプレファレンス情報を受信することに応答して、コンピューティングデバイス１１０Ｎは、ユーザプレファレンス情報に基づいて、アプリケーション１２４Ｎａを構成し得る。
【００２６】
この開示の技術はさらに、ユーザがアプリケーション１２４の各々の状態をリセットすることにより、アプリケーションサービスプロバイダシステム１７０にとって新しいユーザとして実際上現れ得るメカニズムを提供する。たとえば、コンピューティングデバイス１１０Ａのユーザがアプリケーション１２４Ａａの状態をリセットすることを選択する場合、オペーク識別子モジュール１２２Ａは、たとえばアプリケーション１２４Ａａに関連付けられるリセット状態の値を変更することにより、アプリケーション１２４Ａａのリセット状態をアップデートし得る。オペーク識別子モジュール１２２Ａは、コンピューティングデバイス１１０Ａの現在のユーザについてのユーザ識別子と、アプリケーション１２４Ａａについてのアプリケーション識別子と、リセット状態との組み合わせを用いて、アプリケーション１２４Ａａについての一意識別子を生成するので、リセット状態の値を変更することは、ユーザおよびアプリケーション識別子が同じままであるが、一意識別子についての値が異なることになる。一意識別子が異なる値を有するので、状態情報モジュール１７２はその特定の一意識別子についての状態情報を有しておらず、そのため、コンピューティングデバイス１１０Ａのユーザは、アプリケーションサービスプロバイダシステム１７０にとって新しいユーザとして現われる。すなわち、状態情報モジュール１７２は、異なる値を有する一意識別子を受信することに応答して、一意識別子に関連付けられる異なるユーザプレファレンス情報を決定し、当該異なるユーザプレファレンス情報をコンピューティングデバイス１１０Ａに提供する。
【００２７】
いくつかの例において、コンピューティングデバイス１１０は、特定のユーザに関連付けられるすべてのコンピューティングデバイスにわたって、アプリケーションリセット状態を同期するように構成されてもよい。たとえば、コンピューティングデバイス１１０Ａおよび１１０Ｎが特定のユーザに関連付けられる場合、アプリケーション１２４Ａａの状態をリセットするためのユーザ入力を受信することに応答して、オペーク識別子モジュール１２２Ａは、コンピューティングデバイス１１０Ｎにおいてインストールされている単一のアプリケーションの異なるインスタンス（たとえばアプリケーション１２４Ｎａ）のリセット状態をアップデートするためのコマンドをコンピューティングデバイス１１０Ａにネットワーク１３０を介して送信させ得る。リセット状態をアップデートするためのコマンドは、コンピューティングデバイス１１０Ａにおけるアプリケーション１２４Ａａについてのリセット状態についてのアップデートされた値を含み得る。リセット状態をアップデートするためのコマンドを受信することに応答して、オペーク識別子モジュール１２２Ｎは、たとえば、アプリケーション１２４Ａａについてのリセット状態と同じ値にアプリケーション１２４Ｎａについてのリセット状態をセットすることにより、アプリケーション１２４Ｎａについてのリセット状態をアップデートし得る。これにより、この開示の技術は、新しいユーザアカウントを作成するかまたはアプリケーションをアンインストールもしくは再インストールすることをユーザに要求することなく、ユーザが、あるコンピューティングデバイスにおいて単一の入力を提供し、当該ユーザに関連付けられるすべてのコンピューティングデバイスにわたってアプリケーションについての状態情報をリセットすることを可能にし得る。
【００２８】
図２は、この開示の技術に従った、エフェメラルアプリケーション（ephemeral application）についての複数のアプリケーションインスタンスにわたって識別子を提供する例示的なコンピューティングデバイス２００を示す概念図である。エフェメラルアプリケーションは、完全にインストールされコンピューティングデバイスのユーザに利用可能なように見えるアプリケーションを含むが、コンピューティングデバイスにおいてインストールされるアプリケーションについて如何なるアプリケーションコードも有していないか、または、コンピューティングデバイスにおいてインストールされたアプリケーションの完全な機能の部分についてのアプリケーションコードを有し得る。その代わりに、アプリケーションの要求された機能についてのアプリケーションコードは、当該アプリケーションの要求された機能を利用するためのユーザ入力を受信することに応答して、インストールされ得る。さらに、コンピューティングデバイスは、たとえば、何らかのしきい値期間内にユーザによって要求されていないアプリケーションの機能についてのアプリケーションコードについて、当該アプリケーションのアプリケーションコードの部分を周期的にアンインストールし得る。したがって、エフェメラルアプリケーションは、アプリケーションによって提供されるいくつかまたはすべての機能についてのアプリケーションコードが、任意の所与の時間において、コンピューティングデバイスにインストールされていない場合があるが、エンドユーザには従来のアプリケーションであるように見え得、ユーザ入力なしでコンピューティングデバイスから除去され得る。この開示の技術は、エフェメラルアプリケーションがユーザのアクションなしでアンインストールされる場合にそうでなければ失われ得るアプリケーション状態情報が複数のアプリケーションインストールにわたって維持され得るメカニズムを提供する。
【００２９】
コンピューティングデバイス２００の例は、（スマートフォンを含む）携帯電話、ラップトップコンピュータ、タブレットコンピュータといったポータブルまたはモバイルデバイス、スマートウォッチまたはコンピュータ化されたアイウェアといったウェアラブルコンピューティングデバイス、スマートテレビジョンプラットホーム、カメラ、携帯情報端末（ＰＤＡ）などを含み得るがこれらに限定されない。いくつかの例において、コンピューティングデバイス２００は、デスクトップコンピュータ、サーバ、メインフレームなどのような据え置き型のコンピューティングデバイスを含み得る。
【００３０】
図２に示されるように、コンピューティングデバイス２００は、アプリケーションコンテナ２０２、システムランタイム２２６、オペレーティングシステム２３６、および、ハードウェアコンポーネント２３８を含む。コンピューティングデバイス２００は、ネットワーク２４０および通信リンク２４８Ａ〜２４８Ｂを介して１つ以上の他のリモートコンピューティングデバイス２４２Ａ〜２４２Ｃ（「リモートコンピューティングデバイス２４２」）と通信し得る。図２に示されるように、ネットワーク２４０は、任意のパブリックまたはプライベート通信ネットワークを表わしており、たとえば、セルラーネットワーク、Ｗｉ−Ｆｉ（登録商標）ネットワーク、および／または、コンピューティングデバイス同士間でデータを送信するための他のタイプのネットワークである。コンピューティングデバイス２００およびリモートコンピューティングデバイス２４２は、任意の好適な通信技術を使用して、ネットワーク２４０を介してデータを送受信し得る。たとえば、コンピューティングデバイス２００は、通信リンク２４８Ａを使用して、ネットワーク２４０に動作可能に結合され得る。リモートコンピューティングデバイス２４２Ａは、通信リンク２４８Ｂによってネットワーク２４０に動作可能に結合され得る。ネットワーク２４０は、ネットワークハブ、ネットワークスイッチ、ネットワークルータなどを含み得、ネットワークハブ、ネットワークスイッチ、ネットワークルータは、動作可能に相互結合されており、これにより、コンピューティングデバイス２０２とリモートコンピューティングデバイス２４２との間で情報の交換が提供される。いくつかの例において、通信リンク２３８Ａ〜２３８Ｂはイーサネット（登録商標）、ＡＴＭまたは他のネットワーク接続であり得る。そのような接続は無線および／または有線接続であり得る。
【００３１】
ハードウェアコンポーネント２３８は、たとえば、コンピュータプロセッサ、通信ユニット（たとえばモデムおよびネットワークインターフェイスコントローラなど）、入力コンポーネント、出力コンポーネント、存在感知型ディスプレイ、揮発性メモリおよび不揮発性メモリ、ならびに、電源を含み得るがこれらに限定されない。オペレーティングシステム２３６は、ハードウェアコンポーネント２３８上で実行し得、コンピューティングデバイス２００のハードウェアおよびソフトウェアコンポーネントを管理する。たとえば、オペレーティングシステム２３６は、メモリ管理、プロセススケジューリングおよび不揮発性ストレージ管理を実行し得る。オペレーティングシステム２３６はさらに、コンピューティングデバイス２００において実行されるアプリケーションにネットワークおよびセキュリティサービスを提供し得る。オペレーティングシステム２３６はさらに、上記よりも多いまたは少ない機能を実行し得る。
【００３２】
ランタイムシステム２２６は、アプリケーションが記述および構築またはコンパイルされる特定のプログラミング言語に従って構築されるアプリケーションについての実行モデルを実現する。ランタイムシステム２２６は、実行の間にアプリケーションコンテナ２０２にアクセス可能である１つ以上のライブラリおよび／またはサービスを含み得る。この開示においてさらに記載されるように、アプリケーションコンテナ２０２の各々は別個のアプリケーションに対応し得る。ランタイムシステム２２６は、スレッドマネジメントサービスと、スクリーン描画およびユーザインターフェイスレンダリングコンポーネントと、アプリケーション間およびアプリケーション内メッセージングサービスとを含み得るが、これらはほんのいくつかの例示的なサービスである。アプリケーションコンテナ２０２は、ランタイムコンポーネント２２８によって公開されるアプリケーションプログラミングインターフェイス（ＡＰＩ）を通じて当該サービスにアクセスし得る。いくつかの例において、ランタイムシステム２２６は１つ以上のプロセスおよび／またはスレッドとして実行され得る。プロセスおよび／またはスレッドの１つ以上は、オペレーティングシステム権限有りまたは権限無しで、実行され得る。
【００３３】
図２に示されるように、ランタイムシステム２２６はランタイムコンポーネント２２８を含み得る。各別個のランタイムコンポーネントは、１つ以上のプロセスおよび／またはスレッドにより実現され得る。いくつかの例において、各別個のランタイムコンポーネントは、機能のユーザが定義したセットを提供し得る。たとえば、ユーザインターフェイスレンダリングコンポーネントは、ユーザインターフェイス要素（たとえばボタン、リスト、画像、および入力フィールドなど）およびそれらの対応する挙動を定義する１つ以上のライブラリにより実現され得る。ユーザインターフェイスレンダリングコンポーネントは、グラフィカルユーザインターフェイスにおいてユーザインターフェイス要素をレンダリングするようアプリケーションコンテナ２０２によって呼び出されるＡＰＩを提供し得る。
【００３４】
スーパーバイザーコンポーネント２２８Ａはランタイムコンポーネント２２８に含まれる。スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナ２０２のインストールおよびメンテナンスを実行し、アプリケーション間およびアプリケーション内メッセージングサービスを提供する。スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナ２０２によって生成されるメッセージについてリッスン（listen）するメッセージブローカー２３０を含んでおり、送信側のアプリケーションコンテナまたは１つ以上の他のアプリケーションコンテナについてのアクションを実行する。スーパーバイザーコンポーネント２２８Ａは、任意のメッセージ（たとえばユーザが特定した識別子としてＵＲＩを含むメッセージ）を送ることにおいて、第１の優先権または第１の機会を有し得る。いくつかの例では、たとえば、メッセージブローカー２３０は、アプリケーションコンテナプール２３２からアプリケーションコンテナを割り当てることと、メッセージについてセキュリティを実施することと、メッセージのログを記録することといった、メッセージについて付加的な処理を提供し得る。例として、アプリケーションコンテナ２０２Ａは、同じアプリケーション内において、第１のユーザインターフェイスから第２のユーザインターフェイスまでナビゲートするようメッセージを生成し得る。アプリケーションコンテナ２０２Ａは、フィルタのセットを含むメッセージングテーブル２３４を含むメッセージをメッセージブローカー２３０に送信し得、各フィルタは１つ以上の条件および１つ以上の対応するアクションを有する。メッセージの内容がフィルタの条件とマッチする場合、メッセージブローカー２３０は、第２のグラフィカルユーザインターフェイスを出力するよう命令を実行するといった対応するアクションを実行し得る。いくつかの例では、上記のそのようなメッセージは、メッセージブローカー２３０にメッセージを転送することなく、ルータ２１２によって内部でルーティングされ得る。
【００３５】
いくつかの例において、スーパーバイザーコンポーネント２２８Ａは、少なくとも１つのアプリケーションコンテナがアプリケーションコンテナプール２３２に含まれており、起動の準備ができていることを保証する。アプリケーションコンテナプール２３２に含まれる各アプリケーションコンテナは現在、特定のアプリケーションに割り当てられておらず、現在、アプリケーションコードを実行していない。しかしながら、アプリケーションコンテナプール２３２に含まれる各アプリケーションコンテナは、スーパーバイザーコンポーネント２２８Ａが特定のアプリケーションコンテナを起動し、特定のアプリケーションに特定のアプリケーションコンテナを割り当てる際に、アプリケーションコードをロードおよび実行することができるために十分なブートストラッピングコードを含む。アプリケーションコンテナプール２３２からの特定のアプリケーションコンテナは、スーパーバイザーコンポーネント２２８Ａから命令を受信し、特定のアプリケーションについてのアプリケーションコードをロードおよび実行することを開始する。
【００３６】
上述したように、アプリケーションコンテナ２０２の各々は、対応するアプリケーションが実行されているときに、別個のアプリケーションに対応し得る。さまざまな場合において、スーパーバイザーコンポーネント２２８Ａは、どのアプリケーションコンテナがどの実行アプリケーションにマッピングされているかというマッピングを維持する。アプリケーションは、コンピューティングデバイス２００上で動作を実行するために別個の機能を含み得る。たとえば、アプリケーションは、Ｅメールアプリケーション、テキストメッセージングアプリケーション、インスタントメッセージングアプリケーション、気象アプリケーション、ビデオ会議アプリケーション、ソーシャルネットワーキングアプリケーション、気象アプリケーション、株式市場アプリケーション、緊急警戒アプリケーション、スポーツアプリケーション、オフィス生産性アプリケーション、マルチメディアプレーヤーを含み得る。
【００３７】
ユーザまたはオペレーティングシステムが特定のアプリケーションを呼び出すと、スーパーバイザーコンポーネント２２８Ａは動的に、アプリケーションコンテナプール２３２からアプリケーションコンテナ２０２を割り当て、対応するアプリケーションへの特定のアプリケーションコンテナ２０２のマッピングを維持する。あるアプリケーションが終了すると、スーパーバイザーコンポーネント２２８Ａは、もはや必要でない任意のアプリケーションコンテナ２０２をクリーンアップし得る。たとえば、スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナ２０２Ａの状態をリセットし得、または、現在終了しているアプリケーションにマッピングされたアプリケーションコンテナ２０２Ａをアンインストールし得る。スーパーバイザーコンポーネント２２８Ａが、アクティブに実行されているアプリケーションにもはやマッピングされていないアプリケーションコンテナ２０２をアンインストールする例において、スーパーバイザーコンポーネント２２８Ａは、新しいアプリケーションコンテナをインストールし、それらをアプリケーションコンテナプール２３２に加え、これにより、アプリケーションの呼出に応答して、少なくとも１つのアプリケーションコンテナが起動される準備ができていることを保証する。これにより、アプリケーションインストールのユーザインタラクティブレイテンシーは、オペレーティングシステムの観点から各アプリケーションについて別個の識別性を維持しつつ、０またはほぼ０まで低減され得る。
【００３８】
図２に示されるように、アプリケーションコンテナ２０２Ａは、アプリケーションの実行可能なコンポーネント２０８の実行を命令するよう、実行環境およびサポートサービスを提供する。アプリケーションコンテナ２０２は、オペレーティングシステム２３６において別個のプロセスとして実行され得る。いくつかの例において、アプリケーションコンテナ２０２Ａは、メッセージングインターフェイス２１５を含む。ルータ２１２はメッセージングインターフェイス２１５を介してランタイムシステム２２６からメッセージを受信し得、ランタイムシステム２２６は実行可能なコンポーネント２０８およびルータ２１２からメッセージングインターフェイス２１５を介してメッセージを受信し得る。アプリケーションコンテナ２０２Ａについてのプログラムロジックは、実行可能なコンポーネント２０８において実現され得る。実行可能なコンポーネントは、マシン実行可能コードのロジカルグルーピングであり得る。たとえば、オブジェクト指向設計において、単一の実行可能なコンポーネントは、マシン実行可能コードを含む単一のコンパイルされたクラスファイルであり得る。
【００３９】
アプリケーションコンテナ２０２Ａは、１つ以上のサブパッケージ２０４のための容器（vessel）であり得る。いくつかの例において、サブパッケージは２つ以上の実行可能なコンポーネント２０８を含んでいる。サブパッケージは、リソース（たとえば画像、テキスト、ビデオもしくは任意の他のコンパイルされていないデータ）、セキュリティおよび／もしくは署名情報、バージョン情報および／もしくは従属性情報、または、アプリケーションのための任意の他の情報を含み得る。ソフトウェアデベロッパは、ユーザが定義した複数のサブパッケージで構成されるようにアプリケーションを設計し得る。ユーザが定義した各サブパッケージは、一緒に機能の離散的なセットを提供する実行可能なコンポーネントのセットを含み得る。たとえば、ソフトウェアデベロッパは、複数の異なるユーザインターフェイスを有するナビゲーションアプリケーションを設計し得る。各ユーザインターフェイスは、ユーザインターフェイス要素の異なるセットと、対応する挙動とを含み得る。そのため、各ユーザインターフェイスは、実行可能なコンポーネントの別個のセットを有するように実現され得る。たとえば、ナビゲーションアプリケーションは、ターンバイターン（turn-by-turn）ナビゲーションユーザインターフェイスと、ポイントオブインタレスト（point-of-interest）ユーザインターフェイス（たとえばマップ上でポイントオブインタレストについて詳細を表示する）と、セッティングユーザインターフェイスとを含み得る。ソフトウェアデベロッパは、３つの異なるサブパッケージを有するアプリケーションを設計し得、各サブパッケージは、それぞれのユーザインターフェイスについて機能を実現するために実行可能なコンポーネントのセットを含む。
【００４０】
アプリケーションコンテナ２０２Ａはコンテナランタイム２２４を含み得る。コンテナランタイム２２４は、コンテナランタイム２２４、ランタイムシステム２２６および／またはオペレーティングシステム２３６内でライブラリによって提供されるサービスおよび／または機能に対する１つ以上のライブラリおよび／または１つ以上のアプリケーションプログラミングインターフェイス（ＡＰＩ）２１７を含み得る。そのため、コンテナランタイム２２４はセキュアなプロセス内ＡＰＩ層を提供し得る。すなわち、各アプリケーションコンテナ２０２は、アプリケーションコンテナがマッピングされる特定のアプリケーションのためのアプリケーションコードとプロセスおよびアドレススペースを共有する。プロセスおよびアドレススペースを共有することによって、アプリケーションコンテナ２０２は、アプリケーションコードと共有されるＡＰＩコードとの間でメソッド呼出セマンティックス（method call semantics）を簡素化し得る。すなわち、ブロッキングプロセス間通信呼出（blocking interprocess communication call）を使用することをデベロッパに要求するのではなく、デベロッパは直接的にＡＰＩ２１７を利用し得る。
【００４１】
アプリケーションコンテナおよびコンテナランタイムを制御することによって、ランタイムシステム２２６は、ＡＰＩ呼出を代理し得、アプリケーションコンテナおよびコンテナランタイムが不正な変更を加えられておらず、したがって、センシティブな挙動についてランタイムロジックを提供するということを照合し得る。たとえば、ユーザのデバイス識別子（たとえばデバイスのグローバル一意識別子）へのアクセスを要求するアプリケーションは、コンテナランタイムのＡＰＩを通じて呼出を行うことが必要とされ得、これはスーパーバイザーコンポーネント２２８Ａによりチェックし得、これにより、これは許可された挙動であるということを保証するか、または、（たとえば個人を識別する情報を取り除くまたは匿名化することにより）そのＡＰＩの出力を修正する。一般に、アプリケーションコンテナ２０２は、オペレーティングシステム２３６への何らかの直接的なアクセスを許可し得、代理（proxying）を介して何らかの間接的なアクションを許可し得、さらに、あるＡＰＩへのアクセスをブロックし得る。これにより、コンテナランタイム２２４は、さまざまな動作においてそのようなチェックが発生するという保証を実施し得る。なぜならば、そのような動作は、コンテナランタイム２２４のＡＰＩを通じてのみなされ得るからである。さらに、アプリケーションコンテナ２０２のコンテナランタイム２２４がＡＰＩ２１７を提供するので、存在するオペレーティングシステム２３６へのアップデートを必要とするのではなく、アプリケーションアップデートについてアプリケーションコンテナ２０２へのアップデートが実行され得、これにより、任意のそのようなアップデートの採用率（adoption rate）が増加され得、オペレーティングプラットフォームのセキュリティが増加され得る。
【００４２】
コンテナランタイム２２４はさらに、プラットホームコーディネーションを必要とするＡＰＩ上で繰り返すために層を提供し得る。たとえば、サブパッケージは、位置のようないくつかの特定のデータを必要とすると宣言し得、コンテナランタイム２２４は、特定のサブパッケージについての実行可能なコンポーネントのロードと並列（並行）に、位置を得るとともに、アプリケーションの起動の際にアーギュメントとして当該位置を提供することが可能である。一例として、デベロッパは、アプリケーションについてのメタデータにおいて、いくつかの従属データがアプリケーションの実行に必要であることを特定し得る。コンテナランタイム２２４は、アプリケーションについてのアプリケーションコードを抽出して実行し始め得るだけでなく、並列（並行）で従属データを識別し抽出し得る。いくつかの場合において、デベロッパは、従属データが必須（すなわちアプリケーションが実行することが必要）か、または、「最良の努力（ベストエフォート：best effort）」（すなわちアプリケーションの動作／機能を改善するが厳密にアプリケーションが実行することを必要としているわけではない）であるかどうかを特定し得る。必須の従属データの例は、アプリケーションについて基本的なユーザインターフェイスを表示することが必要とされるデータであり得る。「最良の努力」の従属データの場合、コンテナランタイム２２４は、コンテナランタイム２２４がまだ「最良の努力」従属データを受信していなくても、アプリケーションコードがダウンロードされ実行するために利用可能になるとすぐに、アプリケーションコードを実行し始め得る。
【００４３】
各アプリケーションは、アプリケーションの動作を定義する１つ以上の実行可能なコンポーネントを含んでいるアプリケーションコンテナにより実行され得る。アプリケーションコンテナ２０２Ａは、実行可能なコンポーネント２０８およびメッセージングインターフェイス２１５とにより、アプリケーションの挙動を変更しおよび／またはアプリケーションに１つ以上の動作を実行させるメッセージを送受信するルータ２１２を含む。たとえば、ルータ２１２は、１つ以上の動作の実行を要求するメッセージを受信し得る。ルータ２１２は、１つ以上の動作を実行するために実行可能なコンポーネントを含むサブパッケージがローカルに格納されているか、または、そうでなければコンピューティングデバイス２００上でアクセス可能であるかを、メッセージの内容に基づいて決定し得る。メッセージの内容は、サブパッケージに対応するユニフォームリソースアイデンティファイア（ＵＲＩ： Uniform Resource Identifier）のような識別子を含み得る。サブパッケージがローカルに格納されているかまたはそうでなければコンピューティングデバイス２００上でアクセス可能な場合、ルータ２１２は、メッセージの内容に基づいて、動作を実行するために１つ以上の実行可能なコンポーネントを識別する。いくつかの例では、メッセージは、付加的な属性（たとえばユーザインターフェイスを起動するためのカテゴリ、データのＭＩＭＥタイプ、実行のための明示的なコンポーネントクラス）、または、実行するべき１つ以上の動作をさらに特定するデータ（たとえばユーザデータあるいはマシン生成データ）を含み得る。そのため、ルータ２１２によって識別される１つ以上の実行可能なコンポーネントは、付加的な属性またはデータに基づいて、１つ以上の動作を実行し得る。
【００４４】
上述したように、特定のアプリケーションのためのサブパッケージのすべてが、アプリケーションを実行するために、コンピューティングデバイス２００においてローカルに常駐する必要があるわけではない。特定の機能についてのサブパッケージがコンピューティングデバイス２００において常駐またはそうでなければアクセス可能かどうか決定するために、ルータ２１２は、アプリケーション定義２１６に対してルックアップを実行し得る。アプリケーション定義２１６は一般に、ユーザが特定した識別子（たとえばＵＲＩ、ストリング、整数または任意の他の好適な識別子）と、アプリケーションについての特定の機能を特定するサブパッケージとの間のマッピングを定義し得る。アプリケーション定義２１６は、ルーティングテーブル２１８においてこれらのマッピングを含んでおり、ルーティングテーブル２１８は、ユーザが特定した識別子２２０Ａ〜２２０Ｎ（「ユーザが特定した識別子２２０」）と、サブパッケージ識別子２２２Ａ〜２２２Ｎ（「サブパッケージ識別子２２２」）との間のマッピングを含む。ルータ２１２が、特定のサブパッケージを使用して機能を実行する、ユーザが特定した識別子を有するメッセージを受信すると、ルータ２１２は、ルータテーブル２１８においてルックアップを実行し得る。ルータ２１２は、たとえばユーザが特定した識別子２２０Ａがメッセージにおけるユーザが特定した識別子とマッチしていると決定すると、ルータ２１２は、サブパッケージ識別子２２２Ａに対応するサブパッケージ２０４Ａがコンピューティングデバイス２００上に常駐しているかどうか決定し得る。サブパッケージ２０４Ａがコンピューティングデバイス２００上で常駐しているので、ルータ２１２は、メッセージに基づいてサブパッケージ２０４Ａへの呼出を実行するか、または、実行可能なコンポーネント２０８Ａを使用して１つ以上の動作を実行するメッセージをサブパッケージ２０４Ａに送信する。
【００４５】
上述したように、コンピューティングデバイス２００上にアプリケーションについてのサブパッケージの全セットがローカルに格納される必要はないので、コンピューティングデバイス２００におけるアプリケーションの初期のインストールおよび／または初期の実行に必要な時間は、リモートコンピューティングデバイスからアプリケーション全体がダウンロードされ、インストールされ、コンピューティングデバイス２００によって実行される必要がある場合よりも、少なくなり得る。そのため、ユーザは、アプリケーションからのより大きな応答性、および／または、アプリケーションの挙動についてのより大きな性能を経験し得る。
【００４６】
図２の例では、ユーザは最初にナビゲーションアプリケーションをインストールし実行することを望み得る。最初は、ナビゲーションアプリケーションについてのサブパッケージまたはアプリケーション定義のいずれも、コンピューティングデバイス２００に格納されていない場合がある。ユーザは、コンピューティングデバイス２００にユーザ入力を提供して、最初に、オペレーティングシステム２３６によって提供されるユーザインターフェイスにおいて、マップアプリケーションに対応するアイコンを選択し得る。代替的には、ユーザは、サブパッケージおよびアプリケーション定義を抽出するようコンピューティングデバイス２００において実行されリモートコンピューティングデバイス２４２と通信するメディアストアアプリケーション（図示せず）においてマップアプリケーションを選択し得る。いずれの場合においても、スーパーバイザーコンポーネント２２８Ａのメッセージブローカー２３０は、オペレーティングシステム２３６から、または、ナビゲーションアプリケーションについての特定の機能の実行を要求するメディアストアアプリケーションからメッセージを受信する。ナビゲーションアプリケーションがまだインストールされていないので、要求された特定の機能は、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示することである。
【００４７】
スーパーバイザーコンポーネント２２８Ａは、メッセージの内容に基づいて、アプリケーションコンテナがコンピューティングデバイス２００のメモリにおいてナビゲーションアプリケーションについて既に割り当てられているかどうか決定し得る。たとえば、メッセージの内容は、アプリケーションについての名称のようなナビゲーションアプリケーションの一意識別子を含み得る。スーパーバイザーコンポーネント２２８Ａがナビゲーションアプリケーションについてのアプリケーションコンテナをまだ割り当てていないと決定することに応答して、スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナプール２３２からアプリケーションコンテナ２０２Ａを割り当て得る。アプリケーションコンテナプール２３２は、アプリケーションのために保留されアプリケーションを実行するのに使用可能なプロセスのセットを含み得る。いくつかの例において、スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナ２０２Ａについての新しいプロセスを作成するために、オペレーティングシステム２３６と通信し得る。
【００４８】
スーパーバイザーコンポーネント２２８Ａは、ナビゲーションアプリケーションがまだインストールされていないと決定し得、リモートコンピューティングデバイス２４２のうちの１つ以上からのアプリケーション定義を要求し得る。たとえば、スーパーバイザーコンポーネント２２８Ａは、リモートコンピューティングデバイス２４２Ａへメッセージを送信し得、当該メッセージは、リモートコンピューティングデバイス２４２においてグローバルに一意である、ナビゲーションアプリケーションのための識別子を含んでいる。リモートコンピューティングデバイス２４２Ａは、メッセージを受信すると、アプリケーション定義２４４からアプリケーション定義２１６を選択し、コンピューティングデバイス２００にアプリケーション定義２１６を送信する。スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナ２０２Ａに含まれるか、または、アプリケーションコンテナ２０２Ａにアクセス可能であり得るアプリケーション定義２１６を受信する。
【００４９】
スーパーバイザーコンポーネント２２８Ａは、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示するよう、メッセージブローカー２３０にアプリケーションコンテナ２０２Ａへメッセージを送信させる。特に、メッセージは、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示する機能を有するサブパッケージに対応するユーザが特定した識別子を含み得る。いくつかの例では、メッセージブローカー２３０は、メディアストアアプリケーションから受信された情報に基づくユーザが特定した識別子、または、ユーザによって最初に選択されたマッピングアプリケーションについてのアイコンに関連付けられるブートストラッピング機能から受信された情報に基づくユーザが特定した識別子を受信する（または生成する）。ブートストラッピング機能は、ユーザが特定した識別子をメッセージブローカー２３０に送信することを含み得るがこれに限定されない。
【００５０】
ルータ２１２は、ユーザが特定した識別子を有するメッセージをメッセージングインターフェイス２１５を介して受信する。図２のこの例では、ユーザが特定した識別子は２２０Ａである。ユーザが特定した識別子に基づいて、ルータ２１２は、ユーザが特定した識別子２２０Ａに対応するサブパッケージ識別子２２２Ａについてのサブパッケージがコンピューティングデバイス２００においてローカルに格納されていないことを決定する。ルータ２１２は、コンテナランタイム２２４および／またはランタイムシステム２２６を使用して、サブパッケージ識別子２２２Ａについてのサブパッケージを要求するようリモートコンピューティングデバイス２４２Ａにメッセージを送信し得る。たとえば、リモートコンピューティングデバイス２４２Ａにコンテナランタイム２２４および／またはランタイムシステム２２６により送信されるメッセージは、サブパッケージ識別子２２２Ａを含み得る。リモートコンピューティングデバイス２４２Ａは、ナビゲーションアプリケーションのデフォルトまたはメインユーザインターフェイスを表示するための実行可能なコンポーネントを含むサブパッケージをコンピューティングデバイス２００に送信し得る。
【００５１】
ルータ２１２は、サブパッケージ識別子２２２Ａについてのサブパッケージがローカルに格納されていないと決定することに応答して、ライフサイクルマネージャ２１０に、コールバックインターフェイス２１３を介してシステムライフサイクル呼出についてリッスンさせ得る。当該ライフサイクル呼出はランタイムシステム２２６によって発行される。ライフサイクル呼出は、たとえば、アプリケーションを開始すること、アプリケーションを一時停止すること、アプリケーションの再開すること、または、アプリケーションを終了することを含み得る。ライフサイクルマネージャ２１０は、コンピューティングデバイス２００がひとたびリモートコンピューティングデバイス２４２Ａからサブパッケージ２０４Ａを抽出すると、サブパッケージ２０４Ａの実行可能なコンポーネントによって実行されるライフサイクル呼出をバッファリングし得る。サブパッケージ２０４Ａがひとたびコンピューティングデバイス２００によって抽出されると、ライフサイクルマネージャ２１０は、バッファリングされたライフサイクル呼出の各々をサブパッケージ２０４Ａに送信し得る。
【００５２】
図２の例では、コンピューティングデバイス２００がサブパッケージ２０４Ａを抽出しローカルに格納したことをライフサイクルマネージャ２１０が決定することに応答して、ライフサイクルマネージャ２１０はローダ２０６に呼出を送信するか、またはそうでなければ、ローダ２０６を呼び出して、最初に要求された特定の機能を実行するために、たとえば、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示するために、コンピューティングデバイス２００のメモリに実行可能なコンポーネント２０８の１つ以上をロードする。いくつかの例において、ローダ２０６は実行可能なコンポーネントをメモリにロードすることを担う。いくつかの例において、ローダ２０６は複数のローダを表わし得、各ローダは、異なる実行可能なコンポーネントをメモリにロードすることを担う。ローダ２０６は、特定の実行可能なコンポーネントについて、当該特定の実行可能なコンポーネントによって使用される対応するライブラリを特定し、任意のそのようなライブラリをメモリにロードして、当該ライブラリが特定の実行可能なコンポーネントにアクセス可能になる。ライフサイクルマネージャ２１０はさらに、実行可能なコンポーネント２０８のうちの１つ以上に、バッファリングされたライフサイクル呼出を送信し得る。バッファリングされたライフサイクル呼出を受信すると、実行可能なコンポーネント２０８のうちの１つ以上は、アプリケーションについてのデフォルトまたはメインユーザインターフェイスをコンピューティングデバイス２００に表示させる。
【００５３】
その後、ユーザがセッティングユーザインターフェイスにナビゲートすることを望む場合、ユーザは、アプリケーションについての現在表示されているデフォルトまたはメインユーザインターフェイスにおけるセッティングのために、ユーザインターフェイス要素（たとえばアイコン、ボタンまたはラベルなど）を選択するユーザ入力を提供し得る。ランタイムシステム２２６は、ユーザインターフェイス要素の選択を示すメッセージをアプリケーションコンテナ２０２Ａに送信する。実行可能なコンポーネント２０８Ａは、当該選択がセッティングユーザインターフェイスを表示することを決定する。実行可能コンポーネント２０８Ａは、セッティングユーザインターフェイスについての機能を含むサブパッケージ２２２Ｎについてのユーザが特定した識別子２２０Ｎを有するメッセージを生成する。実行可能なコンポーネント２０８Ａは、メッセージをルータ２１２に直接的に送信するか、または、ランタイムシステム２２６に送信し、ランタイムシステム２２６がルータ２１２にメッセージをルーティングし得る。いずれの場合も、ルータ２１２は、ユーザが特定した識別子２２０Ｎのルックアップを実行し、サブパッケージ識別子２２２Ｎについてのサブパッケージがコンピューティングデバイス２００にローカルに格納されていないと決定する。
【００５４】
同様の態様で、サブパッケージ２０４Ａに関して上述したように、ルータ２１２は、サブパッケージ識別子２２２Ｎについてのサブパッケージを抽出するために、コンテナランタイム２２４および／またはランタイムシステム２２６を使用してリモートコンピューティングデバイス２４２Ａにメッセージを送信する。リモートコンピューティングデバイス２４２Ａは、ナビゲーションアプリケーションのセッティングインターフェイスを表示するための実行可能なコンポーネントを含むサブパッケージ２２２Ｎをコンピューティングデバイス２００に送信し得る。コンピューティングデバイス２００がサブパッケージ２２２Ｎを抽出している間、ライフサイクルマネージャ２１０は、コールバックインターフェイス２１３において受信されるライフサイクル呼出をバッファリングし得る。サブパッケージ２２２Ｎをダウンロードする際に、ライフサイクルマネージャ２１０は、ローダ２０６にサブパッケージ２２２Ｎの実行可能なコンポーネントをメモリへロードさせる。ローダ２０６は、実行可能なコンポーネントのうちの１つ以上の実行を開始し得、これにより、ナビゲーションアプリケーションのセッティングインターフェイスがコンピューティングデバイス２００のディスプレイデバイスに表示される。
【００５５】
さまざまな場合において、スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナ２０２Ａから１つ以上のサブパッケージ２０４をアンインストールし得る。たとえば、スーパーバイザーコンポーネント２２８Ａは、コンピューティングデバイス２００が利用可能なストレージスペースが低くなっていると決定し得るか、または、コンピューティングデバイス２００のユーザがあるしきい値時間量内に１つ以上のサブパッケージ２０４の機能を要求していないと決定し得、それに応答して、アプリケーションコンテナ２０２Ａから１つ以上のサブパッケージ２０４を除去することを決定し得る。いくつかの場合において、スーパーバイザーコンポーネント２２８Ａは、完全にアプリケーションコンテナ２０２Ａをアンインストールまたは割当解除し得、これにより、コンピューティングデバイス２００からサブパッケージ２０４のすべてが除去され得る。しかしながら、すべてのサブパッケージ２０４を除去し、アプリケーションコンテナ２０２Ａを割当解除またはアンインストールした後でも、そのアプリケーションはまだ、コンピューティングデバイス２００のユーザには、コンピューティングデバイス２００にインストールされているように見え得る。たとえば、当該アプリケーションについてのアイコンまたは他のグラフィカル要素は、（たとえばデスクトップＧＵＩ上で）まだコンピューティングデバイス２００のグラフィカルユーザインターフェイス内にあるように見え得るか、または、当該アプリケーションの指示が、コンピューティングデバイス２００にインストールされたアプリケーションのリストにあるように見え得る。サブパッケージ２０４およびアプリケーションコンテナ２０２Ａはもはやコンピューティングデバイス２００に格納されていない場合があるが、当該アプリケーションについてのアプリケーション識別子と、当該アプリケーションについてのリセット状態情報とを含む当該アプリケーションについてのさまざまな状態情報は、スーパーバイザーコンポーネントによって維持され得る。
【００５６】
アプリケーションがコンピューティングデバイス２００からアンインストールされた後、ユーザがアプリケーションの実行を要求すると、スーパーバイザーコンポーネント２２８Ａは、アプリケーションコンテナプール２３２から新しいアプリケーションコンテナを割り当て得る。たとえば、スーパーバイザーコンポーネント２２８Ａはアプリケーションにアプリケーションコンテナ２０２Ｂを割り当て得る。さまざまな場合において、アプリケーションコンテナ２０２Ｂは、アプリケーションの状態を、アプリケーションがコンピューティングデバイス２００からアンインストールされる前のアプリケーションの状態にセットし得る。たとえば、アプリケーションコンテナ２０２Ｂのコンテナランタイム２２４は、最後の一意識別子が生成された時間と現在の時間との間にユーザがアプリケーションの状態をリセットするために入力を提供しなかったと仮定して、アプリケーションをアンインストールする前に最後に生成された一意識別子と同じ値を有する一意識別子を生成し得る。コンテナランタイム２２４は、コンピューティングデバイス２００に格納されるリセット状態をロードすることによってリセット状態を決定し得、コンピューティングデバイスの現在のユーザを決定し得る。リセット状態と、コンピューティングデバイスの現在のユーザについての情報と、当該アプリケーションについてのアプリケーション識別子とを使用して、コンテナランタイム２２４は、現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成する。
【００５７】
コンピューティングデバイス２００は、リモートコンピューティングデバイス２４２または図１のアプリケーションサービスプロバイダシステム１７０のうちの１つといった、アプリケーションサービスプロバイダシステムに一意識別子および情報についての１つ以上の要求を送信する。アプリケーションサービスプロバイダシステムは、アプリケーションの現在状態およびユーザプレファレンス情報を含む当該アプリケーションについての状態情報を含み得る要求された情報を抽出し、当該要求された情報をコンピューティングデバイス２００に送信する。コンテナランタイム２２４は、受信した状態情報に基づいてアプリケーションの現在状態をアップデートする。これにより、この開示の技術は、アプリケーションサービスプロバイダに個人を識別可能である情報を提供することなく、状態情報がエフェメラルアプリケーションについて維持されることを可能にする。
【００５８】
いくつかの例において、ユーザは複数のデバイスを所有し得、ユーザのデバイスの各々にわたってナビゲーションアプリケーションを実行し得る。しかしながら、ユーザは、当該ナビゲーションアプリケーションについてユーザアカウントを登録したくない場合があり、ナビゲーションアプリケーションデベロッパに対して匿名のままとなることを望む。いくつかの例において、アプリケーションコンテナ２０２Ａは、マルチデバイスであって変名（pseudonymous）のプライバシーフレンドリーな識別子をナビゲーションアプリケーションと、ユーザの複数のデバイスにわたって状態情報（たとえば検索履歴、プレファレンスなど）を保持することになり得る関連付けられるサービスとに提供し得る。１つ以上のデバイス上にユーザによってインストールされた各アプリケーションには、（ユーザ，アプリケーション，リセットシーケンス）のタプルについて一意であるオペーク識別子が割り当てられ得る。アプリケーションサービスプロバイダに個人を識別する情報を提供するのではなく、アプリケーションサービスプロバイダはオペーク識別子を受信する。
【００５９】
たとえば、ユーザが初めて自身の電話上でナビゲーションアプリケーションを起動した場合、スーパーバイザーコンポーネント２２８Ａは、タプル（ｕｓｅｒ１，ｎａｖａｐｐ，１）のハッシュといったユーザについての一意のＩＤを自動的に提供し得、それをアプリケーションコンテナ２０２Ａに提供し得、アプリケーションコンテナ２０２Ａは、起動の際にナビゲーションアプリケーションにマッピングされる。特定の位置がユーザの家に対応することをユーザが示す場合、ナビゲーションアプリケーションは、ナビゲーションアプリケーションデベロッパによって提供されるアプリケーションサービス上で、一意識別子に対してこの検索履歴を格納し得る。その後、ユーザが自身のタブレット上でナビゲーションアプリケーションを起動すると、タブレット上で実行されるスーパーバイザーコンポーネントは、同じタプル（ｕｓｅｒ１，ｎａｖａｐｐ，１）をハッシュすることにより、当該ユーザについて同じ一意識別子を生成し得る。当該ユーザについて同じ一意識別子を生成することによって、ナビゲーションアプリケーションは、ナビゲーションアプリケーション内でユーザの家の位置を示し得る。
【００６０】
その後、ユーザは、保存された状態情報をリセットしたくなると、ユーザは、ナビゲーションアプリケーションとの自身の関係を（たとえばナビゲーションアプリケーションのセッティングユーザインターフェイスを介して）リセットし得る。ナビゲーションアプリケーションの次の呼出の際に、アプリケーションコンテナ２０２Ａは、ナビゲーションアプリケーションに新しい一意識別子を提供し得る。一例として、コンテナランタイム２２４は、タプルのリセット状態部分をインクリメントし得、これにより、ハッシュされたときに異なる一意識別子を生成する異なるタプル（ｕｓｅｒ１，ｎａｖａｐｐ，２）が得られる。一意識別子を変更することによって、ナビゲーションアプリケーションは、以前の一意識別子に関連付けられる状態情報をロードすることができなくなる。したがって、ユーザの家として異なる位置をユーザが示す場合、この新しい位置は、ユーザの家に関連付けられる以前の位置の如何なる知見もなしで、上記新しい一意識別子に関連付けられる。すなわち、この開示の技術は、ユーザの個人を識別する情報を提供することをユーザに要求することなく、ユーザが一貫したエクスペリエンスを有し得るように、アプリケーションが異なるデバイスにわたって状態情報を維持することを可能にし得る。
【００６１】
さまざまな場合において、ナビゲーションアプリケーションはユーザの個人を識別可能である情報を必要とする場合がある。たとえば、ナビゲーションアプリケーションを使用してユーザがレストランを検索する場合、当該ナビゲーションアプリケーションは、レストランで予約をするオプションを提示し得る。ユーザが予約をするためにナビゲーションアプリケーションを使用することを選択する場合、ナビゲーションアプリケーションは、予約の要求を完了するために、ユーザの名前および他の個人を識別可能である情報を要求し得る。ユーザがナビゲーションアプリケーションに情報を提供する場合、ナビゲーションアプリケーションは一意識別子に当該ユーザの情報を関連付け得る。しかしながら、ユーザは容易に状態情報をリセットし得、新しい一意識別子を生成し得る。
【００６２】
いくつかの場合において、中間のサービスプロバイダが、そのようなサービスを運用することをアプリケーションデベロッパに要求することなく、一意識別子に関連付けられる状態情報を維持し得る。中間サービスプロバイダは、現在の識別子の下で格納されたすべての以前の状態が、アプリケーションを起動する前にデバイス上に存在することを保証し得る。中間サービスプロバイダが当該ユーザについての個人を識別する情報と一意識別子との両方を格納する場合、中間サービスプロバイダは、ユーザが自身の識別性を当該アプリケーションに明らかにすることなく、特定の要求に応え得る。たとえば、中間サービスプロバイダは、追加のサインインまたはアカウント選択ステップなしで匿名で実行され得る支払いを完了することが可能であり得る。別の例として、中間サービスプロバイダは、Ｅメールを介してリエンゲージメント（re-engagement）を管理し、通知をプッシュし得る。デベロッパは一意識別子を使用してユーザを指定し得、中間サービスプロバイダは、ユーザにとって単一で理解が容易な場所においてアンチスパムコントロールを実施し得、デベロッパに情報が漏れることなく最終的に一意識別子を実際のものと交換する。
【００６３】
図３は、本開示の１つ以上の局面に従った、コンピューティングデバイス１００および／または２００のさらなる詳細を示すブロック図である。図３は、コンピューティングデバイス１００および／または２００の１つの特定の例のみを示す。コンピューティングデバイス１００および／または２００の他の多くの例は他の場合において使用されてもよく、例示的なコンピューティングデバイス３００に含まれるコンポーネントのサブセットを含んでもよく、または、図３における例示的なコンピューティングデバイス３００に示されない付加的なコンポーネントを含んでもよい。
【００６４】
図３の例において示されるように、コンピューティングデバイス３００は、１つ以上のプロセッサ３４０と、１つ以上の入力コンポーネント３４２と、１つ以上の通信ユニット３４４と、１つ以上の出力コンポーネント３４６と、１つ以上のストレージデバイス３４８と、存在感知型ディスプレイ３１２とを含む。コンピューティングデバイス３００のストレージデバイス３４８は、オペーク識別子モジュール３２２と、ＵＩモジュール３２０と、オペレーティングシステム３３６とを含む。コミュニケーションチャンネル３５０は、コンポーネント間通信のために、コンポーネント３４０、３４４、３４６、３４２、３５８、３０４、３１３、３１５、３４８、３２０、３２２、３２４、３２６および／または３３６の各々を（物理的に、通信可能に、および／または、動作可能に）相互接続し得る。いくつかの例では、コミュニケーションチャンネル３５０は、システムバス、ネットワーク接続、１つ以上のプロセス間通信データ構造、または、ハードウェアおよび／もしくはソフトウェア間でデータを通信するための任意の他のコンポーネントを含み得る。
【００６５】
１つ以上のプロセッサ３４０は、機能を実現し、および／または、コンピューティングデバイス３００内で命令を実行し得る。たとえば、コンピューティングデバイス３００上のプロセッサ３４０は、ストレージデバイス３４８によって格納され、オペレーティングシステム３３６、オペーク識別子モジュール３２２およびＵＩモジュール３２０の機能を提供する命令を受信および実行し得る。プロセッサ３４０によって実行されるこれらの命令により、コンピューティングデバイス３００は、プログラム実行中にストレージデバイス３４８内に情報を格納し、および／または、当該情報を修正し得る。プロセッサ３４０は、１つ以上の動作を実行するために、オペレーティングシステム３３６、オペーク識別子モジュール３２２およびＵＩモジュール３２０の命令を実行し得る。すなわち、オペレーティングシステム３３６、オペーク識別子モジュール３２２およびＵＩモジュール３２０は、この開示に記載されるさまざまな機能を実行するために、プロセッサ３４０によって動作可能であり得る。
【００６６】
コンピューティングデバイス３００の１つ以上の入力コンポーネント３４２は入力を受信し得る。入力の例は、たとえば、触覚入力、音声入力、運動入力、および光入力である。コンピューティングデバイス３００の入力コンポーネント３４２は、一例において、マウス、キーボード、音声応答システム、ビデオカメラ、ボタン、コントロールパッド、マイクロフォン、または、人間もしくはマシンからの入力を検出するための任意の他のタイプのデバイスを含む。いくつかの例において、入力コンポーネント３４２は、存在感知型スクリーン、タッチ感知型スクリーンなどを含み得る存在感知型入力コンポーネントであり得る。
【００６７】
コンピューティングデバイス３００の１つ以上の出力コンポーネント３４６は出力を生成し得る。出力の例は、触覚出力、音声出力、およびビデオ出力である。いくつかの例において、コンピューティングデバイス３００の出力コンポーネント３４６は、存在感知型スクリーン、サウンドカード、ビデオグラフィックスアダプタカード、スピーカ、陰極線管（ＣＲＴ）モニタ、液晶ディスプレイ（ＬＣＤ）、または、人間もしくはマシンへの出力を生成するための任意の他のタイプのデバイスを含む。出力コンポーネントは、陰極線管（ＣＲＴ）モニタ、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）といったディスプレイコンポーネント、または、触覚出力、音声出力、および／もしくは視覚出力を生成するための任意の他のタイプのデバイスを含み得る。
【００６８】
いくつかの例において、コンピューティングデバイス３００の存在感知型ディスプレイ３０４は、入力コンポーネント３４２および／または出力コンポーネント３４６の機能を含み得る。図３の例では、存在感知型ディスプレイ３０４は、存在感知型スクリーンまたはタッチ感知型スクリーンのような存在感知型入力コンポーネント３１５を含み得る。いくつかの例において、存在感知型入力コンポーネント３１５は、存在感知可能型入力コンポーネントにおいておよび／または存在感知可能型入力コンポーネントの近くで、物体を検出し得る。１つの例示的な範囲として、存在感知型入力コンポーネント３１５は、存在感知型入力コンポーネント３１５の２インチ以内にある指またはスタイラスのような物体を検出し得る。存在感知型入力コンポーネント３１５は、物体が検出された存在感知型入力コンポーネントの位置（たとえば（ｘ，ｙ）座標）を決定し得る。別の例示的な範囲では、存在感知型入力コンポーネント３１５は、存在感知型入力コンポーネント３１５から２インチ以下で物体を検出し得、他の範囲も可能である。存在感知型入力コンポーネント３１５は、容量認識技術、誘導認識技術または光学式認識技術を用いて、ユーザの指によって選択された存在感知型入力コンポーネント３１５の位置を決定し得る。
【００６９】
いくつかの例では、存在感知型ディスプレイ３０４はさらに、出力コンポーネント３４６に関して記載されたような触覚刺激、音声刺激、またはビデオ刺激を使用して、ユーザに出力を提供し得る。たとえば、存在感知型ディスプレイ３０４は、グラフィカルユーザインターフェイスを提示するディスプレイコンポーネント３１３を含み得る。ディスプレイコンポーネント３１３は、出力コンポーネント３４６に関して記載したような視覚出力を提供する任意のタイプの出力コンポーネントであり得る。コンピューティングデバイス３００の統合されたコンポーネントとして示されているが、存在感知型ディスプレイ３０４は、いくつかの例では、入力および出力を送信および／または受信するためにコンピューティングデバイス３００の他のコンポーネントとデータパスを共有する外部コンポーネントであり得る。たとえば、存在感知型ディスプレイ３０４は、コンピューティングデバイス３００の外部パッケージング内に位置し物理的に接続されるコンピューティングデバイス３００の内蔵のコンポーネントであり得る（たとえば携帯電話上のスクリーン）。別の例では、存在感知型ディスプレイ３０４は、コンピューティングデバイス３００のパッケージングの外に位置し物理的に分離されているコンピューティングデバイス３００の外部コンポーネントであり得る（たとえば、タブレットコンピュータと有線および／または無線データパスを共有するモニタ、プロジェクタなど）。いくつかの例では、存在感知型ディスプレイ３０４は、コンピューティングデバイス３００のパッケージングの外に位置し、物理的にパッケージングから分離されている場合、入力を受信するための存在感知型入力コンポーネント３１５、および、出力を提供するためのディスプレイコンポーネント３１３という２つの別個のコンポーネントによって実現され得る。
【００７０】
コンピューティングデバイス３００の１つ以上の通信ユニット３４４は、データを送信および／または受信することにより外部デバイスと通信し得る。たとえば、コンピューティングデバイス３００は、通信ユニット３４４を使用して、セルラー無線ネットワークのような無線ネットワーク上で無線信号を送信および／または受信し得る。いくつかの例において、通信ユニット３４４は、グローバルポジショニングシステム（ＧＰＳ）ネットワークのような衛星ネットワーク上で衛星信号を送信および／または受信し得る。通信ユニット３４４の例は、（たとえばイーサネット（登録商標）カードのような）ネットワークインターフェイスカード、光学トランシーバ、無線周波数トランシーバ、ＧＰＳレシーバ、または、情報を送信および／もしくは受信し得る任意の他のタイプのデバイスを含む。通信ユニット３４４の他の例は、モバイルデバイスにおいて発見されるブルートゥース（登録商標）、ＧＰＳ、３Ｇ、４ＧおよびＷｉ−Ｆｉ（登録商標）無線、ならびに、ユニバーサルシリアルバス（ＵＳＢ）コントローラなどを含み得る。
【００７１】
図３に示されるように、コンピューティングデバイス３００は電源３５８を含み得る。いくつかの例において、電源３５８は電池であり得る。電源３５８は、コンピューティングデバイス３００の１つ以上のコンポーネントに電力を提供し得る。電源３５８の例は、亜鉛炭素、鉛酸、ニッケルカドミウム（ＮｉＣｄ）、水素化ニッケル金属（ＮｉＭＨ）、リチウムイオン（Ｌｉイオン）、および／または、リチウムイオンポリマー（Ｌｉイオンポリマー）化学を有する電池を含み得るがこれらに限定されない。いくつかの例において、電源３５８は制限のある容量（たとえば１０００〜３０００ｍＡｈ）を有し得る。
【００７２】
コンピューティングデバイス３００内の１つ以上のストレージデバイス３４８は、コンピューティングデバイス３００の動作の間の処理のために情報を格納し得る。いくつかの例において、ストレージデバイス３４８は一時メモリであり、これは、ストレージデバイス３４８の主目的が長期間の格納ではないことを意味する。コンピューティングデバイス３００上のストレージデバイス３４８は、揮発性メモリとして、情報の短期間の格納のために構成されており、したがって、ディアクティベートにされると、格納されたコンテンツを保持しない。揮発性メモリの例は、ランダムアクセスメモリ（ＲＡＭ）と、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、スタティックランダムアクセスメモリ（ＳＲＡＭ）と、当該技術において公知の揮発性メモリの他の形態とを含む。
【００７３】
ストレージデバイス３４８はさらに、いくつかの例において、１つ以上のコンピュータ読取可能記憶媒体を含む。ストレージデバイス３４８は揮発性メモリより大きな量の情報を格納するように構成され得る。ストレージデバイス３４８はさらに、不揮発性メモリスペースとして情報の長期間の格納のために構成され得、アクティベート／オフサイクルの後でも情報を保持し得る。不揮発性メモリの例は、磁気ハードディスク、光学ディスク、フロッピー（登録商標）ディスク、フラッシュメモリ、または、電気的プログラム可能メモリ（ＥＰＲＯＭ： electrically programmable memory）または電気的消去可能プログラム可能メモリ（ＥＥＰＲＯＭ：electrically erasable and programmable）の形態を含む。ストレージデバイス３４８は、オペレーティングシステム３３６、オペーク識別子モジュール３２２およびＵＩモジュール３２０に関連付けられるプログラム命令および／またはデータを格納し得る。ＵＩモジュール３２０およびオペレーティングシステム３３６はそれぞれ、図１のＵＩモジュール１２０および図２のオペレーティングシステム２３６の例であり得、図１および図２に関して記載されたようなＵＩモジュール１２０およびオペレーティングシステム２３６の機能を提供し得る。
【００７４】
本開示の技術に従うと、オペーク識別子モジュール３２２は、コンピューティングデバイス３００の現在のユーザに関する情報と、コンピューティングデバイス３００において実行されるアプリケーションについてのアプリケーション識別子と、リセット状態とに基づき、一意識別子を生成する。コンピューティングデバイス３００は、一意識別子と、アプリケーションサービスプロバイダシステムによって維持される、情報についての１つ以上の要求、アプリケーション使用情報、位置情報、アプリケーションの現在状態に関する情報などといったアプリケーションによって生成される情報とをアプリケーションサービスプロバイダシステム（たとえば図１のアプリケーションシステムプロバイダシステム１７０）に提供する。
【００７５】
識別子発生器モジュール３２４は、一意識別子が個人を識別可能である情報を含まないように一意識別子を生成する。コンピューティングデバイス３００の現在のユーザについての情報を使用して生成されると記載されているが、現在のユーザについての個人を識別可能である情報は一意識別子内に含まれない。その代わりに、識別子発生器モジュール３２４は、現在のユーザについての情報（たとえばＥメールアドレス、電話番号、アカウント番号といったユーザ識別子、または、コンピューティングデバイス３００の現在のユーザを一意に識別する任意の他の情報）と、関連付けられるアプリケーションについてのアプリケーション識別子と、リセット状態の値とを含むタプルにハッシュ関数を適用し得る。さまざまな例において、識別子発生器モジュール３２４はタプルに加えてソルト（salt）を使用して一意識別子を生成しており、これにより、一意識別子を生成するために使用され得たであろう任意の潜在的に個人を識別可能な情報を抽出するために、ハッシュ関数をリバースすることがより困難になり得る。
【００７６】
識別子リセットモジュール３２６は、（たとえばあるアプリケーションについて状態情報をリセットするユーザ入力を存在感知型ディスプレイ３０４が検出することに応答して）状態リセット要求を受信し得る。アプリケーションの状態をリセットするための要求を受信することに応答して、識別子リセットモジュール３２６は、当該アプリケーションについてリセット状態をアップデートする。たとえば、識別子リセットモジュール３２６は、たとえばリセット状態の値をインクリメントするかそうでなければ変更することによって、アプリケーションのリセット状態をアップデートする。アプリケーションのリセット状態の値を変更することによって、一意識別子を生成するために識別子発生器モジュール３２４によって使用されるタプルが異なるので、識別子発生器モジュール３２４によって生成される一意識別子が異なることになる。たとえば、アプリケーションについての状態情報をリセットするためのユーザ入力を受信する前に、識別子発生器モジュール３２４は、タプル（ｕｓｅｒ１，ａｐｐ１，１）を使用して、一意識別子を生成し得、タプルにおける最後の値はリセット状態である。識別子リセットモジュール３２６がアプリケーション状態の値をアップデートした後、識別子発生器モジュール３２４は、タプル（ｕｓｅｒ１，ａｐｐ１，２）を使用して、アップデートされた一意識別子を生成し得る。コンピューティングデバイス３００がアップデートされた一意識別子をアプリケーションサービスプロバイダシステムに送信すると、アプリケーションサービスプロバイダシステムは、アップデートされた一意識別子をそれが新しいユーザアカウントであるかのように処理する。なぜならば、アプリケーションサービスプロバイダシステムは、アプリケーションサービスプロバイダシステムに格納されるか、または、そうでなければアプリケーションサービスプロバイダシステムに利用可能であるアップデートされた一意識別子に関連付けられる情報を有していないからである。すなわち、アプリケーション状態をリセットした後、アップデートされた一意識別子によって、アプリケーションサービスプロバイダシステムにはユーザが新規のユーザとして現れる。
【００７７】
いくつかの例において、識別子リセットモジュール３２６は、コンピューティングデバイス３００の現在のユーザに関連付けられる他のコンピューティングデバイスにアプリケーションについてのリセット状態をアップデートをさせるよう、コンピューティングデバイス３００に当該他のコンピューティングデバイスへコマンドを送信させる。当該コマンドは、リセット状態のアップデートされた値の指示を含み得る。当該コマンドを受信することに応答して、他のコンピューティングデバイスは、アップデートされたリセット状態を用いて同じユーザおよび同じアプリケーションについて他のコンピューティングデバイスによって生成されるアップデートされた一意識別子が、コンピューティングデバイス３００において識別子リセットモジュール３２６がアプリケーションについてのリセット状態をアップデートした後で識別子発生器モジュール３２４によって生成されるアップデートされた一意識別子と同じになるように、当該アプリケーションについてリセット状態をアップデートする。
【００７８】
図４は、この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するコンピューティングシステムの例示的な動作を示すフローチャートである。例示目的のためにのみ、例示的な動作は図１のコンピューティングデバイス１００の文脈内で下記に記載される。要素４００〜４１６を含んでいることが示されているが、いくつかの例では、要素４００〜４１６の１つ以上は随意であってもよく、また、要素４００〜４１６に関連付けられるアクションは、図４の例において示される順序と異なる順序で実行されてもよい。
【００７９】
図４の例において、アプリケーションサービスプロバイダシステム１７０は、コンピューティングデバイス１１０Ａにおいて実行されるアプリケーションに関連付けられる識別子を、コンピューティングデバイス１１０Ａのような第１のコンピューティングデバイスから受信する（４００）。たとえば、コンピューティングデバイス１１０Ａのユーザは、コンピューティングデバイス１１０Ａにおいて、アプリケーションを実行するための入力を提供し得る。オペーク識別子モジュール１２２Ａは、現在のユーザに関する情報と、アプリケーションについてのアプリケーション識別子と、アプリケーションのリセット状態とに基づき、アプリケーションに関連付けられる識別子を生成し得る。オペーク識別子モジュール１２２Ａによって生成される識別子は、現在のユーザについてのユーザアカウント情報、現在のユーザの名前、現在のユーザの電話番号、現在のユーザの住所などといった、コンピューティングデバイス１１０Ａの現在のユーザについての個人を識別可能である情報を含んでいない。
【００８０】
いくつかの例において、コンピューティングデバイス１１０Ａがアプリケーションを実行すると、コンピューティングデバイス１１０Ａは、アプリケーションサービスプロバイダシステム１７０に情報についての１つ以上の要求を送信し得る（４０２）。情報についての要求は、ユーザプレファレンス情報、アプリケーション使用情報、および／または、アプリケーションの現在状態に関する情報（たとえばアプリケーションが異なるデバイスにおいて実行され、ユーザがコンピューティングデバイス１１０Ａにおいてアプリケーションの使用を再開している場合）についての要求を含み得る。情報についての要求を受信することに応答して、アプリケーションサービスプロバイダシステム１７０は、アプリケーションについての履歴要求情報をアップデートし（４０４）、要求された情報を抽出し、コンピューティングデバイス１１０Ａに情報を送信する（４０６）。履歴要求情報は、アプリケーション使用情報およびユーザプレファレンス情報を含む、アプリケーションについての状態情報を含む。コンピューティングデバイス１１０Ａに送られる情報は、ユーザプレファレンス情報を含み得る。たとえば、ユーザがコンピューティングデバイス１１０Ａにおいて初めてアプリケーションを実行しているが、以前に異なるコンピューティングデバイスにおいて当該アプリケーションを実行したことがある場合、アプリケーションサービスプロバイダシステム１７０は、コンピューティングデバイス１１０Ａがユーザプレファレンス情報に従ってアプリケーションを構成し得るように、当該アプリケーションにユーザプレファレンス情報を送信し得る。
【００８１】
いくつかの例において、アプリケーションサービスプロバイダシステム１７０は、第２のコンピューティングデバイスから識別子を受信し得る（４０８）。第２のコンピューティングデバイスの現在のユーザが第１のコンピューティングデバイスの現在のユーザと同じであり、かつ、第２のコンピューティングデバイスにおいて実行されるアプリケーションが、第１のコンピューティングデバイスにおいて実行される同じアプリケーション（当該アプリケーションの異なるインスタンス）であり、かつ、アプリケーションのリセット状態が第２のコンピューティングデバイス上において第１のコンピューティングデバイス上と同じである場合、第２のコンピューティングデバイスからの識別子は、第２のコンピューティングデバイスの現在のユーザについての個人を識別可能である情報を含んでおらず、第１のデバイスから受信した識別子と同じ値を有し得る。いくつかの例において、第２のコンピューティングデバイスは、第１のコンピューティングデバイスとは異なるコンピューティングデバイス（たとえばコンピューティングデバイス１１０Ｎ）であり得る。他の例では、第２のコンピューティングデバイスは第１のコンピューティングデバイスと同じコンピューティングデバイスであるが、識別子は、同じ識別子が生成されるように、かつ、個人を識別する情報を提供することをユーザに要求することなく状態情報がアプリケーションサービスプロバイダシステム１７０から抽出され得るように、アプリケーションが再インストールされた後、生成される。
【００８２】
図４に示される例において、アプリケーションサービスプロバイダシステム１７０は、第２のコンピューティングデバイスから受信される識別子に基づいて、当該アプリケーションについてのユーザプレファレンス情報を決定し（４１０）、ユーザプレファレンス情報を第２のコンピューティングデバイスに送信する（４１２）。
【００８３】
第１および／または第２のコンピューティングデバイスの現在のユーザは、アプリケーションの状態をリセットするよう選択し得、これにより、アプリケーションについて異なる識別子をコンピューティングデバイスに生成させる。アプリケーションサービスプロバイダシステム１７０は、異なる識別子を受信し（４１４）、現在のユーザが異なるユーザであるかのように異なる識別子を処理する。すなわち、ユーザがアプリケーションの状態をリセットした後に生成および送信される識別子は、同じコンピューティングデバイスを使用して同じユーザによって同じアプリケーションについて生成および送信された以前の識別子とは異なるので、アプリケーションサービスプロバイダシステム１７０は、以前に格納された履歴要求情報のいずれも抽出することができず、ユーザが以前にアプリケーションを使用したことがない新しいユーザであるかのようにアプリケーション状態情報を提供するように構成される。したがって、異なる識別子を受信することに応答して、アプリケーションサービスプロバイダシステム１７０は、アプリケーションについて異なるユーザプレファレンス情報を決定し（４１６）、第１および／または第２のコンピューティングデバイスに異なるユーザプレファレンス情報を送信し得る。
【００８４】
図５Ａおよび図５Ｂは、この開示の技術に従った、複数のアプリケーションインスタンスにわたって識別子を提供するコンピューティングデバイスの例示的な動作を示すフローチャートである。例示目的のためにのみ、例示的な動作は図１のコンピューティングデバイス１００および図２のコンピューティングデバイス２００の文脈内で下記に記載される。
【００８５】
図５Ａにおいて示されるように、第１のコンピューティングデバイス（たとえばコンピューティングデバイス２００）は、アプリケーションの特定の機能を実行するための要求を受信する（５００）。たとえば、ユーザは、アプリケーションを起動するためにコンピューティングデバイス２００においてユーザ入力を提供し得、コンピューティングデバイス２００のスーパーバイザーコンポーネント２２８Ａは、アプリケーションを実行するための要求として、ユーザ入力の指示を受信し得る。スーパーバイザーコンポーネント２２８Ａは、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナ（たとえばアプリケーションコンテナ２０２Ａのようなアプリケーションコンテナ２０２のうちの１つ）がコンピューティングデバイス２００のメモリ（たとえば図３のストレージコンポーネント３４８のうちの１つ）において割り当てられているかどうか決定し得る（５０２）。
【００８６】
アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがメモリにおいて割り当てられていない（５０２の「ＮＯ」分岐）と決定することに応答して、コンピューティングデバイス２００は、アプリケーションコンテナ（たとえばアプリケーションコンテナ２０２Ａ）を割り当て得る（５０４）。たとえば、コンピューティングデバイス２００は、たとえばアプリケーションについての一意識別子を含むリモートコンピューティングシステムに要求を送信することにより、リモートコンピューティングシステムからアプリケーション定義を抽出し得る。リモートコンピューティングシステムは、ルックアップを実行し得、対応するアプリケーション定義を識別し得る。リモートコンピューティングシステムは、コンピューティングデバイス２００にアプリケーション定義を送信し得る。コンピューティングデバイス２００は、リモートコンピューティングシステムからアプリケーション定義を受信し得、アプリケーションについて、コンピューティングデバイス２００のメモリにおいてアプリケーションコンテナ２０２Ａを割り当て得る。
【００８７】
アプリケーションコンテナ２０２Ａは、要求された機能を提供するために必要とされるアプリケーションの１つ以上のサブパッケージを識別し、ダウンロードし、インストールし得る（５０６）。たとえば、スーパーバイザーコンポーネント２２８Ａが以前に（すなわちアプリケーションを実行するための現在の要求がコンピューティングデバイス２００によって受信される前に）アプリケーションコンテナ２０２を割当解除していれば、スーパーバイザーコンポーネント２２８Ａは、当該アプリケーションのために別のアプリケーションコンテナを割り当て、アプリケーションを実行するための現在の要求において特定されるアプリケーションの機能を実行するために必要とされるインストール可能なサブパッケージの１つ以上を再インストールする必要があり得る。この例において、スーパーバイザーコンポーネント２２８Ａが以前にアプリケーションに割り当てたアプリケーションコンテナを割当解除したので、アプリケーションを実行するための現在の要求は、アプリケーションを実行する第２またはその後の要求であり得る。
【００８８】
メモリにおいてアプリケーションコンテナを割り当てることに応答して、または、アプリケーションコンテナが既にメモリに割り当てられていると決定することに応答して（５０２の「ＹＥＳ」分岐）、アプリケーションコンテナ２０２Ａのコンテナランタイム２２４は、コンピューティングデバイス２００の現在のユーザを決定し得（５０８）、アプリケーションのリセット状態を決定し得る（５１０）。コンテナランタイム２２４は、コンピューティングデバイス２００における現在ログインされているユーザアカウントまたは任意の他のメカニズムに基づき、コンピューティングデバイス２００の現在のユーザを決定し得る。アプリケーションのリセット状態は、リセット状態変数の現在値であり得、コンピューティングデバイス２００のメモリからリセット状態変数の値をロードすることによってコンテナランタイム２２４により決定され得る。
【００８９】
コンテナランタイム２２４は、現在のユーザに関する情報（たとえば現在のユーザのユーザ識別子）と、アプリケーションについてのアプリケーション識別子と、リセット状態変数の値とを用いて一意識別子を生成する（５１２）。一意識別子は、現在のユーザについての個人を識別可能である情報を含んでいないが、アプリケーションについてのアプリケーション状態情報を格納および抽出するために、一意にユーザおよびアプリケーションを識別するようアプリケーションサービスプロバイダシステム１７０によって使用可能である。コンテナランタイム２２４は、たとえば、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルにハッシュ関数を適用することによって一意識別子を生成し得る。いくつかの例において、コンテナランタイム２２４はさらにタプルとともにソルトを含んでおり、ソルトおよびタプルの組み合わせにハッシュ関数を適用する。
【００９０】
コンピューティングデバイス２００は、一意識別子と、情報についての１つ以上の要求とをアプリケーションサービスプロバイダシステム１７０に送信する（５１４）。情報についての要求は、ユーザプレファレンス情報についての要求、アプリケーション使用情報、アプリケーションの現在状態に関する情報などを含み得る。コンピューティングデバイス２００は、要求された情報の少なくとも部分を受信し（５１６）、コンテナランタイム２２４は、要求された情報の受信した部分に基づいてアプリケーションを構成し得る。
【００９１】
時々、コンピューティングデバイス２００のユーザは、アプリケーションの状態をリセットすることを望む場合がある。たとえば、ユーザは、（たとえばレストランの予約をするために、ナビゲーション命令を受信するために、または、アプリケーションの他の機能のために）個人を識別可能である情報をアプリケーションに提供したが、現在は当該アプリケーションに個人を識別可能である情報にもはやアクセスしないことを望んでいる場合がある。そのため、コンピューティングデバイス２００は、アプリケーションの状態をリセットするための要求を受信する（５１８）。アプリケーションの状態をリセットするための要求は、アプリケーションの状態をリセットするためのグラフィカル要素が表示される圧力感知型スクリーンの位置において、コンピューティングデバイス２００によって検出されるユーザ入力の指示であり得る。
【００９２】
アプリケーションの状態をリセットするための要求を受信することに応答して、コンテナランタイム２２４は、リセット状態変数の値をアップデートし得る（５２０）。たとえば、コンテナランタイムは、リセット状態変数の値をインクリメントし得る。次にコンピューティングデバイス２００がアプリケーションを実行する時に、コンテナランタイム２２４は、アップデートされたリセット状態を使用して、アップデートされた一意識別子を生成する（５２６）。現在のユーザが同じユーザでありアプリケーションが同じアプリケーションである場合、ユーザ識別子と、アプリケーション識別子と、リセット状態とのタプルのリセット状態部分が変更しているので、コンテナランタイム２２４は異なる一意識別子を生成する。コンピューティングデバイス２００がアップデートされた一意識別子をアプリケーションサービスプロバイダシステム１７０に送信すると（５２８）、コンピューティングデバイス２００は、コンピューティングデバイス２００が以前の一意識別子を送信した場合とはアプリケーションについての異なる状態情報を受信することになる（５３０）。アップデートされた一意識別子は以前の一意識別子と異なるので、アプリケーションサービスプロバイダシステム１７０は、当該ユーザが、新しいユーザといったアプリケーションの異なるユーザであるかのように、当該ユーザを処理する。したがって、アプリケーションプロバイダシステム１７０は異なる情報を抽出し、当該異なる情報をコンピューティングデバイス２００に送信する。
【００９３】
いくつかの場合において、コンピューティングデバイス２００は、コンピューティングデバイス２００の現在のユーザに関連付けられる１つ以上の他のコンピューティングデバイスにわたってアプリケーション状態をリセットするように構成され得る。そのような場合において、コンテナランタイム２２４は、コンピューティングデバイス２００に、リセット要求またはコマンドを他のコンピューティングデバイスへ送信させ得る（５２２）。一例として、コンピューティングデバイス２００は、現在のユーザのユーザアカウントに関連付けられるコンピューティングデバイス識別子に基づいて、どのコンピューティングデバイスにリセット要求を送信するべきかを決定し得る。リセット要求を受信することに応答して、他のコンピューティングデバイスは、アプリケーションについての状態情報をリセットする（５２４）。典型的に、リセットを実行した後、他のコンピューティングデバイスにおけるアプリケーションについてのリセット状態は、ユーザが他のコンピューティングデバイスのうちの１つにおいてアプリケーションを実行する場合、他のコンピューティングデバイスにおいて生成される一意識別子が、コンピューティングデバイス２００において生成された一意識別子と同じになるように、コンピューティングデバイス２００におけるアプリケーションについてのリセット状態と同じである。これにより、この開示の技術は、アプリケーション状態情報が、個人を識別可能である情報を提供することをユーザに要求することなく、ユーザのコンピューティングデバイスにわたって共有され得るメカニズムを提供し得る。
【００９４】
例１．コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することを含み、さらに、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記コンピューティングデバイスのメモリに割り当てられていると決定することに応答して、上記アプリケーションコンテナのコンテナランタイムによって、上記コンピューティングデバイスの現在のユーザを決定することと、上記コンテナランタイムによって、上記アプリケーションのリセット状態を決定することとを含み、さらに、上記コンテナランタイムによって、上記コンピューティングデバイスの上記現在のユーザと、上記リセット状態と、上記アプリケーションについてのアプリケーション識別子とに基づき、上記現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、上記コンピューティングデバイスによって、上記一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、上記情報についての１つ以上の要求を送信することに応答して、上記コンピューティングデバイスによって、上記アプリケーションサービスプロバイダから、上記アプリケーションについての上記現在のユーザに関連付けられる状態情報を受信することとを含む、方法。
【００９５】
例２．上記アプリケーションを実行するための上記要求は、上記アプリケーションを実行するための第１の要求であり、上記アプリケーションコンテナは第１のアプリケーションコンテナであり、上記方法はさらに、上記スーパーバイザーコンポーネントによって、上記アプリケーションの上記インストール可能なサブパッケージを維持するための上記第１のアプリケーションコンテナを割当解除することと、上記第１のアプリケーションコンテナの割当解除した後、上記コンピューティングデバイスによって、上記アプリケーションを実行するための第２の要求を受信することとを含み、さらに、上記アプリケーションを実行するための上記第２の要求を受信することに応答して、上記スーパーバイザーコンポーネントによって、上記アプリケーションの上記インストール可能なサブパッケージを維持するための第２のアプリケーションコンテナを割り当てることと、上記第２のアプリケーションコンテナによって、上記アプリケーションを実行するための上記第２の要求において特定される上記アプリケーションの機能を実行するために必要とされる上記アプリケーションの上記インストール可能なサブパッケージの１つ以上をインストールすることと、上記第２のアプリケーションコンテナのコンテナランタイムによって、上記アプリケーションのアップデートされた現在のユーザを決定することとを含み、上記アップデートされた現在のユーザは上記現在のユーザと同じであり、さらに、上記コンテナランタイムによって、上記アプリケーションのアップデートされたリセット状態を決定することを含み、上記リセット状態は上記アップデートされたリセット状態と同じであり、さらに、上記アプリケーションコンテナのコンテナランタイムによって、上記アップデートされた現在のユーザおよび上記アップデートされたリセット状態に基づいて、上記アップデートされた現在のユーザについての個人を識別可能である情報を含んでいないアップデートされた一意識別子を生成することを含み、上記アップデートされた一意識別子は上記一意識別子と同じであり、さらに、上記コンピューティングデバイスによって、上記アプリケーションサービスプロバイダに上記アップデートされた一意識別子を送信することと、上記コンピューティングデバイスによって、上記アプリケーションについて上記現在のユーザに関連付けられる上記状態情報を上記アプリケーションサービスプロバイダから受信することとを含む、例１に記載の方法。
【００９６】
例３．上記一意識別子は第１の一意識別子であり、上記コンピューティングデバイスは第１のコンピューティングデバイスであり、上記方法はさらに、第２のコンピューティングデバイスによって、上記アプリケーションの異なるインスタンスを実行するための要求を受信することと、上記第２のコンピューティングデバイスによって、上記第２のコンピューティングデバイスの現在のユーザを決定することと、上記第２のコンピューティングデバイスによって、上記第２のデバイス上で上記アプリケーションのリセット状態を決定することと、上記第２のコンピューティングデバイスによって、上記第２のコンピューティングデバイスの上記現在のユーザおよび上記第２のデバイス上の上記アプリケーションの上記リセット状態に基づき、上記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、上記リセット状態および上記アップデートされたリセット状態が同じである場合、上記第１の一意識別子および上記第２の一意識別子は同じであり、上記リセット状態が上記アップデートされたリセット状態とは異なる場合、上記第１の一意識別子および上記第２の一意識別子は異なり、さらに、上記第２のコンピューティングデバイスによって、上記アプリケーションサービスプロバイダに上記第２の一意識別子を送信することと、上記第１の一意識別子および上記第２の一意識別子が同じである場合、上記第２のコンピューティングデバイスによって、上記アプリケーションサービスプロバイダから上記１つ以上のアプリケーション要求に関する情報を受信することとを含む、例１および２のいずれかの組み合わせに記載の方法。
【００９７】
例４．上記一意識別子は第１の一意識別子であり、上記方法はさらに、上記コンピューティングデバイスによって、上記アプリケーションの状態をリセットするための要求を受信することと、上記コンピューティングデバイスによって、上記アプリケーションの上記リセット状態をアップデートすることと、上記コンピューティングデバイスによって、上記コンピューティングデバイスの上記現在のユーザおよび上記アプリケーションの上記リセット状態に基づき、上記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、上記第１の一意識別子および上記第２の一意識別子は異なっており、さらに、上記コンピューティングデバイスによって、上記アプリケーションの上記状態をリセットした後、上記現在のユーザが上記アプリケーションサービスプロバイダには異なるユーザであるように現れるように、上記第２の一意識別子をアプリケーションサービスプロバイダに送信することを含む、例１〜３のいずれかの組み合わせに記載の方法。
【００９８】
例５．上記コンピューティングデバイスは、第１のコンピューティングデバイスであり、第２のコンピューティングデバイスは上記現在のユーザに関連付けられており、上記方法はさらに、上記アプリケーションの上記状態をリセットするための上記要求を上記第１のコンピューティングデバイスから上記第２のコンピューティングデバイスに送信することと、上記アプリケーションの上記状態をリセットするための上記要求を受信することに応答して、上記第２のコンピューティングデバイスによって、上記第２のコンピューティングデバイスにおける上記アプリケーションの上記リセット状態を、上記第１のコンピューティングデバイスにおける上記アプリケーションの上記リセット状態と同じになるようにアップデートすることとを含む、例４に記載の方法。
【００９９】
例６．上記一意識別子を生成することは、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルをハッシュすることを含む、例１〜５のいずれかの組み合わせに記載の方法。
【０１００】
例７．上記状態情報は、上記アプリケーションの現在状態に関する情報と、上記アプリケーションについての上記現在のユーザの履歴アプリケーション使用情報と、上記アプリケーションについての上記ユーザのユーザプレファレンス情報とのうちの１つ以上を含む、例１〜６のいずれかの組み合わせに記載の方法。
【０１０１】
例８．コンピューティングデバイスであって、スーパーバイザーコンポーネントを格納する１つ以上のストレージデバイスと、１つ以上のプロセッサとを含み、上記１つ以上のプロセッサは、上記スーパーバイザーコンポーネントを実行して、アプリケーションを実行するための要求を受信することと、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記１つ以上のストレージデバイスにおいて割り当てられているかどうか決定することとを行わせ、上記１つ以上のプロセッサは上記アプリケーションコンテナを実行して、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記１つ以上のストレージデバイスにおいて割り当てられていると決定することに応答して、上記コンピューティングデバイスの現在のユーザを決定することと、上記アプリケーションのリセット状態を決定することと、上記コンピューティングデバイスの上記現在のユーザと、上記リセット状態と、上記アプリケーションについてのアプリケーション識別子とに基づき、上記現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、上記一意識別子と情報についての１つ以上の要求とをアプリケーションサービスプロバイダに送信することとを行わせ、上記情報についての１つ以上の要求を送信することに応答して、上記アプリケーションについての上記現在のユーザに関連付けられる状態情報を上記アプリケーションサービスプロバイダから受信することを行わせる、コンピューティングデバイス。
【０１０２】
例９．上記アプリケーションを実行するための上記要求は、上記アプリケーションを実行するための第１の要求であり、上記アプリケーションコンテナは第１のアプリケーションコンテナであり、上記１つ以上のプロセッサは、上記スーパーバイザーコンポーネントを実行して、上記アプリケーションの上記インストール可能なサブパッケージを維持するための上記第１のアプリケーションコンテナを割当解除することと、上記第１のアプリケーションコンテナを割当解除した後に、上記アプリケーションを実行するための第２の要求を受信することと、上記アプリケーションを実行するための上記第２の要求を受信することに応答して、上記アプリケーションの上記インストール可能なサブパッケージを維持するための第２のアプリケーションコンテナを割り当てることと、上記１つ以上のプロセッサは上記第２のアプリケーションコンテナを実行して、上記アプリケーションを実行するための上記第２の要求において特定される上記アプリケーションの機能を実行するために必要とされる上記アプリケーションの上記インストール可能なサブパッケージの１つ以上をインストールすることと、上記アプリケーションのアップデートされた現在のユーザを決定することとを行わせ、上記アップデートされた現在のユーザは上記現在のユーザと同じであり、さらに、上記アプリケーションのアップデートされたリセット状態を決定することを行わせ、上記リセット状態は上記アップデートされたリセット状態と同じであり、さらに、上記アップデートされた現在のユーザおよび上記アップデートされたリセット状態に基づいて、上記アップデートされた現在のユーザについての個人を識別可能である情報を含んでいないアップデートされた一意識別子を生成することを行わせ、上記アップデートされた一意識別子は上記一意識別子と同じであり、さらに、上記アップデートされた一意識別子を上記アプリケーションサービスプロバイダに送信することと、上記アプリケーションについての上記現在のユーザに関連付けられる上記状態情報を上記アプリケーションサービスプロバイダから受信することとを行わせる、例８に記載のコンピューティングデバイス。
【０１０３】
例１０．上記一意識別子は第１の一意識別子であり、上記１つ以上のプロセッサは上記アプリケーションコンテナを実行して、上記アプリケーションの状態をリセットするための要求を受信することと、上記アプリケーションの上記リセット状態をアップデートすることと、上記コンピューティングデバイスの上記現在のユーザおよび上記アプリケーションの上記アップデートされたリセット状態に基づき、上記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを行わせ、上記第１の一意識別子および上記第２の一意識別子は異なっており、さらに、上記アプリケーションの上記状態をリセットした後、上記現在のユーザが上記アプリケーションサービスプロバイダには異なるユーザであるように現れるように、上記第２の一意識別子をアプリケーションサービスプロバイダに送信することを行わせる、例８および９のいずれかの組み合わせに記載のコンピューティングデバイス。
【０１０４】
例１１．上記１つ以上のプロセッサは、上記アプリケーションコンテナを実行して、上記コンピューティングデバイスから、上記コンピューティングデバイスの上記現在のユーザに関連付けられる異なるコンピューティングデバイスに、上記アプリケーションの上記状態をリセットするための上記要求を送信することを行わせ、上記異なるコンピューティングデバイスは、上記アプリケーションの上記状態をリセットさせるための上記要求を受信することに応答して、上記コンピューティングデバイスにおける上記アプリケーションの上記リセット状態と同じになるように、上記異なるデバイスにおける上記アプリケーションのリセット状態をアップデートする、例１０に記載のコンピューティングデバイス。
【０１０５】
例１２．上記１つ以上のプロセッサは、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルにハッシュ関数を適用するために上記アプリケーションコンテナを少なくとも実行することによって、上記一意識別子を生成するために上記アプリケーションコンテナを実行する、例８〜１１のいずれかの組み合わせに記載のコンピューティングデバイス。
【０１０６】
例１３．上記状態情報は、上記アプリケーションの現在状態に関する情報と、上記アプリケーションについての上記現在のユーザの履歴アプリケーション使用情報と、上記アプリケーションについての上記ユーザのユーザプレファレンス情報とのうちの１つ以上を含む、例８〜１２のいずれかの組み合わせに記載のコンピューティングデバイス。
【０１０７】
例１４．コンピューティングシステムによって、第１のコンピューティングデバイスにおいて実行されるアプリケーションから、上記第１のコンピューティングデバイスのユーザを一意に識別するとともに個人を識別する情報を含んでいない識別子を受信することと、上記コンピューティングシステムによって、上記第１のコンピュータにおいて実行される上記アプリケーションから、情報についての１つ以上の要求を受信することとを含み、上記１つ以上の要求は、ユーザプレファレンス情報についての要求を含んでおり、さらに、上記コンピューティングシステムによって、上記１つ以上の要求に関する情報と上記識別子とに基づき、上記識別子に関連付けられる１つ以上の履歴要求情報をアップデートすることを含み、上記履歴情報は上記識別子に関連付けられるユーザプレファレンス情報を含んでおり、さらに、上記コンピューティングシステムによって、第２のコンピューティングデバイスにおいて実行されるアプリケーションから上記識別子を受信することを含み、上記第１のコンピューティングデバイス上で実行される上記アプリケーションと、上記第２のコンピューティングデバイス上で実行される上記アプリケーションとは、単一のアプリケーションの異なるインスタンスであり、さらに、上記コンピューティングシステムによって、上記識別子に基づいて、上記識別子に関連付けられる上記履歴要求情報に含まれるユーザプレファレンス情報を決定することと、上記コンピューティングシステムによって、上記第２のコンピューティングデバイスに、上記識別子に関連付けられる上記履歴要求情報に含まれる上記ユーザプレファレンス情報の少なくとも部分を送信することとを含む、方法。
【０１０８】
例１５．上記コンピューティングシステムによって、上記第１のコンピュータにおいて実行される上記アプリケーションから、上記情報についての１つ以上の付加的な要求を受信することをさらに含み、上記１つ以上の付加的な要求は、上記第１のコンピューティングデバイスの上記ユーザを一意に識別するとともに個人を識別する情報を含んでいない異なる識別子を含んでおり、さらに、上記コンピューティングシステムによって、上記異なる識別子に基づいて、上記異なる識別子に関連付けられる上記履歴要求情報に含まれる異なるユーザプレファレンス情報を決定することと、上記コンピューティングシステムによって、上記第２のコンピューティングデバイスに、上記異なるユーザプレファレンス情報の少なくとも部分を送信することとを含む、例１４に記載の方法。
【０１０９】
例１６．上記コンピューティングシステムによって、上記情報についての上記１つ以上の要求と上記識別子とに基づき、上記情報を決定することと、上記コンピューティングシステムによって、上記第１のコンピューティングデバイスに、上記情報の少なくとも部分を送信することとをさらに含む、例１４および１５のいずれかの組み合わせに記載の方法。
【０１１０】
例１７．上記履歴要求情報はさらに、上記アプリケーションの現在状態に関する情報と、アプリケーション使用情報とのうちの１つ以上を含む、例１４〜１６のいずれかの組み合わせに記載の方法。
【０１１１】
例１８．上記識別子は、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルを少なくともハッシュすることにより生成される、例１４〜１７のいずれかの組み合わせに記載の方法。
【０１１２】
例１９．上記第１のコンピューティングデバイスおよび上記第２のコンピューティングデバイスは同じコンピューティングデバイスであり、上記第２のコンピューティングデバイスにおいて実行される上記アプリケーションの上記異なるインスタンスは、上記アプリケーションの再インストールの後に同じコンピューティングデバイス上で実行される上記アプリケーションのインスタンスである、例１４〜１８のいずれかの組み合わせに記載の方法。
【０１１３】
例２０．例１〜７に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【０１１４】
例２１．命令でエンコードされるコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、コンピューティングデバイスの１つ以上のプロセッサに例１〜７に記載の方法のいずれかの組み合わせを実行させる、コンピュータ読取可能記憶媒体。
【０１１５】
例２３．例１４〜１９に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【０１１６】
例２４．命令でエンコードされるコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、コンピューティングデバイスの１つ以上のプロセッサに、例１４〜１９に記載の方法のいずれかの組み合わせを実行させる、コンピュータ読取可能記憶媒体。
【０１１７】
１つ以上の例において、記載される機能は、ハードウェア、ソフトウェア、ファームウェアまたはその随意の組み合わせにおいて実現されてもよい。ソフトウェアにおいて実現される場合、これらの機能は、１つ以上の命令またはコードとして、コンピュータ読取可能媒体上に格納または送信され得、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ読取可能媒体は、データ記憶媒体のような有形的な媒体に対応するコンピュータ読取可能記憶媒体、または、たとえば通信プロトコルに従ってある場所から別の場所までコンピュータプログラムの転送を促進する任意の媒体を含む通信媒体を含み得る。このように、コンピュータ読取可能媒体は一般に、（１）一時的でない有形的なコンピュータ読取可能記憶媒体か、または、（２）信号もしくは搬送波のような通信媒体に対応し得る。データ記憶媒体は、この開示に記載される技術の実現のために、命令、コードおよび／またはデータ構造を抽出するよう、１つ以上のコンピュータまたは１つ以上のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラムプロダクトはコンピュータ読取可能媒体を含み得る。
【０１１８】
限定としてではなく例として、そのようなコンピュータ読取可能記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光学ディスクストレージ、磁気ディスクストレージ、もしくは、他の磁気ストレージデバイス、フラッシュメモリ、または、命令またはデータ構造の形態で所望のプログラムコードを格納するために使用され得るとともにコンピュータによってアクセスされ得る任意の他の媒体を含み得る。さらに、任意の接続が適切にコンピュータ読取可能媒体と称される。たとえば、命令が、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線（ＤＳＬ）、または、赤外線、無線およびマイクロ波のようなワイヤレス技術を使用して、ウェブサイト、サーバまたは他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、または、赤外線、無線およびマイクロ波のようなワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ読取可能記憶媒体およびデータ記憶媒体は、接続、搬送波、信号または他の一時的な媒体を含んでおらず、その代りに、一時的でない有形的な記憶媒体に向けられているということが理解されるべきである。本願明細書において使用されるディスク（disk）およびディスク（disc）は、コンパクトディスク（ＣＤ： compact disc）、レーザーディスク（登録商標）（laser disc）、光ディスク（optical disc）、デジタルバーサタイルディスク（ＤＶＤ： digital versatile disc）、フロッピー（登録商標）ディスク（floppy disk）およびブルーレイ（登録商標）ディスク（Blu-ray（登録商標）disc）を含んでおり、ディスク（disk）は通常磁気的にデータを再生する一方、ディスク（disc）はレーザーによりデータを光学的に再生する。上記のものの組み合わせも、コンピュータ読取可能媒体の範囲内に含まれるべきである。
【０１１９】
命令は、１つ以上のデジタル信号プロセッサ（ＤＳＰ： digital signal processor）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ： application specific integrated circuit）、フィールドプログラマブルロジックアレイ（ＦＰＧＡ：field programmable logic array）、または、他の同等な集積論理回路または離散論理回路といった１つ以上のプロセッサによって実行され得る。したがって、本願明細書において使用される「プロセッサ」という用語は、本願明細書において記載される技術の実現例に好適である前述の構造または任意の他の構造のうちのいずれかを指し得る。さらに、いくつかの局面では、本願明細書において記載される機能は、専用ハードウェアおよび／またはソフトウェアモジュール内で提供され得る。さらに、１つ以上の回路または論理素子において当該技術が完全に実現され得る。
【０１２０】
この開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえばチップセット）を含むさまざまなデバイスまたは装置において実現され得る。開示される技術を実行するように構成されるデバイスの機能的な局面を強調するために、さまざまなコンポーネント、モジュールまたはユニットがこの開示において記載されているが、必ずしも異なるハードウェアユニットによる実現を必要とはしない。むしろ、上述したように、さまざまなユニットは、ハードウェアユニットにおいて組み合わせられ得るか、または、好適なソフトウェアおよび／またはファームウェアと共に上述したように１つ以上のプロセッサを含む相互動作するハードウェアユニットの集合によって提供され得る。
【０１２１】
本開示のさまざまな局面が記載された。これらの局面および他の局面は添付の請求の範囲の範囲内である。
【図１】
2019503524.tif 000003
【図２】
2019503524.tif 000004
【図３】
2019503524.tif 000005
【図４】
2019503524.tif 000006
【図５Ａ】
2019503524.tif 000007
【図５Ｂ】
2019503524.tif 000008
【手続補正書】
【提出日】平成30年7月13日(2018.7.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することを含み、さらに、
前記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが前記コンピューティングデバイスのメモリに割り当てられていると決定することに応答して、
前記アプリケーションコンテナのコンテナランタイムによって、前記コンピューティングデバイスの現在のユーザを決定することと、
前記コンテナランタイムによって、前記アプリケーションのリセット状態を決定することとを含み、さらに、
前記コンテナランタイムによって、前記コンピューティングデバイスの前記現在のユーザと、前記リセット状態と、前記アプリケーションについてのアプリケーション識別子とに基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、
前記コンピューティングデバイスによって、前記一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、
前記情報についての１つ以上の要求を送信することに応答して、前記コンピューティングデバイスによって、前記アプリケーションサービスプロバイダから、前記アプリケーションについての前記現在のユーザに関連付けられる状態情報を受信することとを含む、方法。
【請求項２】
前記アプリケーションを実行するための前記要求は、前記アプリケーションを実行するための第１の要求であり、前記アプリケーションコンテナは第１のアプリケーションコンテナであり、前記方法はさらに、
前記スーパーバイザーコンポーネントによって、前記アプリケーションの前記インストール可能なサブパッケージを維持するための前記第１のアプリケーションコンテナを割当解除することと、
前記第１のアプリケーションコンテナを割当解除した後、前記コンピューティングデバイスによって、前記アプリケーションを実行するための第２の要求を受信することとを含み、さらに、
前記アプリケーションを実行するための前記第２の要求を受信することに応答して、
前記スーパーバイザーコンポーネントによって、前記アプリケーションの前記インストール可能なサブパッケージを維持するための第２のアプリケーションコンテナを割り当てることと、
前記第２のアプリケーションコンテナによって、前記アプリケーションを実行するための前記第２の要求において特定される前記アプリケーションの機能を実行するために必要とされる前記アプリケーションの前記インストール可能なサブパッケージの１つ以上をインストールすることと、
前記第２のアプリケーションコンテナのコンテナランタイムによって、前記アプリケーションのアップデートされた現在のユーザを決定することとを含み、前記アップデートされた現在のユーザは前記現在のユーザと同じであり、さらに、
前記コンテナランタイムによって、前記アプリケーションのアップデートされたリセット状態を決定することを含み、前記リセット状態は前記アップデートされたリセット状態と同じであり、さらに、
前記アプリケーションコンテナのコンテナランタイムによって、前記アップデートされた現在のユーザおよび前記アップデートされたリセット状態に基づいて、前記アップデートされた現在のユーザについての個人を識別可能である情報を含んでいないアップデートされた一意識別子を生成することを含み、前記アップデートされた一意識別子は前記一意識別子と同じであり、さらに、
前記コンピューティングデバイスによって、前記アプリケーションサービスプロバイダに前記アップデートされた一意識別子を送信することと、
前記コンピューティングデバイスによって、前記アプリケーションについて前記現在のユーザに関連付けられる前記状態情報を前記アプリケーションサービスプロバイダから受信することとを含む、請求項１に記載の方法。
【請求項３】
前記一意識別子は第１の一意識別子であり、前記コンピューティングデバイスは第１のコンピューティングデバイスであり、前記方法はさらに、
第２のコンピューティングデバイスによって、前記アプリケーションの異なるインスタンスを実行するための要求を受信することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスの現在のユーザを決定することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイス上で前記アプリケーションのリセット状態を決定することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスの前記現在のユーザおよび前記第２のコンピューティングデバイス上の前記アプリケーションの前記リセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、前記リセット状態および前記アップデートされたリセット状態が同じである場合、前記第１の一意識別子および前記第２の一意識別子は同じであり、前記リセット状態が前記アップデートされたリセット状態とは異なる場合、前記第１の一意識別子および前記第２の一意識別子は異なり、さらに、
前記第２のコンピューティングデバイスによって、前記アプリケーションサービスプロバイダに前記第２の一意識別子を送信することと、
前記第１の一意識別子および前記第２の一意識別子が同じである場合、前記第２のコンピューティングデバイスによって、前記アプリケーションサービスプロバイダから前記１つ以上のアプリケーション要求に関する情報を受信することとを含む、請求項１または２に記載の方法。
【請求項４】
前記一意識別子は第１の一意識別子であり、前記方法はさらに、
前記コンピューティングデバイスによって、前記アプリケーションの状態をリセットするための要求を受信することと、
前記コンピューティングデバイスによって、前記アプリケーションの前記リセット状態をアップデートすることと、
前記コンピューティングデバイスによって、前記コンピューティングデバイスの前記現在のユーザおよび前記アプリケーションのアップデートされた前記リセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、前記第１の一意識別子および前記第２の一意識別子は異なっており、さらに、
前記コンピューティングデバイスによって、前記アプリケーションの前記状態をリセットした後、前記現在のユーザが前記アプリケーションサービスプロバイダには異なるユーザであるように現れるように、前記第２の一意識別子をアプリケーションサービスプロバイダに送信することを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記コンピューティングデバイスは、第１のコンピューティングデバイスであり、第２のコンピューティングデバイスは前記現在のユーザに関連付けられており、前記方法はさらに、
前記アプリケーションの前記状態をリセットするための前記要求を前記第１のコンピューティングデバイスから前記第２のコンピューティングデバイスに送信することと、
前記アプリケーションの前記状態をリセットするための前記要求を受信することに応答して、前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスにおける前記アプリケーションの前記リセット状態を、前記第１のコンピューティングデバイスにおける前記アプリケーションの前記リセット状態と同じになるようにアップデートすることとを含む、請求項４に記載の方法。
【請求項６】
前記一意識別子を生成することは、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルをハッシュすることを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記状態情報は、前記アプリケーションの現在状態に関する情報と、前記アプリケーションについての前記現在のユーザの履歴アプリケーション使用情報と、前記アプリケーションについての前記ユーザのユーザプレファレンス情報とのうちの１つ以上を含む、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
請求項１〜７のいずれか１項に記載の方法を実行するための手段を含む、装置。
【請求項９】
コンピューティングシステムによって、第１のコンピューティングデバイスにおいて実行されるアプリケーションから、前記第１のコンピューティングデバイスのユーザを一意に識別するとともに個人を識別する情報を含んでいない識別子を受信することと、
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスにおいて実行される前記アプリケーションから、情報についての１つ以上の要求を受信することとを含み、前記１つ以上の要求は、ユーザプレファレンス情報についての要求を含んでおり、さらに、
前記コンピューティングシステムによって、前記１つ以上の要求に関する情報と前記識別子とに基づき、前記識別子に関連付けられる１つ以上の履歴要求情報をアップデートすることを含み、前記履歴要求情報は前記識別子に関連付けられるユーザプレファレンス情報を含んでおり、さらに、
前記コンピューティングシステムによって、第２のコンピューティングデバイスにおいて実行されるアプリケーションから前記識別子を受信することを含み、前記第１のコンピューティングデバイス上で実行される前記アプリケーションと、前記第２のコンピューティングデバイス上で実行される前記アプリケーションとは、単一のアプリケーションの異なるインスタンスであり、さらに、
前記コンピューティングシステムによって、前記識別子に基づいて、前記識別子に関連付けられる前記履歴要求情報に含まれるユーザプレファレンス情報を決定することと、
前記コンピューティングシステムによって、前記第２のコンピューティングデバイスに、前記識別子に関連付けられる前記履歴要求情報に含まれる前記ユーザプレファレンス情報の少なくとも部分を送信することとを含む、方法。
【請求項１０】
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスにおいて実行される前記アプリケーションから、前記情報についての１つ以上の付加的な要求を受信することをさらに含み、前記１つ以上の付加的な要求は、前記第１のコンピューティングデバイスの前記ユーザを一意に識別するとともに個人を識別する情報を含んでいない異なる識別子を含んでおり、さらに、
前記コンピューティングシステムによって、前記異なる識別子に基づいて、前記異なる識別子に関連付けられる履歴要求情報に含まれる異なるユーザプレファレンス情報を決定することと、
前記コンピューティングシステムによって、前記第２のコンピューティングデバイスに、前記異なるユーザプレファレンス情報の少なくとも部分を送信することとを含む、請求項９に記載の方法。
【請求項１１】
前記コンピューティングシステムによって、前記情報についての前記１つ以上の要求と前記識別子とに基づき、前記情報を決定することと、
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスに、前記情報の少なくとも部分を送信することとをさらに含む、請求項９または１０に記載の方法。
【請求項１２】
前記履歴要求情報はさらに、前記アプリケーションの現在状態に関する情報と、アプリケーション使用情報とのうちの１つ以上を含む、請求項９に記載の方法。
【請求項１３】
前記識別子は、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルを少なくともハッシュすることにより生成される、請求項９に記載の方法。
【請求項１４】
前記第１のコンピューティングデバイスおよび前記第２のコンピューティングデバイスは同じコンピューティングデバイスであり、前記第２のコンピューティングデバイスにおいて実行される前記アプリケーションの前記異なるインスタンスは、前記アプリケーションの再インストールの後に同じコンピューティングデバイス上で実行される前記アプリケーションのインスタンスである、請求項９に記載の方法。
【請求項１５】
請求項９〜１４のいずれか１項に記載の方法を実行するための手段を含む、装置。
【請求項１６】
請求項１〜７および請求項９〜１４のいずれか１項に記載の方法をコンピュータに実行させるためのプログラム。
【手続補正書】
【提出日】平成30年9月5日(2018.9.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することを含み、さらに、
前記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが前記コンピューティングデバイスのメモリに割り当てられていると決定することに応答して、
前記アプリケーションコンテナのコンテナランタイムによって、前記コンピューティングデバイスの現在のユーザを決定することと、
前記コンテナランタイムによって、前記アプリケーションのリセット状態を決定することとを含み、さらに、
前記コンテナランタイムによって、前記コンピューティングデバイスの前記現在のユーザと、前記リセット状態と、前記アプリケーションについてのアプリケーション識別子とに基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、
前記コンピューティングデバイスによって、前記一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、
前記情報についての１つ以上の要求を送信することに応答して、前記コンピューティングデバイスによって、前記アプリケーションサービスプロバイダから、前記アプリケーションについての前記現在のユーザに関連付けられる状態情報を受信することとを含む、方法。
【請求項２】
前記アプリケーションを実行するための前記要求は、前記アプリケーションを実行するための第１の要求であり、前記アプリケーションコンテナは第１のアプリケーションコンテナであり、前記方法はさらに、
前記スーパーバイザーコンポーネントによって、前記アプリケーションの前記インストール可能なサブパッケージを維持するための前記第１のアプリケーションコンテナを割当解除することと、
前記第１のアプリケーションコンテナを割当解除した後、前記コンピューティングデバイスによって、前記アプリケーションを実行するための第２の要求を受信することとを含み、さらに、
前記アプリケーションを実行するための前記第２の要求を受信することに応答して、
前記スーパーバイザーコンポーネントによって、前記アプリケーションの前記インストール可能なサブパッケージを維持するための第２のアプリケーションコンテナを割り当てることと、
前記第２のアプリケーションコンテナによって、前記アプリケーションを実行するための前記第２の要求において特定される前記アプリケーションの機能を実行するために必要とされる前記アプリケーションの前記インストール可能なサブパッケージの１つ以上をインストールすることと、
前記第２のアプリケーションコンテナのコンテナランタイムによって、前記アプリケーションのアップデートされた現在のユーザを決定することとを含み、前記アップデートされた現在のユーザは前記現在のユーザと同じであり、さらに、
前記コンテナランタイムによって、前記アプリケーションのアップデートされたリセット状態を決定することを含み、前記リセット状態は前記アップデートされたリセット状態と同じであり、さらに、
前記アプリケーションコンテナのコンテナランタイムによって、前記アップデートされた現在のユーザおよび前記アップデートされたリセット状態に基づいて、前記アップデートされた現在のユーザについての個人を識別可能である情報を含んでいないアップデートされた一意識別子を生成することを含み、前記アップデートされた一意識別子は前記一意識別子と同じであり、さらに、
前記コンピューティングデバイスによって、前記アプリケーションサービスプロバイダに前記アップデートされた一意識別子を送信することと、
前記コンピューティングデバイスによって、前記アプリケーションについて前記現在のユーザに関連付けられる前記状態情報を前記アプリケーションサービスプロバイダから受信することとを含む、請求項１に記載の方法。
【請求項３】
前記一意識別子は第１の一意識別子であり、前記コンピューティングデバイスは第１のコンピューティングデバイスであり、前記方法はさらに、
第２のコンピューティングデバイスによって、前記アプリケーションの異なるインスタンスを実行するための要求を受信することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスの現在のユーザを決定することと、
前記第２のコンピューティングデバイスによって、前記第２のデバイス上で前記アプリケーションのリセット状態を決定することと、
前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスの前記現在のユーザおよび前記第２のコンピューティングデバイス上の前記アプリケーションの前記リセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、前記リセット状態および前記アップデートされたリセット状態が同じである場合、前記第１の一意識別子および前記第２の一意識別子は同じであり、前記リセット状態が前記アップデートされたリセット状態とは異なる場合、前記第１の一意識別子および前記第２の一意識別子は異なり、さらに、
前記第２のコンピューティングデバイスによって、前記アプリケーションサービスプロバイダに前記第２の一意識別子を送信することと、
前記第１の一意識別子および前記第２の一意識別子が同じである場合、前記第２のコンピューティングデバイスによって、前記アプリケーションサービスプロバイダから前記１つ以上のアプリケーション要求に関する情報を受信することとを含む、請求項１または請求項２に記載の方法。
【請求項４】
前記一意識別子は第１の一意識別子であり、前記方法はさらに、
前記コンピューティングデバイスによって、前記アプリケーションの状態をリセットするための要求を受信することと、
前記コンピューティングデバイスによって、前記アプリケーションの前記リセット状態をアップデートすることと、
前記コンピューティングデバイスによって、前記コンピューティングデバイスの前記現在のユーザおよび前記アプリケーションのアップデートされた前記リセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを含み、前記第１の一意識別子および前記第２の一意識別子は異なっており、さらに、
前記コンピューティングデバイスによって、前記アプリケーションの前記状態をリセットした後、前記現在のユーザが前記アプリケーションサービスプロバイダには異なるユーザであるように現れるように、前記第２の一意識別子をアプリケーションサービスプロバイダに送信することを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記コンピューティングデバイスは、第１のコンピューティングデバイスであり、第２のコンピューティングデバイスは前記現在のユーザに関連付けられており、前記方法はさらに、
前記アプリケーションの前記状態をリセットするための前記要求を前記第１のコンピューティングデバイスから前記第２のコンピューティングデバイスに送信することと、
前記アプリケーションの前記状態をリセットするための前記要求を受信することに応答して、前記第２のコンピューティングデバイスによって、前記第２のコンピューティングデバイスにおける前記アプリケーションの前記リセット状態を、前記第１のコンピューティングデバイスにおける前記アプリケーションの前記リセット状態と同じになるようにアップデートすることとを含む、請求項４に記載の方法。
【請求項６】
前記一意識別子を生成することは、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルをハッシュすることを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記状態情報は、前記アプリケーションの現在状態に関する情報と、前記アプリケーションについての前記現在のユーザの履歴アプリケーション使用情報と、前記アプリケーションについての前記ユーザのユーザプレファレンス情報とのうちの１つ以上を含む、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
コンピューティングデバイスであって、
スーパーバイザーコンポーネントを格納する１つ以上のストレージデバイスと、
１つ以上のプロセッサとを含み、前記１つ以上のプロセッサは、前記スーパーバイザーコンポーネントを実行して、
アプリケーションを実行するための要求を受信することと、
前記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが前記１つ以上のストレージデバイスにおいて割り当てられているかどうか決定することとを行わせ、
前記１つ以上のプロセッサは、前記アプリケーションコンテナを実行して、前記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが前記１つ以上のストレージデバイスに割り当てられていると決定することに応答して、
前記コンピューティングデバイスの現在のユーザを決定することと、
前記アプリケーションのリセット状態を決定することと、
前記コンピューティングデバイスの前記現在のユーザと、前記リセット状態と、前記アプリケーションについてのアプリケーション識別子とに基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない一意識別子を生成することと、
前記一意識別子および情報についての１つ以上の要求をアプリケーションサービスプロバイダに送信することと、
前記情報についての１つ以上の要求を送信することに応答して、前記アプリケーションサービスプロバイダから、前記アプリケーションについての前記現在のユーザに関連付けられる状態情報を受信することとを行わせる、コンピューティングデバイス。
【請求項９】
前記アプリケーションを実行するための前記要求は、前記アプリケーションを実行するための第１の要求であり、
前記アプリケーションコンテナは第１のアプリケーションコンテナであり、
前記１つ以上のプロセッサは、前記スーパーバイザーコンポーネントを実行して、
前記アプリケーションの前記インストール可能なサブパッケージを維持するための前記第１のアプリケーションコンテナを割当解除することと、
前記第１のアプリケーションコンテナの割当解除した後、前記アプリケーションを実行するための第２の要求を受信することと、
前記アプリケーションを実行するための前記第２の要求を受信することに応答して、前記アプリケーションの前記インストール可能なサブパッケージを維持するための第２のアプリケーションコンテナを割り当てることとを行わせ、
前記１つ以上のプロセッサは、前記第２のアプリケーションコンテナを実行して、
前記アプリケーションを実行するための前記第２の要求において特定される前記アプリケーションの機能を実行するために必要とされる前記アプリケーションの前記インストール可能なサブパッケージの１つ以上をインストールすることと、
前記アプリケーションのアップデートされた現在のユーザを決定することとを行わせ、前記アップデートされた現在のユーザは前記現在のユーザと同じであり、さらに、
前記アプリケーションのアップデートされたリセット状態を決定することを行わせ、前記リセット状態は前記アップデートされたリセット状態と同じであり、さらに、
前記アップデートされた現在のユーザおよび前記アップデートされたリセット状態に基づいて、前記アップデートされた現在のユーザについての個人を識別可能である情報を含んでいないアップデートされた一意識別子を生成することを含み、前記アップデートされた一意識別子は前記一意識別子と同じであり、さらに、
前記アプリケーションサービスプロバイダに前記アップデートされた一意識別子を送信することと、
前記アプリケーションについて前記現在のユーザに関連付けられる前記状態情報を前記アプリケーションサービスプロバイダから受信することとを行わせる、請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記一意識別子は第１の一意識別子であり、
前記１つ以上のプロセッサは、前記アプリケーションコンテナを実行して、
前記アプリケーションの状態をリセットするための要求を受信することと、
前記アプリケーションの前記リセット状態をアップデートすることと、
前記コンピューティングデバイスの前記現在のユーザおよび前記アプリケーションの前記アップデートされたリセット状態に基づき、前記現在のユーザについての個人を識別可能である情報を含んでいない第２の一意識別子を生成することとを行わせ、前記第１の一意識別子および前記第２の一意識別子は異なっており、さらに、
前記アプリケーションの前記状態をリセットした後、前記現在のユーザが前記アプリケーションサービスプロバイダには異なるユーザであるように現れるように、前記第２の一意識別子をアプリケーションサービスプロバイダに送信することを行わせる、請求項８および請求項９のいずれか１項に記載のコンピューティングデバイス。
【請求項１１】
前記１つ以上のプロセッサは、前記アプリケーションコンテナを実行して、
前記コンピューティングデバイスから、前記コンピューティングデバイスの前記現在のユーザに関連付けられる異なるコンピューティングデバイスに、前記アプリケーションの前記状態をリセットするための前記要求を送信することを行わせ、
前記異なるコンピューティングデバイスは、前記アプリケーションの前記状態をリセットさせるための前記要求を受信することに応答して、前記コンピューティングデバイスにおける前記アプリケーションの前記リセット状態と同じになるように、前記異なるデバイスにおける前記アプリケーションのリセット状態をアップデートする、請求項１０に記載のコンピューティングデバイス。
【請求項１２】
前記１つ以上のプロセッサは、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルにハッシュ関数を適用するために前記アプリケーションコンテナを少なくとも実行することによって、前記一意識別子を生成するために前記アプリケーションコンテナを実行する、請求項８および請求項９のいずれか１項に記載のコンピューティングデバイス。
【請求項１３】
前記状態情報は、前記アプリケーションの現在状態に関する情報と、前記アプリケーションについての前記現在のユーザの履歴アプリケーション使用情報と、前記アプリケーションについての前記ユーザのユーザプレファレンス情報とのうちの１つ以上を含む、請求項８および請求項９のいずれか１項に記載のコンピューティングデバイス。
【請求項１４】
コンピューティングシステムによって、第１のコンピューティングデバイスにおいて実行されるアプリケーションから、前記第１のコンピューティングデバイスのユーザを一意に識別するとともに個人を識別する情報を含んでいない識別子を受信することと、
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスにおいて実行される前記アプリケーションから、情報についての１つ以上の要求を受信することとを含み、前記１つ以上の要求は、ユーザプレファレンス情報についての要求を含んでおり、さらに、
前記コンピューティングシステムによって、前記１つ以上の要求に関する情報と前記識別子とに基づき、前記識別子に関連付けられる１つ以上の履歴要求情報をアップデートすることを含み、前記履歴情報は前記識別子に関連付けられるユーザプレファレンス情報を含んでおり、さらに、
前記コンピューティングシステムによって、第２のコンピューティングデバイスにおいて実行されるアプリケーションから前記識別子を受信することを含み、前記第１のコンピューティングデバイス上で実行される前記アプリケーションと、前記第２のコンピューティングデバイス上で実行される前記アプリケーションとは、単一のアプリケーションの異なるインスタンスであり、さらに、
前記コンピューティングシステムによって、前記識別子に基づいて、前記識別子に関連付けられる前記履歴要求情報に含まれるユーザプレファレンス情報を決定することと、
前記コンピューティングシステムによって、前記第２のコンピューティングデバイスに、前記識別子に関連付けられる前記履歴要求情報に含まれる前記ユーザプレファレンス情報の少なくとも部分を送信することとを含む、方法。
【請求項１５】
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスにおいて実行される前記アプリケーションから、前記情報についての１つ以上の付加的な要求を受信することをさらに含み、前記１つ以上の付加的な要求は、前記第１のコンピューティングデバイスの前記ユーザを一意に識別するとともに個人を識別する情報を含んでいない異なる識別子を含んでおり、さらに、
前記コンピューティングシステムによって、前記異なる識別子に基づいて、前記異なる識別子に関連付けられる履歴要求情報に含まれる異なるユーザプレファレンス情報を決定することと、
前記コンピューティングシステムによって、前記第２のコンピューティングデバイスに、前記異なるユーザプレファレンス情報の少なくとも部分を送信することとを含む、請求項１４に記載の方法。
【請求項１６】
前記コンピューティングシステムによって、前記情報についての前記１つ以上の要求と前記識別子とに基づき、前記情報を決定することと、
前記コンピューティングシステムによって、前記第１のコンピューティングデバイスに、前記情報の少なくとも部分を送信することとをさらに含む、請求項１４または１５に記載の方法。
【請求項１７】
前記履歴要求情報はさらに、前記アプリケーションの現在状態に関する情報と、アプリケーション使用情報とのうちの１つ以上を含む、請求項１４〜１６のいずれか１項に記載の方法。
【請求項１８】
前記識別子は、ユーザ識別子、アプリケーション識別子およびリセット状態を含むタプルを少なくともハッシュすることにより生成される、請求項１４〜１７のいずれか１項に記載の方法。
【請求項１９】
前記第１のコンピューティングデバイスおよび前記第２のコンピューティングデバイスは同じコンピューティングデバイスであり、前記第２のコンピューティングデバイスにおいて実行される前記アプリケーションの前記異なるインスタンスは、前記アプリケーションの再インストールの後に同じコンピューティングデバイス上で実行される前記アプリケーションのインスタンスである、請求項１４〜１８のいずれか１項に記載の方法。
【国際調査報告】
2019503524.tif 000009
2019503524.tif 000010