(57)【特許請求の範囲】
【請求項１】
方法であって、
ユーザ機器のユーザインターフェイス（ＵＩ）上のアプリケーションによって表示された内容のサブセットを判定するステップを含み、前記サブセットはユーザ固有の情報を含まず、前記方法はさらに、
前記アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信するステップを含み、前記要求は、前記ＵＩ上に表示された前記内容のサブセットを含み、前記方法はさらに、
前記要求に対する応答を前記リモートプロバイダから受信するステップを含み、前記応答は、前記ＵＩ上の前記アプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、前記少なくとも１つのテンプレートを含み、前記方法はさらに、
前記１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付けるステップと、
後で自動記入に使用するために前記１つ以上のユーザ入力値を前記リモートプロバイダに送信することを許可させるためのプロンプトを生成するステップとを含み、前記プロンプトは、前記少なくとも１つのテンプレートを用いて、前記１つ以上のユーザ入力値を処理することによってカスタマイズされたものである、方法。
【請求項２】
前記１つ以上のユーザ入力値を前記リモートプロバイダに送信するための許可を、前記プロンプトを介して受け付けるステップと、
前記許可を受け付けるステップに応答して、前記１つ以上のユーザ入力値を前記リモートプロバイダに送信するステップとをさらに含む、請求項１に記載の方法。
【請求項３】
前記少なくとも１つのテンプレートを用いて前記１つ以上のユーザ入力値のバリデーションを行なうステップをさらに含み、
前記プロンプトを生成するステップは、前記バリデーションを行なうステップに応答して実行される、請求項１または２に記載の方法。
【請求項４】
前記ＵＩを介した複数のユーザ入力操作の各々に応答して、前記少なくとも１つのテンプレートに基づいて前記１つ以上のユーザ入力値が有効であるか否かを判定するステップをさらに含み、
前記プロンプトを生成するステップは、前記１つ以上のユーザ入力値が有効であると判定された場合にのみ実行される、請求項１〜３のいずれかに記載の方法。
【請求項５】
前記複数のユーザ入力操作の各々は、前記１つ以上のテキスト入力フィールドのうちの１つにテキスト文字を入力することを含む、請求項４に記載の方法。
【請求項６】
前記少なくとも１つのテンプレートは、少なくとも１つの正規表現を含む、請求項１〜５のいずれかに記載の方法。
【請求項７】
前記応答は、複数の値ホルダのレイアウトと、対応する複数の変換とを含み、
前記方法はさらに、
前記１つ以上のユーザ入力値のうちの少なくとも１つに対して対応する変換を適用することによって、前記複数の値ホルダの各値ホルダについて値を決定するステップを含み、
前記プロンプトは、前記レイアウトの各値ホルダについて前記決定された値を含む、請求項１〜６のいずれかに記載の方法。
【請求項８】
前記レイアウトは文字列テンプレートを含む、請求項７に記載の方法。
【請求項９】
前記少なくとも１つのテンプレートは、複数の値と、対応する複数の画像との間のマッピングを含み、
前記方法はさらに、
前記マッピングおよび前記１つ以上のユーザ入力値に基づいて、前記プロンプト内に含める画像を決定するステップを含む、請求項１〜８のいずれかに記載の方法。
【請求項１０】
前記少なくとも１つのテンプレートは部分的な値マスクを含み、
前記方法はさらに、
前記１つ以上のユーザ入力値のうちの１つに前記部分的な値マスクを適用することによって、前記プロンプト内に含める値を決定するステップを含む、請求項１〜９のいずれかに記載の方法。
【請求項１１】
前記少なくとも１つのテンプレートを前記リモートプロバイダに求める前記要求は、前記アプリケーションの起動に応答して送信される、請求項１〜１０のいずれかに記載の方法。
【請求項１２】
前記少なくとも１つのテンプレートを前記リモートプロバイダに求める前記要求は、前記アプリケーションのテキスト入力フィールドの選択に応答して送信される、請求項１〜１１のいずれかに記載の方法。
【請求項１３】
前記要求は、前記１つ以上のテキスト入力フィールドに関連するメタデータを含む、請求項１〜１２のいずれかに記載の方法。
【請求項１４】
前記プロンプトを生成するステップの後、前記少なくとも１つのテンプレートを破棄するステップをさらに含む、請求項１〜１３のいずれかに記載の方法。
【請求項１５】
前記１つ以上のユーザ入力値に対応するデータセットが前記リモートプロバイダによって既に記憶されているか否かを判定するステップをさらに含み、
前記１つ以上のユーザ入力値に対応するデータセットが前記リモートプロバイダによって既に記憶されていないと判定された場合にのみ、前記プロンプトを生成するステップが実行される、請求項１〜１４のいずれかに記載の方法。
【請求項１６】
前記１つ以上のユーザ入力値に対応するデータセットが前記リモートプロバイダによって既に記憶されているか否かを判定するステップは、前記リモートプロバイダによって前に提供されたデータセットのリストに基づいて行なわれる、請求項１５に記載の方法。
【請求項１７】
前記プロンプトは前記リモートプロバイダの識別子をさらに含む、請求項１〜１６のいずれかに記載の方法。
【請求項１８】
前記方法は、前記ユーザ機器のオペレーティングシステムによって実行される、請求項１〜１７のいずれかに記載の方法。
【請求項１９】
ユーザ機器であって、
ユーザインターフェイス（ＵＩ）と、
オペレーティングシステムとを備え、
前記オペレーティングシステムは、
前記ユーザ機器の前記ＵＩ上のアプリケーションによって表示された内容のサブセットを判定するように構成され、前記サブセットはユーザ固有の情報を含まず、前記オペレーティングシステムはさらに、
前記アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信するように構成され、前記要求は、前記ＵＩ上に表示された前記内容のサブセットを含み、前記オペレーティングシステムはさらに、
前記要求に対する応答を前記リモートプロバイダから受信するように構成され、前記応答は、前記ＵＩ上の前記アプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、前記少なくとも１つのテンプレートを含み、前記オペレーティングシステムはさらに、
前記１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付け、
後で自動記入に使用するために前記１つ以上のユーザ入力値を前記リモートプロバイダに送信することを許可させるためのプロンプトを生成するように構成され、前記プロンプトは、前記少なくとも１つのテンプレートを用いて、前記１つ以上のユーザ入力値を処理することによってカスタマイズされたものである、ユーザ機器。
【請求項２０】
請求項１〜１８のいずれかに記載の方法を１つ以上のプロセッサに実行させる命令を含む、プログラム。
【請求項２１】
請求項２０に記載のプログラムを格納したメモリと、
前記プログラムに含まれる命令を実行するプロセッサとを備える、装置。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願の相互参照
本願は、２０１７年１０月２４日に出願された米国仮出願第６２／５７６，４８０号に基づく優先権を主張する。その内容全体を本明細書に引用により援用する。
【０００２】
背景
携帯機器、携帯電話、パソコン、およびタブレットを含む現代の多くのコンピューティングデバイスは、ユーザによるコンピューティングデバイスとの対話を可能にするユーザインターフェイス（ＵＩ）を提供する。例えば、アプリケーションプログラムは、ＵＩを用いて、画像、テキスト、およびグラフィック要素（例えば、ウィンドウ、ダイアログ、ポップアップ、画像、ボタン、スクロールバー、およびアイコン）によってユーザと通信することができる。ＵＩは、タッチスクリーン、存在感知ディスプレイ、コンピュータマウス、キーボードなどのデバイス、および、ユーザによるＵＩ、さらにはアプリケーションプログラムの制御を可能にする他のデバイスからの入力も受け付けることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ある場合には、ＵＩを用いて、オペレーティングシステムと対話し、コンピューティングデバイスを管理することが可能である。例えば、オペレーティングシステムは、コントロールパネルまたは設定アプリケーションを有し得る。このコントロールパネルまたは設定アプリケーションは、ＵＩを用いて、コンピューティングデバイスの何らかの局面に関する制御設定（例えば、音声制御、動画出力、コンピュータメモリ、および、オペレーティングシステムによって使用される人間の言語など）に関係する１つ以上のウィンドウを出す（例えば、英語、フランス語、中国語、ヒンディー語、ロシア語などで情報を受信するように選択する）。コントロールパネル／設定アプリケーションは、ＵＩを用いて、上記ウィンドウに関係する後続の入力を受け付けることができる。ＵＩは、その入力をコントロールパネル／設定アプリケーションを介してオペレーティングシステムに提供することができる。これにより、コンピューティングデバイスを管理することができる。
【０００４】
しかしながら、携帯機器のＵＩが小さい場合は特に、ＵＩへのデータの手動入力は、ユーザにとって不便であり、時間がかかり、および／または面倒な場合があり、あるいは間違いを引き起こす恐れもある。
【課題を解決するための手段】
【０００５】
概要
例示的な実施形態は、ユーザ機器のオペレーティングシステムが、ユーザ機器上でユーザ入力データを解析または格納することなく、リモートプロバイダの助けを借りて、複数のアプリケーションを横断して、後で自動記入に使用するためにデータを保存するようインテリジェントにユーザに促すことを可能にするシステムに関するものである。より具体的には、ユーザが機密情報または秘密情報を入力する可能性があることを認識しているが、ユーザ機器のオペレーティングシステムは、ユーザ機器のユーザインターフェイス（ＵＩ）上のアプリケーションによって表示された、そのユーザ固有の情報を含まない内容のサブセットを判定してもよい。さらなる一局面では、オペレーティングシステムは、この内容のサブセットを用いて、アプリケーションで使用される少なくとも１つのテンプレートを求める要求を生成し、リモートプロバイダに送信してもよい。さらに、この要求に基づいて、オペレーティングシステムは、リモートプロバイダから応答を受信してもよい。この応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールドに入力されたユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。さらに、オペレーティングシステムは、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付け、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成してもよい。上記プロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。
【０００６】
一局面では、ユーザ機器のユーザインターフェイス（ＵＩ）上のアプリケーションによって表示された内容のサブセットを判定するステップを含む方法が提供される。上記サブセットはユーザ固有の情報を含まない。上記方法はさらに、アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信するステップを含む。上記要求は、ＵＩ上に表示された内容のサブセットを含む。上記方法はさらに、上記要求に対する応答をリモートプロバイダから受信するステップを含む。上記応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。上記方法はさらに、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付けるステップを含む。上記方法はさらに、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成するステップを含む。上記プロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。
【０００７】
別の一局面では、ユーザ機器が提供される。上記ユーザ機器は、ＵＩと、ユーザ機器のＵＩ上のアプリケーションによって表示された内容のサブセットを判定するように構成されたオペレーティングシステムとを備える。上記サブセットはユーザ固有の情報を含まない。上記オペレーティングシステムはさらに、アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信するように構成される。上記要求は、ＵＩ上に表示された内容のサブセットを含む。上記オペレーティングシステムはさらに、上記要求に対する応答をリモートプロバイダから受信するように構成される。上記応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。上記オペレーティングシステムはさらに、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付けるように構成される。上記オペレーティングシステムはさらに、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成するように構成される。上記プロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。
【０００８】
別の一局面では、１つ以上のプロセッサによって実行されるとユーザ機器のオペレーティングシステムに機能を遂行させる命令を格納した非一時的なコンピュータ可読媒体が提供される。上記機能は、ユーザ機器のユーザインターフェイス（ＵＩ）上のアプリケーションによって表示された内容のサブセットを判定するステップを含む。上記サブセットはユーザ固有の情報を含まない。上記機能はさらに、アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信するステップを含む。上記要求は、ＵＩ上に表示された内容のサブセットを含む。上記機能はさらに、上記要求に対する応答をリモートプロバイダから受信するステップを含む。上記応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。上記機能はさらに、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付けるステップを含む。上記機能はさらに、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成するステップを含む。上記プロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。
【０００９】
別の一局面では、ＵＩと、少なくとも１つのプロセッサと、命令（少なくとも１つのプロセッサによって実行されると、当該少なくとも１つのプロセッサに機能を遂行させる）を格納した非一時的なコンピュータ可読媒体とを備えるシステムが提供される。上記システムは、ユーザ機器のユーザインターフェイス（ＵＩ）上のアプリケーションによって表示された内容のサブセットを判定する手段を備える。上記サブセットはユーザ固有の情報を含まない。上記システムはさらに、アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信する手段を備える。上記要求は、ＵＩ上に表示された内容のサブセットを含む。上記システムはさらに、上記要求に対する応答をリモートプロバイダから受信する手段を備える。上記応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。上記システムはさらに、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付ける手段を備える。上記システムはさらに、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成する手段を備える。上記プロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。
【００１０】
上述の概要は例示にすぎず、決して限定することを意図するものではない。図および以下の詳細な説明および添付の図面を参照することによって、上述の例示的な局面、実施形態、および特徴に加えて、さらなる局面、実施形態、および特徴が明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】例示的な実施形態に従って、分散コンピューティングアーキテクチャを示す図である。
【図２】例示的な実施形態に従って、方法のフローチャートを示す図である。
【図３Ａ】例示的な実施形態に従って、自動記入を設定するようユーザに促すプロンプトを示す図である。
【図３Ｂ】例示的な実施形態に従って、ユーザ機器のＵＩを介して選択されるように表示されたデータセット識別子を示す図である。
【図３Ｃ】例示的な実施形態に従って、ユーザ機器のＵＩを介して選択されるように表示された複数のデータセット識別子を示す図である。
【図４Ａ】例示的な実施形態に従って、ＵＩ上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連するユーザインターフェイス機能を示す図である。
【図４Ｂ】例示的な実施形態に従って、図４Ａに示すユーザによる手入力データの保存に関連する確認メッセージおよび汎用のデータ保存プロンプトを示す図である。
【図４Ｃ】例示的な実施形態に従って、ＵＩ上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連するユーザインターフェイス機能を示す図である。
【図４Ｄ】例示的な実施形態に従って、図４Ｃに示すユーザによる手入力データの保存に関連する確認メッセージおよびカスタマイズされたプロンプトを示す図である。
【図５】例示的な実施形態に従って例示的なコンピューティングデバイスを示す機能ブロック図である。
【発明を実施するための形態】
【００１２】
詳細な説明
例示的な方法およびシステムを本明細書に記載する。本明細書に記載の例示的な実施形態または特徴はすべて、必ずしも他の実施形態または特徴よりも好ましい、または有利であると解釈すべきではない。本明細書に記載の例示的な実施形態は、限定することを意図するものではない。開示されたシステムおよび方法のある局面が種々の異なる構成で配置および組み合わせ可能であることは、容易に理解されるであろう。本明細書ではそれらのすべてが企図されている。
【００１３】
さらに、図示される特定の配置は、限定的であるとみなすべきではない。他の実施形態では、提示された図中の各要素の数を増減させることも可能であるということを理解すべきである。さらに、図示された要素のうちの一部を組み合わせること、または省略することも可能である。さらに、ある例示的な実施形態は、図示されていない要素を含む場合もある。
【００１４】
本明細書で概括的に記載および図示される本開示の局面は、種々の異なる構成で配置、置換、組み合わせ、分離、および設計され得ることが容易に理解されるであろう。本明細書ではそれらのすべてが企図されている。
【００１５】
Ｉ．概略
携帯機器、携帯電話、パソコン、およびタブレットなどのユーザ機器は、現代の通信ネットワーク内の至る所に存在する。これらのデバイスのうちの多くは、このようなネットワーク内の通信を円滑化しながら１つ以上のアプリケーションを実行することが可能である。さらに、これらのデバイスのうちの多くは、ユーザがユーザ機器と対話することを可能にする１つ以上のＵＩを提供する。
【００１６】
例えば、ユーザはＵＩを用いて、画像、テキスト、および他のグラフィック要素の使用により、ユーザ機器上のアプリケーションで使用される情報を通信することが可能である。ＵＩは、ユーザ機器に接続された多数のデバイスから入力を受け付けることも可能である。これらの多数のデバイスの例としては、タッチスクリーン、存在感知ディスプレイ、コンピュータマウス、キーボード、および、ユーザによるＵＩ、さらにはアプリケーションの制御を可能にする他のデバイスなどがある。
【００１７】
最適なシナリオであれば、ユーザは効果的かつ効率的にＵＩを用いて情報を通信することができるであろう。しかしながら、１つ以上の要因によって、ユーザのそのような能力が制限される場合がある。このような制限下で動作する場合、より多くの情報を通信する必要性が増すほど、その情報を効果的かつ効率的に通信する能力がますます制限される恐れがある。
【００１８】
一例として、画面が小さいユーザ機器の場合、アプリケーションによって使用される情報を通信するために膨大な量のテキストをＵＩに打ち込むことは、非常に困難な場合がある。特に、ユーザにとってテキストが記憶しにくいものである場合はなおさらである。したがって、ユーザが当該アプリケーションを次回使用するときに情報を再度通信しなくてもよいように、アプリケーションが当該情報を記憶することができれば好都合である。しかしながら、当然のことながら、ユーザが通信しようとするアプリケーション数が増加すると、ＵＩを用いてそれらのアプリケーションの各々に膨大な量のテキストを通信することは、ユーザにとって大きな負担になり得る（初めての場合であっても、そうではない場合であっても）。このことは、たとえユーザによって入力された情報を個々のアプリケーションが記憶したとしても然りである。結果としてユーザは、そのような情報の入力を促されると、それらのアプリケーションへの関心が薄れる（または、それらの使用を完全に断念する）かもしれない。
【００１９】
これらの課題のうちのいくつかは、リモートプロバイダの助けを借りて、複数のアプリケーションを横断して自動記入を円滑化するための仲介役としてユーザ機器のオペレーティングシステムを機能させることにより、ユーザ機器のユーザが効果的かつ効率的にそれらのアプリケーションで使用される情報を通信することが可能になる方法、システム、およびデバイスを用いることによって解決し得る。具体的には、ある例では、部分的には、自動記入を有効にし、権限を与えられたリモートプロバイダに自動記入用のデータ提供を許可し、自動記入データを検索し、後で使用するために自動記入データを保存することによって、ユーザはユーザ機器のオペレーティングシステムレベルで自動記入を使用してもよい。
【００２０】
さらに、このように自動記入の円滑化を助けるためにリモートプロバイダを用いることによって、自動記入を使用する際のユーザの体験がいくつかの点で改善され得る。例えば、ユーザは、入力したデータ（例えば、パスワード、クレジットカード番号など）に関して、セキュリティの強化を享受することができる。なぜなら、そのデータをユーザ機器上でローカルに格納するのではなく、リモートプロバイダによってリモートに格納することができるからである。別の一例では、ユーザは、入力したデータ（例えば、パスワード、クレジットカード番号など）に関して、場合によっては複数のデバイスを横断して、自動記入を後で利用する際に利便性の向上を享受することができる。なぜなら、そのデータをユーザ機器上でローカルに格納するのではなく、リモートプロバイダによってリモートに格納することができるからである。しかしながら、上記で詳述したように、ユーザが後で自動記入に使用するためにデータを入力したとしても、そのデータを後で自動記入に使用することをユーザが承諾しない限り、リモートプロバイダはそのデータにアクセスできない場合があるので、ユーザ入力データを後で自動記入に使用することに関して、その種類、程度、および詳細、またはその方法についてさえ、リモートプロバイダがオペレーティングシステムに洞察または指示を与えることは難しい。
【００２１】
ゆえに、このようなシステムにおいて、そのような自動記入機能に関与し、利用したいというユーザの意欲をそぐかもしれないさらなる課題は、後で自動記入に使用するために記憶され得る情報の種類または程度を特定できないことである。例えば、「＜種類＞を＜サービス＞に保存しますか？」という汎用の自動記入保存プロンプトをユーザに提示した場合、ユーザによって入力されたデータの詳細を把握できないため、＜種類＞および＜サービス＞は、「パスワード」や「クレジットカード」などの一般的な単語の使用によってしか設定することができないかもしれない。この問題は、１つ以上のやむを得ない理由（例えば、それが個人識別情報（すなわち「ＰＩＩ」）、および／または他の機密情報であるという理由）でデバイスがユーザ入力データの解析または保存をサポートしていない場合もあるという事実によって、さらに複雑化し得る。また、デバイスがユーザ入力データを解析または保存できないことによって、デバイスにおける他の解析上の制約が生じる可能性があり、および／または、ユーザが望まない体験をさせられる可能性もある（例えば、ユーザが（今回の分も含めて）入力したデータを後で自動記入に使用するために保存することを既に選択したにもかかわらず、デバイスが上記の汎用保存プロンプトを表示してしまい、そのことはユーザを苛立たせるかもしれない。）さらに、このようにデバイスがユーザ入力データを解析または保存できないことによって、デバイスを用いたユーザの自動記入体験に関与する他の解析コンポーネントにとって困難を生じさせる可能性がある（例えば、デバイスによるユーザ入力データのバリデーションが制限され、その結果、提携する自動記入プロバイダは、受信時にそのデータに関するエラーに対処しなければならないかもしれない）。
【００２２】
さらに、これらの問題は、他のデバイスまたはプラットフォームでは起こらず、それらには携帯機器のセキュリティ制約がない場合もある（例えば、オペレーティングシステムがクレジットカードの概念を把握することができず、その結果、ユーザ入力された番号に基づくクレジットカードの種類、それが有効か否か、発行銀行に基づいて表示すべきアイコンなどを推測することができない可能性もある）。というのは、そのような情報およびロジックが、携帯機器から（例えば、提携する自動記入プロバイダに）オフロードされている場合があるからである。したがって、後で自動記入に使用するためにシステムによって保存されることになるユーザ入力データの種類、程度、および詳細の正確な近似物をユーザに提供しようとすると、「鶏が先か、卵が先か」問題が生じる。すなわち、携帯機器のオペレーティングシステムは、ユーザによって入力されたユーザ入力データをテキスト入力フィールドを介して得ることで初めてそのロジックを推測することができるが、一方で、情報に基づくプロンプトを提供するためにそのデータを解析、送信、または格納することは、ユーザの承諾前にはできないという問題である。したがって、後で自動記入に使用されることになるユーザ入力データの種類、程度、および詳細の正確な近似物を、そのデータを危険にさらすことなくユーザに提供する必要がある。
【００２３】
本明細書では、後で自動記入に使用されることになるユーザ入力データの種類、程度、および詳細を、そのデータを危険にさらすことなく、ユーザ機器のユーザに通知することを可能にする方法、システム、およびデバイスに関する例示的な実施形態を開示する。具体的には、本明細書で開示する例示的な実施形態では、部分的には、システムがユーザ入力データをどのように処理すべきかについての１つ以上のテンプレートを要求して受信し、そのデータの入力を受け取り、ユーザ機器が自動記入プロバイダから受信した１つ以上のテンプレートを踏まえてそれを処理および他の方法でバリデーションし、このユーザ入力データを後で自動記入に使用するためにリモートプロバイダに送信することを許可させるためのカスタマイズされたプロンプトを生成および表示することによって、ユーザ機器のオペレーティングシステムレベルで、後で自動記入に使用するために入力されたデータをインテリジェントにユーザに通知することが可能になる。
【００２４】
ユーザによって何らかのデータが入力される前にテンプレートを受信することによって、デバイスのオペレーティングシステムは、ユーザ入力が行なわれると即座に、ネットワーク通信を必要とせずに、カスタマイズされたプロンプトを表示することができる。代替的なシステムとしては、リモートプロバイダがカスタマイズされたプロンプトを生成してそれをデバイスに送り返すには、ユーザ入力データをリモートプロバイダに送信することが必要とされてもよい。ただし、このような代替的なシステムでは、特にデバイスのユーザがネットワーク接続の悪い地域にいる場合、カスタマイズされたプロンプトをユーザに対して表示できるまでにネットワーク遅延が生じる可能性がある。
【００２５】
本開示に係る実施形態の一例では、（場合によってはユーザ機器の）オペレーティングシステムは、ユーザ機器のＵＩ上に表示されたアプリケーションにおいて自動記入を行うためのユーザによる許可を受け付けてもよい。例えば、自動記入を有効にするために、オペレーティングシステムは、テキスト入力フィールドが共通の自動記入ディスクリプタに関連しているか否か（例えば、テキスト入力フィールドが「カード番号」または「有効期限」などの項目に関連しているか否か）を判定し、次いで、自動記入を設定するようユーザに促してもよい。さらなる一局面では、自動記入の円滑化を手助けするために指定されたリモートプロバイダをユーザが１つしか有しない場合は、そのリモートプロバイダの使用に同意するようユーザに促してもよい。一方、指定されたリモートプロバイダが複数ある場合は、１つ以上のリモートプロバイダを選択するようユーザに促してもよい。しかしながら、いずれのシナリオであっても、オペレーティングシステムを用いて自動記入機能を行なうためにはユーザ固有の機密情報および／または個人情報が必要となり得るので、オペレーティングシステムは、自動記入の許可の基礎となる詳細をユーザに通知してもよい。それらの詳細は、オペレーティングシステムに関する詳細な取り決め、および／または各リモートプロバイダに関する免責事項を受諾することを含んでもよい。これにより、それらのリモートプロバイダのうちの１つ以上を用いた自動記入の使用をユーザが許可する前に、ユーザに情報を与えて同意を確認することができる。
【００２６】
さらなる一局面では、オペレーティングシステムは、当該オペレーティングシステムをトリガしてＵＩ上に表示された内容を確認させるイベントを検出してもよい。例示的な実施形態では、このイベントは、アプリケーションの起動、アプリケーション上のテキスト入力フィールドの選択、または、テキスト入力フィールドがフォーカスを持つこと（例えば、特定のテキストフィールドがアクティブになり、キーボードがＵＩ上に表示されること）を示す信号を含み得るが、他にも多数の例があり得る。
【００２７】
さらなる一局面では、オペレーティングシステムは、上記内容のうちのどの部分がユーザ固有の機密情報を含んでいないかを判定してもよい。
【００２８】
さらなる一局面では、内容のうちの当該部分を利用して、オペレーティングシステムは、アプリケーションで使用する少なくとも１つのテンプレートを提供することによって、当該アプリケーションにおける自動記入の円滑化の手助けを求める要求をリモートプロバイダに送信してもよい。この実施形態では、そのような要求は、オペレーティングシステムおよびユーザの両方にとって有益であり得る。なぜなら、それによってリモートプロバイダは、ＵＩ上に表示された内容を安全かつプライベートにパースし、アプリケーションにおける自動記入の円滑化にはいずれの情報が有用であるかを判定する（例えば、アプリケーション上のいずれのテキスト入力フィールドが自動記入可能であるかを判定する）ことが可能だからである。ある実施形態では、このような少なくとも１つのテンプレートをリモートプロバイダに求める要求は、アプリケーションの起動に応答して送信されてもよい。他の実施形態では、この要求は、アプリケーションのテキスト入力フィールドの選択に応答して送信されてもよい。さらに他の実施形態では、この要求は、１つ以上のテキスト入力フィールドに関連するメタデータを含んでもよい。
【００２９】
いずれにしても、このような要求がリモートプロバイダに送信されると、オペレーティングシステムは、要求に対する応答を受信し得る。この応答は、ＵＩ上に表示されたアプリケーションの１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。さらなる実施形態では、テンプレートは、少なくとも１つの正規表現を含んでもよい。さらなる実施形態では、テンプレートは、複数の値と、対応する複数の画像との間のマッピングを含み、システムは、マッピングおよび１つ以上のユーザ入力値に基づいて、プロンプト内に含める画像を決定してもよい。さらなる実施形態では、テンプレートは部分的な値マスクを含み、システムは、１つ以上のユーザ入力値のうちの１つに部分的な値マスクを適用することによって、プロンプト内に含める値を決定してもよい。
【００３０】
別の一例では、所定の拡張に関する条件が真であると評価された場合、テンプレートおよび／またはＵＩを拡張してもよい。例えば、リモートプロバイダは、クレジットカードの種類に基づいてさらにカスタマイズ可能な支払データのテンプレートを提供してもよい（例えば、クレジットカードの種類Ａの場合には、カスタマイズされたプロンプト内にカスタマイズされたテキストとともにロゴまたは関連図形を示す一方、クレジットカードの種類Ｂの場合には、カスタマイズされたプロンプト内にロゴまたは関連図形のみを示してもよい）。さらなる一局面では、テンプレートに関する条件付きカスタマイズを通してこれを実現する。すなわち、対応する条件を満たした場合に、テンプレートをさまざまな種類の入力データでさらに拡張する。さらなる一局面では、テンプレートを拡張した後、各拡張に関連する変換リストを用いてポピュレートしてもよい。例えば、カードが種類Ａのクレジットカードである場合、オペレーティングシステムは、種類Ａのクレジットカードに固有のＵＩ要素を挿入し、関連する変換を用いることによって、それらの要素をポピュレートしてもよい。
【００３１】
さらなる実施形態では、応答は、複数の値ホルダのレイアウトと、対応する複数の変換とを含み、システムは、１つ以上のユーザ入力値のうちの少なくとも１つに対して対応する変換を適用することによって、上記複数の値ホルダの各値ホルダについて値を決定してもよい。このプロンプトは、レイアウトの各値ホルダについて決定された値を含む。さらなる一局面において、ある実施形態では、レイアウトは、文字列テンプレートを含んでもよい。
【００３２】
いずれにしても、このような応答が受信されると、オペレーティングシステムは、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付け得る。
【００３３】
オペレーティングシステムは、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成してもよい。このプロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。さらなる一局面において、ある実施形態では、このプロンプトはリモートプロバイダの識別子を含んでもよい。さらなる一局面において、ある実施形態では、プロンプトが生成されると、オペレーティングシステムは、プロンプトの生成後に少なくとも１つのテンプレートを破棄してもよい。
【００３４】
このプロンプトが生成されると、オペレーティングシステムは、１つ以上のユーザ入力値をリモートプロバイダに送信するための許可を、プロンプトを介して受け付けもよい。その許可を受け付けたことに応答して、オペレーティングシステムは、１つ以上のユーザ入力値をリモートプロバイダに送信してもよい。
【００３５】
さらなる実施形態では、オペレーティングシステムは、少なくとも１つのテンプレートを用いて１つ以上のユーザ入力値のバリデーションを行ない、バリデーションが成功したこと（例えば、ユーザがクレジットカード番号の正しい桁数を入力したと認定したこと）に応答してプロンプトを生成してもよい。一方、他の例では、このようなバリデーションが成功しなかった場合、オペレーティングシステムは、プロンプトを生成も表示もしない。
【００３６】
さらなる実施形態では、オペレーティングシステムは、ＵＩを介した複数のユーザ入力操作の各々に応答して、少なくとも１つのテンプレートに基づいて１つ以上のユーザ入力値が有効であるか否かを判定してもよい。オペレーティングシステムは、１つ以上のユーザ入力値が有効であると判定した場合にのみ、プロンプトを生成してもよい。例えば、上記複数のユーザ入力操作の各々は、１つ以上のテキスト入力フィールドのうちの１つにテキスト文字を入力することであってもよい。
【００３７】
さらに他の実施形態では、オペレーティングシステムは、１つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。オペレーティングシステムは、１つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されていないと判定した場合にのみ、プロンプトを生成してもよい。さらなる一局面において、ある実施形態では、オペレーティングシステムは、リモートプロバイダによって前に提供されたデータセットのリストに基づいて、１つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。
【００３８】
ＩＩ．分散コンピューティングアーキテクチャ
以下では、さまざまな実施形態に詳細に言及する。これらの実施形態の例が添付の図面に示されている。以下の詳細な説明では、本開示および記載された実施形態の十分な理解を提供するために、多くの具体的詳細が説明されている。しかしながら、本開示は、それらの具体的詳細がなくても実践することが可能である。他の例では、実施形態の局面を不必要に不鮮明にしないようにするために、公知の方法、手順、構成要素、および回路を詳細には説明していない。
【００３９】
図１は、例示的な実施形態に従って、ネットワーク１０６を介して、ユーザ機器１０４ａ、１０４ｂ、１０４ｃ、１０４ｄ、１０４ｅおよびリモートプロバイダ１１２、１１４と通信するように構成されたサーバデバイス１０８、１１０を含む分散コンピューティングアーキテクチャ１００を示す。ネットワーク１０６は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、企業のイントラネット、公衆インターネット、または、ネットワークで結ばれたコンピューティングデバイス間の通信経路を提供するように構成された他の如何なる種類のネットワークに対応するものであってもよい。ネットワーク１０６は、１つ以上のＬＡＮ、ＷＡＮ、企業のイントラネット、および／または公衆インターネットの組み合わせに対応するものであってもよい。
【００４０】
図１はユーザ機器の小さな集まりを示しているにすぎないが、分散アプリケーションアーキテクチャは、数十、数百、または数千のユーザ機器を提供してもよい。さらに、ユーザ機器１０４ａ、１０４ｂ、１０４ｃ、１０４ｄ、１０４ｅ（または任意の追加のプログラム可能なデバイス）は、リモートプロバイダの助けを借りて、ユーザがコンピューティングデバイスのオペレーティングシステムを用いて複数のアプリケーションを横断して自動記入を円滑化することが可能な、如何なる種類のコンピューティングデバイスであってもよい。例えば、一般的なラップトップコンピュータ、デスクトップコンピュータ、ウェアラブルコンピューティングデバイス、携帯型コンピューティングデバイス、ヘッドマウントデバイス（ＨＭＤ）、ネットワーク端末、無線通信デバイス（例えば、スマートフォンまたは携帯電話）などである。ある実施形態では、ユーザ機器１０４ａ、１０４ｂ、および１０４ｃによって示されるように、ユーザ機器は、ネットワーク１０６に直接的に接続されてもよい。他の実施形態では、ユーザ機器１０４ｄおよび１０４ｅによって示されるように、ユーザ機器は、ユーザ機器１０４ｃなどの関連コンピューティングデバイスを介して、ネットワーク１０６に間接的に接続されてもよい。このような実施形態では、ユーザ機器１０４ｃは、ユーザ機器１０４ｄおよび１０４ｅとネットワーク１０６との間で電子情報を伝達する関連コンピューティングデバイスとして機能し得る。図１には示さないが、さらに他の実施形態では、１つのユーザ機器が直接的かつ間接的にネットワーク１０６に接続されてもよい。
【００４１】
サーバデバイス１０８、１１０は、要求に応じてコンピュータおよび他のデバイスに対してコンピュータ処理リソースおよびデータを共有するクラウド型サーバシステムの一部として動作してもよい。特に、サーバデバイス１０８、１１０は、 ユーザ機器１０４ａ〜１０４ｅによって要求された１つ以上のサービスを行なうように構成されてもよい。例えば、サーバデバイス１０８および／または１１０は、ユーザ機器１０４ａ〜１０４ｅにコンテンツを提供してもよい。さらなる一局面では、サーバデバイス１０８および／または１１０は、直接的に、または、第三者によって要求されたコンテンツの送信を促進することによって、ユーザ機器１０４ａ〜１０４ｅにコンテンツを提供してもよい。コンテンツは、ウェブページ、ハイパーテキスト、スクリプト、バイナリデータ（例えば、コンパイルされたソフトウェア）、画像、音声、および／または動画を含み得るが、これらに限定されない。コンテンツは、圧縮されたコンテンツ、および／または圧縮されていないコンテンツを含んでもよい。コンテンツは、暗号化されたコンテンツ、および／または暗号化されていないコンテンツを含んでもよい。
【００４２】
リモートプロバイダ１１２、１１４は、要求に応じてコンピュータおよび他のデバイスに対してコンピュータ処理リソースおよびデータを共有するクラウド型サーバシステムの一部として動作してもよい。特に、リモートプロバイダ１１２、１１４は、例示的な実施形態に従って、ネットワーク１０６上のコンテンツを提供、受信、記憶、管理、および送信してもよい。例えば、リモートプロバイダ１１２および／または１１４は、ユーザ機器１０４ａ〜１０４ｅによって使用されるコンテンツの要求を受信し、そのコンテンツを含む応答を生成するとともに、ネットワークに接続されたデバイスにその応答を送信してもよい。
【００４３】
例として、サーバデバイス１０８および／または１１０は、リモートプロバイダ１１２および／または１１４の助けを借りて、ユーザ機器１０４ａ〜１０４ｅ上の複数のアプリケーションを横断して自動記入を円滑化するコンテンツを提供してもよい。さらに、サーバデバイス１０８および／または１１０は、データベース、検索、演算、グラフィック、音声、動画、ワールド・ワイド・ウェブ／インターネットの利用、および／または他の機能のためのソフトウェアへのアクセスをユーザ機器１０４ａ〜１０４ｅに提供してもよい。他にも多数のコンテンツの例があり得る。
【００４４】
ＩＩＩ．方法フローチャートおよび例示的な実施形態
図２は、リモートプロバイダの助けを借りて、ユーザがユーザ機器のオペレーティングシステムを用いて、複数のアプリケーションを横断して後の自動記入が円滑化するようにユーザ入力データを保存することを可能にするために行なわれ得る方法２００を示すフローチャートである。図１に関して例示および説明するように、方法２００は、ユーザ機器１０４ａ〜１０４ｅおよびリモートプロバイダ１１２および／または１１４などの１つ以上のコンピューティングデバイス（場合によっては、さらにサーバ１０８および／または１１０）によって実行されてもよい。さらに他の例では、方法２００は、クラウド型システムの一部として動作するユーザ機器１０４ａ〜１０４ｅおよびリモートプロバイダ１１２および／または１１４（場合によっては、さらにサーバ１０８および／または１１０）によって実行されてもよい。さらに、方法２００は、図１に具体的に示したコンピューティングデバイス以外の１つ以上の他の種類のコンピューティングデバイスによって行なわれてもよい。
【００４５】
なお、以下では方法２００のステップがオペレーティングシステムによって完結されるものとして説明しているが、ユーザ機器に関連する他の構成要素、アプリケーション、および／または技術が方法２００のステップを行なってもよい。
【００４６】
なお、本明細書でフローチャートに関連して記載される機能は、特殊機能および／または設定された一般的機能のハードウェアモジュールとして実現されてもよいし、図２に示すフローチャートに関連して記載される特定のロジック機能、判定、および／またはステップを実現するためにプロセッサによって実行されるプログラムコードの一部として実現されてもよい。プログラムコードが用いられる場合は、プログラムコードは、例えばディスクまたはハードドライブを含む記憶装置など、任意の種類のコンピュータ可読媒体に格納されてもよい。
【００４７】
さらに、図２に示されるフローチャートの各ブロックは、処理における特定のロジック機能を行なうように配線された回路を表わしてもよい。特に断りのない限り、図２に示すフローチャートにおける機能は、図示または記載とは異なる順序で実行してもよい。記載される方法の全体としての機能が維持されるならば、関与する機能に応じて、例えば別々に記載された機能を実質的に同時に実行してもよいし、場合によっては逆の順序で実行してもよい。
【００４８】
ブロック２１０において、方法２００は、ユーザ機器のユーザインターフェイス（ＵＩ）上のアプリケーションによって表示された内容のサブセットを判定することを含んでもよい。このサブセットは、ユーザ固有の情報を含まない。特に、ユーザは、コンピューティングデバイスとの対話中に、そのデバイス上の、あるアプリケーションと対話することを決定し得る。オペレーティングシステムは、ユーザがアプリケーションと対話中であること、および、オペレーティングシステムが把握している内容で、かつアプリケーションの自動記入に関係のある内容が存在することを認識し得る。このデータに従って、オペレーティングシステムは、アプリケーションにおいて自動記入を行うための許可をオペレーティングシステムに与えるようユーザに促してもよい。これにより、ユーザとユーザインターフェイス機能との対話、および／またはユーザインターフェイス機能の応答性が向上し得る。
【００４９】
概して、オペレーティングシステムは、自動記入に共通に関連するある特定のデータを認識してもよい。一例では、オペレーティングシステムは、アプリケーションに関連するテキスト入力フィールドが共通の自動記入ディスクリプタ（例えば、「カード番号」または「有効期限」）を含む、またはそれに関連するということを認識してもよい。それに応答して、この例では、オペレーティングシステムは、自動記入を設定するようユーザに促してもよい。
【００５０】
ある例では、このプロンプトへのユーザの応答の前、後、または最中に、オペレーティングシステムは、自動記入の円滑化をさらに手助けするために、１つ以上のリモートプロバイダのリストをコンパイルしてもよい。一局面では、自動記入の円滑化を手助けするために指定されたリモートプロバイダが１つしかない場合には、そのリモートプロバイダの使用に同意するようユーザに促してもよい。一方、別の一局面では、自動記入の円滑化を手助けするために指定されたリモートプロバイダが複数ある場合には、１つのリモートプロバイダを選択するようユーザに促し、さらに当該リモートプロバイダの使用に同意するようユーザに促してもよい。さらに別の一局面では、ユーザは２つ以上のリモートプロバイダを選択可能であってもよい。その場合もやはり、選択された各リモートプロバイダの使用に同意するようユーザに促してもよい。
【００５１】
別の一例では、オペレーティングシステムは、イベント（場合によっては、自動記入トリガイベント）がトリガされることによって、ＵＩ上のアプリケーションによって表示された内容のサブセットを判定し始めてもよい。自動記入トリガイベントは、ユーザ機器、またはユーザ機器上のアプリケーションの現在の状態（ユーザによる、デバイスとの対話の状態を含む）に関する情報を提供してもよい。自動記入トリガイベントを用いることにより、適切な時点で、許可された自動記入をいつ行うべきかをオペレーティングシステムが知るのを手助けすることも可能である。ある例では、自動記入トリガイベントは、デバイスとの直接的または間接的なユーザ対話であってもよい。ただし、概して、自動記入がユーザによって承諾されると、デバイスとのユーザ対話はオペレーティングシステムによって監視され得る。
【００５２】
一実施形態では、例として、自動記入トリガイベントは、ユーザ機器との直接的なユーザ対話に関連するデータによって示されてもよい。例えば、ユーザによるアプリケーションの起動、ユーザによるアプリケーションのテキスト入力フィールドの選択、または、１つ以上のアプリケーションにおいて自動記入を設定せよというユーザからの要求などがあるが、他にも多数のシナリオがあり得る。
【００５３】
他の例では、自動記入トリガイベントは、ユーザ機器との間接的なユーザ対話に関連するデータを含んでもよい。例えば、アプリケーションが起動されたことを示す信号、または、アプリケーションのテキスト入力フィールドもしくはユーザ機器のＵＩ上に表示された内容の他の何らかのパラメータがフォーカスを持つことを示す信号などがあるが、他にも多数のシナリオがあり得る。さらなる一局面では、ユーザによるユーザ機器との間接的な対話は、キーボードなどのグラフィックまたはＧＵＩがＵＩ上に表示されることによって反映されてもよい。
【００５４】
概して、これらのシナリオのうちのいずれかに従って、オペレーティングシステムは自動記入を円滑化しようとする際に、機密情報および／または個人情報を確認してもよい。この自動記入の使用に同意する前にその詳細を知ることは、ユーザにとって好都合であり得る。具体的には、オペレーティングシステムは機密情報および／または個人情報を含むデバイス上の内容を確認することが可能であるので、オペレーティングシステムは、自動記入を行う前に、当該自動記入の許可の基礎となる詳細をユーザに知らせることができる。
【００５５】
さらなる一局面では、選択されたリモートプロバイダは、通常はユーザが提供しない何らかの情報を受信する可能性があるので、ユーザが選択した各自動記入プロバイダの使用に関する条件を含む取り決めを承諾するように、ユーザに促してもよい。ある例では、自動記入プロバイダの使用に関する詳細をユーザが十分に理解することを確実にするために、自動記入の使用を許可する前に、取り決めの承諾をユーザに促してもよい。この取り決めは、オペレーティングシステム、および／または自動記入のためにユーザが選択した各自動記入プロバイダの使用に関する免責事項を含んでもよい。
【００５６】
さらに他の例では、自動記入の使用を許可する前に、照合送信プロンプトをユーザに示してもよい。この照合送信プロンプトは、ＵＩ上に表示された１つ以上のテキスト入力フィールドに入力された１つ以上の値をリモートプロバイダに送信することを、オペレーティングシステムに許可するものである。例えば、ユーザは、オペレーティングシステムが自動記入の設定をユーザに促す基礎となったアプリケーションとは別のアプリケーション（「第２のアプリケーション」）に、１つ以上の値を入力した場合もある。さらなる一局面では、オペレーティングシステムは、ユーザによって許可されると、後で使用するために１つ以上の値をリモートプロバイダに送信してもよい。
【００５７】
概して、アプリケーションによってＵＩ上に表示される内容とは、オペレーティングシステムが把握することのできるアプリケーションに関連する任意の情報を指す。一例では、上記内容は、ユーザ機器のＵＩ上に表示された内容の現在のビュー階層を含んでもよい。ただし、上記内容は機密および／またはプライベートな情報を含み得るので、オペレーティングシステムは、ユーザ固有の情報を含まない内容のサブセットのみを判定する。
【００５８】
ある例では、ユーザ固有の情報は、個人識別情報、または、単独もしくは他の情報を伴って使用することによってある１人の人間を識別し、接触し、もしくは突き止めること、または、他の情報もしくはデータに照らして個人を識別することが可能な他の任意の情報を含んでもよい。さらなる例では、ユーザ固有の情報は、ユーザが機密および／またはプライベートな情報として指定した情報を含んでもよい。
【００５９】
さらに他の例では、ユーザ固有の情報は、ユーザに関連する１つ以上の要素に基づいて機密および／またはプライベートな情報として指定された情報を含んでもよい。例えば、ユーザ固有の情報は、ユーザ、ユーザ機器、および／またはリモートプロバイダが位置する地理的領域に基づいて機密および／またはプライベートな情報として指定された情報を含み得るが、他にも多数の可能性があり得る。他の例では、ユーザ固有の情報は、ユーザの属性（例えば、ユーザの年齢）に基づいて機密および／またはプライベートな情報として指定された情報を含んでもよい。
【００６０】
ブロック２２０において、方法２００はさらに、アプリケーションで使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信することを含む。この要求は、ＵＩ上に表示された内容のサブセットを含む。テンプレートを求める要求は、ユーザ機器での自動記入の使用の円滑化を手助けするために選択されたリモートプロバイダに送信されてもよい。具体的には、ユーザ固有の情報を含まない表示内容のサブセットに基づいて、オペレーティングシステムは、当該内容のサブセット内の情報またはそのセブセットに関連する情報を含む要求をリモートプロバイダに送信してもよい。これによって、特に、ＵＩ上に表示された記入可能なフィールドについてリモートプロバイダに注意喚起することができる。いずれにせよ、この要求は、オペレーティングシステムおよびユーザの両方にとって有益であり得る。なぜなら、それによってリモートプロバイダは、ＵＩ上に表示された内容を安全かつプライベートにパースし、アプリケーションにおける自動記入の円滑化にはいずれの情報が有用であるかを判定（例えば、アプリケーション上のいずれのテキスト入力フィールドが自動記入可能であるかを判定）することができるからである。
【００６１】
ある例では、上記要求は、ＵＩ上に表示されたテキスト入力フィールドに関連する情報を含んでもよい。一局面では、この情報は、テキスト入力フィールドに関連する１つ以上のディスクリプタを含んでもよい。例えば、ディスクリプタは、「名前」、「ユーザ名」、「Ｅメール」、「パスワード」、「アドレス」、「市」、「状態」、「郵便番号」、「国」、「口座番号」、および／または「カード番号」などの項目を含み得るが、他にも多数の可能性があり得る。
【００６２】
他の例では、上記要求は、ユーザ機器の現在のビュー階層に関連する情報を含んでもよい。一局面では、この情報は、ＵＩ上に表示された内容のサブセットをコンパイルまたは維持することに関連する情報（例えば、根底にあるスクリプトおよび／またはコード）を含んでもよい。別の一局面では、この情報は、ＵＩ上に表示された内容のサブセットの何らかの近似物に関連する情報（例えば、内容のサブセットのワイヤフレーム表示）を含んでもよい。さらに別の一局面では、この情報は、ＵＩ上に表示された内容のサブセットのアーキテクチャに関連する情報（例えば、相対レイアウト、線形レイアウト、ボタン、表のレイアウト、表の行、チェックボックス、および／または他の要素に関連する情報）を含んでもよい。
【００６３】
いずれにしても、オペレーティングシステムは、アプリケーションで使用されるテンプレートを要求し得る。ある例では、テンプレートは次のようなメカニズムであってもよい。すなわち、オペレーティングシステムに送信されるＰａｒｃｅｌａｂｌｅオブジェクトで表現されたビジネスロジックをリモートプロバイダが提供し、その後、ユーザによって提供されたデータをオペレーティングシステムがこれらのオブジェクトに入力し、必要なビジネスロジックを推測するというメカニズムである。例えば、これらのテンプレートは、自動記入処理の一部として用いられてもよく、１つ以上の任意のオブジェクトによって表わされてもよい。例として、以下のものが挙げられる。
・Ｖａｌｉｄａｔｏｒテンプレート：クレジットカード情報のバリデーションを行なうために使用される（クレジットカード情報が有効ではない場合、フレームワークはＵＩを介して「保存」プロンプトを表示しない）。
・Ｇｅｎｅｒａｔｏｒテンプレート：クレジットカード番号を生成するために使用される（そのサービスのためにクレジットカードが既に保存されている場合、フレームワークはＵＩを介して「保存」プロンプトを表示しない）。
・ＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎテンプレート：画像、マスクされたクレジットカード番号、有効期限、リンク付きのテキストなどを含み得るカスタムプレゼンテーションを表示するために使用される。
【００６４】
いずれにしても、ある例では、この要求は、アプリケーションの起動に応答して送信されてもよい。ある例では、この要求は、アプリケーションのテキスト入力フィールドの選択に応答して送信されてもよい。
【００６５】
さらに他の例では、この要求は、１つ以上のテキスト入力フィールドに関連するメタデータを含んでもよい。このメタデータは、他のデータに関する情報を提供するデータまたは情報であってもよい。例として、以下のものが挙げられる。
・記述メタデータ：発見および識別などの目的でリソースを記述するものであってもよい。タイトル、要旨、作成者、およびキーワードなどの要素を含み得る。
・構造メタデータ：データのコンテナに関するものであってもよい。合成オブジェクトをどのように組み立てるかを示す。例えば、デジタル教材に関して、どのようにページを順序付けし、章を構成し、種類、バージョン、関係、および他の特性を記述するか、など。
・管理メタデータ：リソースの管理を助ける情報を提供するものであってもよい。例えば、それが作成された日時および方法、ファイルの種類、他の技術情報、ならびに誰がそれにアクセス可能であるか、など。
【００６６】
ブロック２３０において、方法２００はさらに、要求に対する応答をリモートプロバイダから受信することを含んでもよい。この応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含む。概して、リモートプロバイダから受信された応答は、自動記入の円滑化においてオペレーティングシステムの助けとなるデータ（例えば、テンプレート）を提供し得る。
【００６７】
一例では、上記応答は、第１のインスタンスで、自動記入の円滑化においてオペレーティングシステムの助けとなるデータを含み得る。例えば、上記応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含んでもよい。
【００６８】
ある例では、テンプレートは、少なくとも１つの正規表現を含んでもよい。ここで、正規表現（「ｒｅｇｅｘ」、「ｒｅｇｅｘｐ」、または「正則表現」と呼ばれる場合もある）は、ユーザ入力されたテキストに対するパターンマッチング、および／または「検索および置換」機能を実行するために使用可能な文字のパターンを記述するオブジェクトであってもよい。さらなる一局面では、正規表現は、さまざまなシンタックスまたはフォーマットのうちの任意のものを用いてもよい。例えば、検索エンジン、ワードプロセッサおよびテキストエディタの検索および置換ダイアログ、文書処理ユーティリティ、および字句解析に使用されるものなどである。さらに、多くのプログラミング言語は、内蔵の、またはライブラリを介して、正規表現機能を提供する。
【００６９】
ある例では、テンプレートは、複数の値と、対応する複数の画像との間のマッピングを含み、オペレーティングシステムは、マッピングおよび１つ以上のユーザ入力値に基づいて、プロンプト内に含める画像を決定してもよい（それによって、例えば、ユーザによって入力されたクレジットカードの種類のクレジットカードシンボルを表示することができる）。ここで、マッピングとは、２つの異なるデータモデルの間のデータ要素マッピングを作成する処理であってもよい（これは、多種多様なデータ統合タスクの第１段階として使用可能である）。マッピング自体を正規表現として作成することも可能である。
【００７０】
ある例では、テンプレートは部分的な値マスクを含み、オペレーティングシステムは、１つ以上のユーザ入力値のうちの１つに部分的な値マスクを適用することによって、プロンプト内に含める値を決定してもよい（それによって、例えば、クレジットカード番号の下４桁のみを表示することができる）。ここで、値マスクまたは部分的な値マスクとは、ユーザが入力データの特定の部分しか見ることができないように、入力フィールド上にマスクをかけることを含み得るものである。
【００７１】
ブロック２４０において、方法２００はさらに、１つ以上のテキスト入力フィールド内に１つ以上のユーザ入力値を受け付けることを含んでもよい。ユーザ入力値は、ユーザが個々の文字、数字、または単語を入力する（例えば、打ち込む）期間にわたって受け付けてもよい。
【００７２】
ブロック２５０において、方法２００はさらに、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成することを含んでもよい。このプロンプトは、少なくとも１つのテンプレートを用いて、１つ以上のユーザ入力値を処理することによってカスタマイズされたものである。ある例では、カスタマイズされたプロンプトは、リモートプロバイダがまだアクセスすることができないユーザ入力データであって、なおかつ、リモートプロバイダがテンプレートを提供することによってオペレーティングシステムがそれを解析および適用し、カスタマイズされたプロンプトを作成するのを補助した、ユーザ入力データに関する詳細を含んでもよい。ある例では、このテンプレートによって、オペレーティングシステムは、後で自動記入に使用するために１つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのカスタマイズされたプロンプト（例えば、クレジットカードＢを自動記入プロバイダＸに保存しますか？」）を生成することが可能になる。これは、汎用の自動記入保存プロンプト（例えば、「＜種類＞を＜サービス＞に保存しますか？」）とは異なるものである（「＜種類＞を＜サービス＞に保存しますか？」の場合、ユーザによって入力されたデータの詳細を把握できないため、＜種類＞および＜サービス＞は、「パスワード」や「クレジットカード」などの一般的な単語の使用によってしか設定することができないかもしれない）。
【００７３】
さらなる一局面において、ある実施形態では、このプロンプトは、リモートプロバイダの識別子（例えば、クレジットカードＢもしくは自動記入プロバイダＸ、またはその両方に固有の画像）を含んでもよい。概して、リモートプロバイダから受信された識別子は、ＵＩ上に表示された記入可能なフィールドに対応するユーザ入力データに関連するものであってもよい。さらなる一局面では、ユーザ入力データに関連する１つまたは複数の識別子を表示することは、オペレーティングシステムおよびユーザの両方にとって好都合であり得る（というのは、オペレーティングシステムがどのデータを自動記入に使用すべきかを決定する際に、ユーザはすべての利用可能なデータを検討するのではなく、表示された識別子を選択し、その識別子に関連するユーザ入力データを使用することができるからである）。
【００７４】
さらなる一局面において、ある実施形態では、プロンプトが生成されると、オペレーティングシステムは、プロンプトの生成後に少なくとも１つのテンプレートを破棄してもよい。このように破棄することは、オペレーティングシステムが引き受ける通常のワークフローまたは処理の一部であってもよく、オペレーティングシステムにとって有利な結果をもたらし得るものである（例えば、オペレーティングシステムは、テンプレートを用いたユーザ入力データのさらなる処理を無視することができ、その結果、オペレーティングシステムのためのリソースを解放することができる）。したがって、リモート自動記入プロバイダは、アプリケーションが起動するたびに、および／または、アプリケーションがその行程を実行するたびに、新たなテンプレートの送信を担うことができる。
【００７５】
ＩＶ．さらなる例示的な実施形態
ある例では、本明細書に記載の方法は、このようなプロンプトが生成されると、オペレーティングシステムが、１つ以上のユーザ入力値をリモートプロバイダに送信するための許可を、プロンプトを介して受け付けることを含んでもよい。その許可を受け付けたことに応答して、オペレーティングシステムは、１つ以上のユーザ入力値をリモートプロバイダに送信してもよい。
【００７６】
ある例では、オペレーティングシステムは、少なくとも１つのテンプレートを用いて１つ以上のユーザ入力値のバリデーションを行ない、バリデーションが成功したことに応答してプロンプトを生成してもよい。バリデーション成功の例としては、ユーザがクレジットカード番号の正しい桁数を入力したと認定したこと、あるいは、ユーザがそれよりも前にその入力データを入力していない（よって、自動記入プロンプトを、汎用、カスタマイズのいずれも、作成すべきではない）と認定したことなどが挙げられる。
【００７７】
ある例では、オペレーティングシステムは、ＵＩを介した複数のユーザ入力操作の各々に応答して、少なくとも１つのテンプレートに基づいて、１つ以上のユーザ入力値が有効であるか否かを判定してもよい。オペレーティングシステムは、１つ以上のユーザ入力値が有効であると判定した場合にのみ、プロンプトを生成してもよい。例えば、上記複数のユーザ入力操作の各々は、１つ以上のテキスト入力フィールドのうちの１つにテキスト文字を入力することであってもよい。
【００７８】
他のある例では、オペレーティングシステムは、１つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。オペレーティングシステムは、１つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されていないと判定した場合にのみ、プロンプトを生成してもよい。さらなる一局面において、ある例では、オペレーティングシステムは、リモートプロバイダによって前に提供されたデータセットのリストに基づいて、１つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。
【００７９】
別の一例では、自動記入に使用可能な入力値のセットおよび関連する識別子が複数ある場合には、ユーザが選択できるように、それらの識別子は、その各々が値のセットに対応している識別子のリスト（ドロップダウンメニューまたは他の形式）として表示されてもよい。
【００８０】
さらに別に一例では、値が記入され得るテキスト入力フィールドに記入インジケータが表示されてもよい。具体的には、記入インジケータは、いずれのテキスト入力フィールドに特定の値のセットが自動記入されるかを、自動記入を行う前にユーザに予め確認させることができる。さらに、記入インジケータは、オペレーティングシステムによって生成されたグラフィック（例えば、鉛筆の図形）の形式、またはリモートプロバイダから受信された特定のグラフィック（例えば、リモートプロバイダに関連する商標または図形）の形式、または他の形式で表示されてもよい。当然のことながら、他の例も可能である。
【００８１】
本明細書に記載の方法はさらに、データセット識別子の選択を示す入力データをオペレーティングシステムが受け付けることを含んでもよい。概して、データセット識別子の選択を示す入力データを受け付けることにより、オペレーティングシステムは、ユーザがデータセット識別子およびその識別子に関連する値を自動記入に使用するために選択しているということを知ることができる。
【００８２】
Ｖ．  さらなる説明のための図および例示的な実施形態
図３Ａは、例示的な実施形態に従って、自動記入の設定を促すプロンプトを示す図である。特に、携帯電話などのユーザ機器３０２は、当該ユーザ機器上にアプリケーション３０４の一部を表示し得る。アプリケーション３０４は、共通の自動記入ディスクリプタ３０６（例えば、「カード番号」）および／または３０８（例えば、「有効期限」）を含む、またはそれに関連するテキスト入力フィールドを含んでもよい。この例では、ユーザ機器３０２のオペレーティングシステムが１つ以上の共通の自動記入ディスクリプタ３０６および／または３０８を認識すると、オペレーティングシステムは、自動記入を設定するように促すプロンプト３１０を表示する。さらなる例では、上述したように、ユーザが自動記入の設定を選択した後、自動記入の円滑化を手助けするための１つ以上のリモートプロバイダを選択するようユーザに促してもよい。また、選択されたプロバイダに関連する１つ以上の取り決めを確認し、承諾するようユーザに促してもよい。
【００８３】
図３Ｂは、例示的な実施形態に従って、ユーザ機器のＵＩを介して選択されるように表示されたデータセット識別子を示す図である。特に、携帯電話などのユーザ機器３０２は、当該ユーザ機器上にアプリケーション３０４の一部を表示し得る。この例では、上述したように、何らかのフォーカスを持つアプリケーションのテキスト入力フィールド３１２（ここでは、表示されたキーボードを介してフィールドにテキストを入力可能であることを示す縦線が、「カード番号」テキスト入力フィールドに置かれている）、および、そのようなフォーカスを持たないテキスト入力フィールド３１４（ここでは、「有効期限」テキスト入力フィールドには、そのような縦線がない）に応答して、オペレーティングシステムはこのフォーカスを認識し、ＵＩ上に表示された、ユーザ固有の情報を含まない内容のサブセットを判定し、その内容のサブセットをリモートプロバイダに送信する。さらにオペレーティングシステムは、リモートプロバイダからの応答を受信すると、自動記入に使用可能な、ユーザによって前に入力された値に関連するデータセット識別子３１６を、ユーザが選択できるように表示する。さらなる例では、オペレーティングシステムは、前に入力されたユーザデータを記入可能なテキスト入力フィールドに記入インジケータ３１８（ここでは、鉛筆の図形）を表示してもよい。
【００８４】
図３Ｃは、例示的な実施形態に従って、ユーザ機器のＵＩを介して選択されるように表示された複数のデータセット識別子を示す図である。図３Ｂの例示的な実施形態とは異なり、ユーザ機器３０２のオペレーティングシステムは、リモートプロバイダからの応答を受信すると、自動記入に使用可能な、前に入力されたユーザデータのセットの各々に関連するデータセット識別子のリスト３２０を、ユーザが選択できるように表示する。さらなる例では、オペレーティングシステムは、ユーザ入力データを記入可能なテキスト入力フィールドに記入インジケータ３１８（ここでは、鉛筆の図形）をさまざまな方法で表示してもよい。例えば、一局面では、オペレーティングシステムは、表示された識別子のリストの中からの識別子の予備選択を受け付けたことに基づいて、テキスト入力フィールドに記入インジケータ３１８を表示してもよい。一方、別の一例では、オペレーティングシステムは、表示された識別子のリストの中の識別子のうちのいずれかに関連する、前に入力されたユーザデータが記入され得るテキスト入力フィールドに、記入インジケータ３１８を表示してもよい。当然のことながら、他の例も可能である。
【００８５】
図４Ａは、例示的な実施形態に従って、ＵＩ上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連するユーザインターフェイス機能を示す図である。より具体的には、携帯電話などのユーザ機器４０２は、当該ユーザ機器上にアプリケーション４０４の一部を表示し得る。この例では、ユーザは、携帯機器のオペレーティングシステムによる自動記入を許可したとしても、入力データを手動で第１のテキスト入力フィールド４０６（ここでは、「カード番号」テキスト入力フィールド）および第２のテキスト入力フィールド４０８（ここでは、「有効期限」テキスト入力フィールド）に入力することができる。さらなる一局面では、自動記入に使用可能な、前に入力されたユーザデータに関連する１つ以上のデータセット識別子４１０が表示されていても、および／または、前に入力されたユーザデータを記入可能なテキスト入力フィールドに記入インジケータ４１２（ここでは、鉛筆の図形）が表示されていても、ユーザは入力データを手動で入力することができる。別の例示的な一実施形態では、ユーザがテキスト入力フィールドに手動で入力データを入力したことに応答して、オペレーティングシステムは、表示されたデータセット識別子、および／または自動記入に使用可能な関連データをフィルタにかけてもよい。それによって、表示されたデータセット識別子、および／または自動記入に使用可能な関連データを、ユーザが手動で入力した入力データに合致または対応するものに限定することができる。例えば、前に入力されたユーザデータのいずれにも合致しないクレジットカードをユーザが手動で入力し始めた場合、オペレーティングシステムは、ＵＩを介して自動記入用に表示するものを決定する際に、そのデータをすべて除外してもよい。
【００８６】
図４Ｂは、例示的な実施形態に従って、図４Ａに示すＵＩ上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連する、確認メッセージおよび汎用のデータ保存プロンプトを示す図である。具体的には、ＵＩ上に表示されたテキスト入力フィールドに関連する入力データをユーザが手動で入力すると、オペレーティングシステムは、ＵＩ上に表示されたアプリケーションのテキスト入力フィールドへの記入が行なわれた旨をユーザに通知するための確認メッセージ４１４を生成し、表示し得る。さらなる一例では、オペレーティングシステムは、アプリケーションのテキスト入力フィールドに入力された入力データの保存をユーザに促す汎用のプロンプト４１６を表示してもよい。これは、選択されたリモートプロバイダに、後で自動記入に使用するために入力データを送信することを含んでもよい。さらなる一局面では、オペレーティングシステムは、ユーザがプロンプトに応答するまでデータを一時的に保持し、応答した時点で当該データをリモートプロバイダに送信することによって、入力データを後で自動記入に使用するために保存してもよい。一方、別の一例では、オペレーティングシステムは、データが自動記入プロバイダに送信された後は、ユーザ入力データを無視してもよい。
【００８７】
図４Ｃは、図４Ａと同様に、ＵＩ上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連するユーザインターフェイス機能を示す図である。ただし、他の例示的な実施形態に従うものである。より具体的には、携帯電話などのユーザ機器４０２は、当該ユーザ機器上にアプリケーション４０４の一部を表示し得る。この例では、ユーザは、携帯機器のオペレーティングシステムによる自動記入を許可したとしても、入力データを手動で第１のテキスト入力フィールド４０６（ここでは、「カード番号」テキスト入力フィールド）および第２のテキスト入力フィールド４０８（ここでは、「有効期限」テキスト入力フィールド）に入力することができる。さらなる一局面では、自動記入に使用可能な、前に入力されたユーザデータに関連する１つ以上のデータセット識別子４１０が表示されていても、および／または、前に入力されたユーザデータを記入可能なテキスト入力フィールドに記入インジケータ４１２（ここでは、鉛筆の図形）が表示されていても、ユーザは入力データを手動で入力することができる。
【００８８】
一方、図４Ｄは、図４Ｂとは異なり、例示的な実施形態に従って、図４Ｃに示すＵＩ上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連する、確認メッセージおよびカスタマイズされたデータ保存プロンプトを示す図である。具体的には、ＵＩ上に表示されたテキスト入力フィールドに関連する入力データをユーザが手動で入力すると、オペレーティングシステムは、ＵＩ上に表示されたアプリケーションのテキスト入力フィールドへの記入が行なわれた旨をユーザに通知するための確認メッセージ４１８を生成し、表示し得る。
【００８９】
さらなる一例では、オペレーティングシステムは、アプリケーションのテキスト入力フィールドに入力された入力データの保存をユーザに促すカスタマイズされたプロンプト４２０を表示してもよい。これは、選択されたリモートプロバイダに、後で自動記入に使用するために入力データを送信することを含んでもよい。ここでは、カスタマイズされたプロンプト４２０は、汎用のプロンプト４１６とは異なり、ユーザによって手動で入力されたデータに基づくいくつかのカスタマイズされた態様を含む。例えば、カスタマイズされた態様は、以下を含み得る。
・カスタマイズされた識別子「Ｂ」（これは、クレジットカード会社もしくはリモートプロバイダ、またはその両方に関係するものであってもよい。例えば、クレジットカードの種類Ａの場合には、カスタマイズされたプロンプト内にカスタマイズされたテキストとともにロゴまたは関連図形を示してもよい。）
・クレジットカードの詳細についてのカスタマイズされた表示（クレジットカード番号の下４桁「〜０１２１」および有効期限「１２／２０」）。
・以前に入力された他のクレジットカードとの関係についてのカスタマイズされた表示（「ＣＣ３−０１２１」）。
【００９０】
さらに、これらのカスタマイズされた態様は、以前に生成された態様とは異なるものであってもよい。例えば、クレジットカードの種類Ａの場合にはカスタマイズされたプロンプト内にロゴまたは関連図形「Ａ」（ここでは、４１０において図示）を示す一方、クレジットカードの種類Ｂの場合には、カスタマイズされたプロンプト内にカスタマイズされたテキストとともにロゴまたは関連図形「Ｂ」（ここでは、４１６において図示）を示してもよい（ここでは、４１６の「クレジットカードＢを自動記入プロバイダＸに保存しますか？」として図示）。
【００９１】
さらなる一局面では、オペレーティングシステムは、ユーザがプロンプトに応答するまでデータを一時的に保持し、応答した時点で当該データをリモートプロバイダに送信することによって、入力データを後で自動記入に使用するために保存してもよい。あるいは、オペレーティングシステムは、データが自動記入プロバイダに送信された後は、ユーザ入力データを無視してもよい。
【００９２】
いずれにしても、カスタマイズされたプロンプト４２０の生成および表示を実現することは、決して容易なタスクではない。オペレーティングシステムは、手動で入力されたユーザデータの適切な詳細またはロジックを把握することができない可能性もある（例えば、クレジットカードの概念を把握することができず、その結果、ユーザ入力された番号に基づくクレジットカードの種類、それが有効か否か、発行銀行に基づいて表示すべきアイコンなどを推測することができない可能性もある）。そのような情報およびロジックは、カスタマイズされたプロンプトを生成するために、携帯機器から（例えば、提携する自動記入プロバイダに）オフロードされている場合がある。
【００９３】
したがって、後で自動記入に使用するためにシステムによって保存されることになるユーザ入力データの種類、程度、および詳細の正確な近似物をユーザに提供しようとすると、「鶏が先か、卵が先か」問題が生じる。すなわち、携帯機器のオペレーティングシステムは、ユーザによって入力されたユーザ入力データをテキスト入力フィールドを介して得ることで初めてそのロジックを推測することができるが、一方で、情報に基づくプロンプトを提供するためにそのデータを解析、送信、または格納することは、ユーザの承諾前にはできないという問題である。
【００９４】
後で自動記入に使用されることになるユーザ入力データの種類、程度、および詳細の正確な近似物を、そのデータをユーザによる承諾の前に危険にさらすことなくユーザに提供するためには、オペレーティングシステムは、ユーザによって手動で入力されたデータ（繰り返しになるが、例えばクレジットカード番号などのＰＩＩまたはセキュリティ保護された情報であってもよい）をユーザによる承諾の前に露出させることなく、リモートプロバイダから得たロジックを提供する方法が必要である。さらに、それを行なう際に、オペレーティングシステムは、予め定められた１つ以上の条件を維持するのが好都合である（例えば、ユーザに対する既存の保存ダイアログのセキュリティ機能を維持すること、リモートプロバイダによって保存ダイアログをカスタマイズさせること、データの表示前にリモートプロバイダによってそのデータを変換させること、特定の情報（例えば、クレジットカード番号）が既に保存されている場合は、保存ダイアログを表示させないようにする方法を提供すること、入力データの形式が無効である場合には、特定の情報（例えば、クレジットカード番号）を保存するためのオプションを提示しないこと、など）。
【００９５】
例えば、ユーザ機器４０２のオペレーティングシステムは、アプリケーション４０４によって表示された内容のサブセット（ユーザ固有の情報を含まない）を判定し、アプリケーション４０４で使用される少なくとも１つのテンプレートを求める要求をリモートプロバイダに送信し得る。これに対するリモートプロバイダからの応答は、ＵＩ上のアプリケーションによって表示された１つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも１つのテンプレートを含んでもよい（例えば、テキスト入力フィールド４０６（ここでは、「カード番号」テキスト入力フィールド）、および／または、テキスト入力フィールド４０８（ここでは、「有効期限」テキスト入力フィールド））。
【００９６】
ある例では、このようなテンプレートは次のようなメカニズムであってもよい。すなわち、オペレーティングシステムに送信されるＰａｒｃｅｌａｂｌｅオブジェクトで表現されたビジネスロジックをリモートプロバイダが提供し、ユーザによって提供されたデータをオペレーティングシステムがこれらのオブジェクトに入力し、必要なビジネスロジックを推測するというメカニズムである。例えば、これらのテンプレートは、この処理の一部として用いられてもよく、１つ以上の任意のオブジェクトによって表わされてもよい。
【００９７】
いずれにせよ、オペレーティングシステムは、ＵＩ上に表示された入力フィールド内の実際の値（例えば、自動記入処理における値）、または他の何らかのＵＩ上に表示された内容をＶａｌｕｅＦｉｎｄｅｒによって抽出することが必要になる場合がある。このＶａｌｕｅＦｉｎｄｅｒは、実際のユーザ入力をテンプレートによって提供されたフィールドにマッピングするために必要になる場合がある（すなわち、リモートプロバイダによって提供されたテンプレートはｉｄへのリファレンスを有し、この機能によって実際の値を得る）。例えば、オペレーティングシステムは、この処理を助けるために、例えば以下のようなインターフェイスを用いることができる。
public interface ValueFinder {
AutofillValue findByAutofillId(AutofillId id);
}
ある例では、テンプレートは、ユーザ入力データ（例えば、クレジットカード情報）のフォーマットのバリデーションを行なうために使用可能なＶａｌｉｄａｔｏｒテンプレートであってもよい。ある例では、Ｖａｌｉｄａｔｏｒテンプレートは、ユーザ入力データが有効か否か（例えば、クレジットカード番号が無効である）とオペレーティングシステムが判断することを助けるために使用することができる。ある例では、入力されたデータが有効ではない場合、オペレーティングシステムは、入力されたデータを後で自動記入に使用するために保存するようユーザに促すプロンプトを表示しない（図４Ｂの４１６に示す汎用プロンプトも、図４Ｄの４２０に示すカスタマイズされたプロンプトも、表示しない）。このように、カスタマイズされたプロンプトの生成は、Ｖａｌｉｄａｔｏｒのテンプレートおよびロジックには依存しておらず、逆もまた同様である。
【００９８】
このようなＶａｌｉｄａｔｏｒテンプレートの効果的な使用を容易にするために、オペレーティングシステムは、例えば以下のようなＶａｌｉｄａｔｏｒインターフェイスを用いることができる。
public interface Validator extends Parcelable {
boolean isValid (ValueFinder finder);
}
さらなる一局面では、オペレーティングシステムは、Ｖａｌｉｄａｔｏｒインターフェイスの多数の実現例を提供することができる。例えば、以下のものが挙げられる。
・ＣｈａｒＳｅｑｕｅｎｃｅＶａｌｉｄａｔｏｒ（リモートプロバイダによって受け渡される正規表現に基づいて、単一ビューの内容のバリデーションを行なうことができる。）
・ＬｕｈｎＣｈｅｃｋｓｕｍＶａｌｉｄａｔｏｒ（提供された身元確認情報がＬｕｈｎアルゴリズムを通過し得るか否かのバリデーションを行なうことができる。）
・Ｖａｌｉｄａｔｏｒｓ（ＡＮＤやＯＲのような論理式を用いて複数のバリデータを組み合わせる方法を提供することができる。）
他にも多数の可能性があり得る。
【００９９】
いずれにしても、ＳａｖｅＩｎｆｏオブジェクトがＶａｌｉｄａｔｏｒを有し、オペレーティングシステムがプロンプトをＵＩを介して表示しようとするとき（図４Ｂの４１６に示す汎用プロンプトも、図４Ｄの４２０に示すカスタマイズされたプロンプトも同様）、オペレーティングシステムは、まずセッションデータをＶａｌｉｄａｔｏｒに送り、「ｉｓＶａｌｉｄ（ｓｅｓｓｉｏｎ）」が真を返した場合のみ、ＵＩを介してプロンプトを表示する。このような例示的なＶａｌｉｄａｔｏｒテンプレートの使用を容易にするために、オペレーティングシステムは、以下の例示的なコードのサンプルを用いることができる。
【０１００】
クレジットカード入力フィールドにちょうど１６桁の英数字を入れることを要する単純なバリデータの文脈の場合：
saveBuilder.setValidator(new CharSequenceValidator.Builder(ccNumberId,
"^＼＼d{16}$" ).build());
１５または１６桁の英数字をサポートするバリデータの文脈の場合：
import static android.service.autofill.Validators.or;
saveBuilder.setValidator(or(
new CharSequenceValidator.Builder(ccNumberId, "^＼＼d{15}$").build(),
new CharSequenceValidator.Builder(ccNumberId, "^＼＼d{16}$").build())
));
１５または１６桁の英数字をサポートするバリデータであって、Ｌｕｈｎアルゴリズムを通過することが必要なバリデータの文脈の場合：
import static android.service.autofill.Validators.or;
saveBuilder.setValidator(
and (LuhnChecksumValidator.getInstance(),
or (new CharSequenceValidator.Builder(ccNumberId, "^＼＼d{15}$").build(),
new CharSequenceValidator.Builder(ccNumberId, "^＼＼d{16}$").build())
)
));
各々に４桁の英数字を入れる４つのフィールド内にクレジットカード番号を格納する画面用のバリデータの文脈の場合：
import static android.service.autofill.Validators.and;
saveBuilder.setValidator(and(
new CharSequenceValidator.Builder(ccNumber1Id, "^＼＼d{4}$").build()),
new CharSequenceValidator.Builder(ccNumber2Id, "^＼＼d{4}$").build()),
new CharSequenceValidator.Builder(ccNumber3Id, "^＼＼d{4}$").build()),
new CharSequenceValidator.Builder(ccNumber4Id, "^＼＼d{4}$").build ())
));
ある例では、テンプレートは、クレジットカード番号の生成に使用可能なＧｅｎｅｒａｔｏｒテンプレートであってもよい。Ｇｅｎｅｒａｔｏｒテンプレートは、そのサービスのためにクレジットカードが既に保存されている否かの判定を助けるために使用することができる。既に保存されていた場合、オペレーティングシステムは、入力されたデータを後で自動記入に使用するために保存するようユーザに促すプロンプトを表示しない（図４Ｂの４１６に示す汎用プロンプトも、図４Ｄの４２０に示すカスタマイズされたプロンプトも、表示しない）。このように、カスタマイズされたプロンプトの生成は、Ｇｅｎｅｒａｔｏｒのテンプレートおよびロジックには依存しておらず、逆もまた同様である。
【０１０１】
ある例では、リモートプロバイダが既に何らかのユーザ入力データを有する場合、ユーザが選択できるように、１つ以上の識別子を、その各々が値および／またはデータのセットに対応するように、識別子のリスト（ドロップダウンメニューまたは他の形式）として表示してもよい。Ｇｅｎｅｒａｔｏｒテンプレートを、そのような識別子機能および新たに手動で入力されたユーザデータと統合させ、２つを比較または識別し、その問題を解決してもよいが、他にも多数の方法があり得る。例えば、ユーザ入力が微妙に異なる場合、異なる入力値および／または識別子をＵＩを介して表示してもよい（例えば、リモートプロバイダが１つ以上のテンプレートを介して値「1234」を送信し、ユーザが「１２３４」と入力した場合、これらの入力値は、実現例に応じて、ＵＩを介して、異なる結果として示されてもよいし、同じ結果として示されてもよい。
【０１０２】
さらなる例では、テンプレートは、ユーザ機器４０２のＵＩを介してカスタムプレゼンテーション（例えば、カスタマイズされたプロンプト）を表示するために使用可能なＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎテンプレートであってもよい。ＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎテンプレートを使用することによって、後で自動記入に使用されることになる入力データの種類、程度、および詳細をユーザに通知するために、画像、マスクされたクレジットカード番号、有効期限、リンク付きのテキスト、および他のこのような情報をユーザに提示し得るカスタムプレゼンテーションを表示することができる。
【０１０３】
ある例では、ＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎオブジェクトが、リモートプロバイダに、クレジットカードタイトル用のＲｅｍｏｔｅＶｉｅｗｓテンプレートを定義させる。また、ＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎオブジェクトは、そのテンプレート上のｃｈｉｌｄ  ｖｉｅｗを、実行時に推測値に置換するために使用されるＴｒａｎｓｆｏｒｍａｔｉｏｎを、リモートプロバイダに定義させる。さらなる一局面では、このようなＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎテンプレートの効果的な使用を容易にするために、オペレーティングシステムは、例えば以下のようなＴｒａｎｓｆｏｒｍａｔｉｏｎインターフェイスを用いることができる。
public interface Transformation extends Parcelable {
void apply (ValueFinder finder, RemoteViews parentTemplate, int childViewId);
}
さらなる一局面では、オペレーティングシステムは、Ｔｒａｎｓｆｏｒｍａｔｉｏｎインターフェイスの多数の実現例を提供することができる。例えば、以下のものが挙げられる。
・ＳｉｎｇｌｅＶｉｅｗＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎ（正規表現およびグループ置換を用いて、文字列における単一ビューを変換することができる。典型的には、クレジットカード番号をマスクするために使用可能である。）
・ＭｕｌｔｉｐｌｅＶｉｅｗｓＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎ（正規表現およびグループ置換を用いて、文字列における複合ビューを変換することができる。典型的には、有効期限を生成するために使用可能である。）
・ＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎ（ＳｉｎｇｌｅＶｉｅｗＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎおよびＭｕｌｔｉｐｌｅＶｉｅｗｓＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎの何らかの組み合わせを含み得る。）
・ＩｍａｇｅＴｒａｎｓｆｏｒｍａｔｉｏｎ（どの正規表現がビューの値にマッチするかに基づいて、画像を選択することができる。典型的には、適切なクレジットカードアイコンを選択するために使用可能である）
他にも、ＴｅｘｔＴｒａｎｓｆｏｒｍａｔｉｏｎなどの多数の可能性があり得る。ＴｅｘｔＴｒａｎｓｆｏｒｍａｔｉｏｎは、ＩｍａｇｅＴｒａｎｓｆｏｒｍａｔｉｏｎと類似するが、テキスト（クレジットカード銀行名など）を生成し得る点で異なる。他にも多数の可能性があり得る。
【０１０４】
このような例示的なＣｕｓｔｏｍＰｒｅｓｅｎｔａｔｉｏｎテンプレートの使用を容易にするために、オペレーティングシステムは、ＳｉｎｇｌｅＶｉｅｗＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎ、ＭｕｌｔｉｐｌｅＶｉｅｗｓＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎ、またはＩｍａｇｅＴｒａｎｓｆｏｒｍａｔｉｏｎによる変換を用いてカスタマイズされたプロンプト（例えば、図４Ｄの４２０）を生成する、以下の例示的なコードのサンプルを用いることができる。
【０１０５】
リモートビュー用のＸＭＬテンプレートを定義する文脈の場合：
<LinearLayout>
<ImageView android:id = " @+id/templateccLogo "/>
<TextView android:id=" @+id/templateCcNumber "/>
<TextView android:id = " @+id/templateExpDate "/>
</LinearLayout>
次いで、リモートビュー用のＸＭＬテンプレートを定義する文脈の場合：
saveBuilder.setCustomPresentation (new CustomPresentation.Builder(presentation)
.addChild (R.id.templateCcNumber,
new SingleViewCharSequenceTransformation.Builder(
ccNumberId, "^.*(＼＼d＼＼d＼＼d＼＼d)$", "...$1")
. build())
.addChild (R.id.templateExpDate,
new MultipleViewsCharSequenceTransformation.Builder()
.addField (ccExpMonthId, "^(＼＼d＼＼d)$", "Exp: $1")
.addField (ccExpYearId, "^(＼＼d＼＼d)$", "/$1")
.build())
.addChild (R.id.templateccLogo, new ImageTransformation.Builder(ccNumberId)
.addOption ("^4815.*$", R.drawable.visa)
.addOption ("^4816.*$", R.drawable.master_card)
.build())
.build());
さらに他の一局面において、ある例では、ＭｕｌｔｉｐｌｅＶｉｅｗｓＣｈａｒＳｅｑｕｅｎｃｅＴｒａｎｓｆｏｒｍａｔｉｏｎをＳｔｒｉｎｇＴｒａｎｓｆｏｒｍａｔｉｏｎで置換してもよい。これは、以下の例示的なコードのサンプルによって実現可能である。
new StringFormatTransformation.Builder("Exp: %s/%s")
.addArg(ccExpMonthId, "^(＼＼d＼＼d)$")
.addArg(ccExpYearId, "^(＼＼d＼＼d)$")
.build())
さらなる一局面では、このような手法は、特定の利点をもたらすことができる（例えば、オペレーティングシステムによるテンプレートの可読性を高めることができる）。このような例は他にも可能である。
【０１０６】
別の例示的な態様の例示的なドキュメンテーションおよびサンプルコードセグメントを以下に提示する。
CharSequenceTransformation:
/**
* Replaces a {@link TextView} child of a {@link CustomDescription} with the contents of one or
* more regular expressions (regexs).
*
* <p>When it contains more than one field, the fields that match their regex are added to the
* overall transformation result.
*
* <p>For example, a transformation to mask a credit card number contained in just one field would
* be:
*
* <pre class="prettyprint">
* new CharSequenceTransformation
*     .Builder(ccNumberId, Pattern.compile("^.*(＼＼d＼＼d＼＼d＼＼d)$"), "...$1")
*     .build();
* </pre>
*
* <p>But a transformation that generates a {@code Exp: MM / YYYY} credit expiration date from two
* fields (month and year) would be:
*
* <pre class="prettyprint">
* new CharSequenceTransformation
*   .Builder(ccExpMonthId, Pattern.compile("^(＼＼d＼＼d)$"), "Exp: $1")
*   .addField(ccExpYearId, Pattern.compile("^(＼＼d＼＼d＼＼d＼＼d)$"), " / $1");
* </pre>
*/
CustomDescription:
/**
* Defines a custom description for the Save UI affordance.
*
* <p>This is useful when the autofill service needs to show a detailed view of what would be saved;
* for example, when the screen contains a credit card, it could display a logo of the credit card
* bank, the last four digits of the credit card number, and its expiration number.
*
* <p>A custom description is made of 2 parts:
* <ul>
*   <li>A {@link RemoteViews presentation template} containing children views.
*   <li>{@link Transformation Transformations} to populate the children views.
* </ul>
*
* <p>For the credit card example mentioned above, the (simplified) template would be:
*
* <pre class="prettyprint">
* &lt;LinearLayout&gt;
*   &lt;ImageView android:id="@+id/templateccLogo"/&gt;
*   &lt;TextView android:id="@+id/templateCcNumber"/&gt;
*   &lt;TextView android:id="@+id/templateExpDate"/&gt;
* &lt;/LinearLayout&gt;
* </pre>
*
* <p>Which in code translates to:
*
* <pre class="prettyprint">
*   CustomDescription.Builder buider = new Builder(new RemoteViews(pgkName, R.layout.cc_template);
* </pre>
*
* <p>Then the value of each of the 3 children would be changed at runtime based on the the value of
* the screen fields and the {@link Transformation Transformations}:
*
* <pre class="prettyprint">
* // Image child - different logo for each bank, based on credit card prefix
* builder.addChild(R.id.templateccLogo,
*   new ImageTransformation.Builder(ccNumberId)
*     .addOption(Pattern.compile("^4815.*$"), R.drawable.ic_credit_card_logo1)
*     .addOption(Pattern.compile("^1623.*$"), R.drawable.ic_credit_card_logo2)
*     .addOption(Pattern.compile("^42.*$"), R.drawable.ic_credit_card_logo3)
*     .build();
* // Masked credit card number (as .....LAST_4_DIGITS)
* builder.addChild(R.id.templateCcNumber, new CharSequenceTransformation
*     .Builder(ccNumberId, Pattern.compile("^.*(＼＼d＼＼d＼＼d＼＼d)$"), "...$1")
*     .build();
* // Expiration date as MM / YYYY:
* builder.addChild(R.id.templateExpDate, new CharSequenceTransformation
*     .Builder(ccExpMonthId, Pattern.compile("^(＼＼d＼＼d)$"), "Exp: $1")
*     .addField(ccExpYearId, Pattern.compile("^(＼＼d＼＼d)$"), "/$1")
*     .build();
* </pre>
*
* <p>See {@link ImageTransformation}, {@link CharSequenceTransformation} for more info about these
* transformations.
*/
ImageTransformation:
/**
* Replaces the content of a child {@link ImageView} of a
* {@link RemoteViews presentation template} with the first image that matches a regular expression
* (regex).
*
* <p>Typically used to display credit card logos. Example:
*
* <pre class="prettyprint">
*   new ImageTransformation.Builder(ccNumberId, Pattern.compile("^4815.*$"),
*                                   R.drawable.ic_credit_card_logo1, "Brand 1")
*     .addOption(Pattern.compile("^1623.*$"), R.drawable.ic_credit_card_logo2, "Brand 2")
*     .addOption(Pattern.compile("^42.*$"), R.drawable.ic_credit_card_logo3, "Brand 3")
*     .build();
* </pre>
*
* <p>There is no imposed limit in the number of options, but keep in mind that regexs are
* expensive to evaluate, so use the minimum number of regexs and add the most common first
* (for example, if this is a tranformation for a credit card logo and the most common credit card
* issuers are banks X and Y, add the regexes that resolves these 2 banks first).
*/
Validator:
/**
* Sets an object used to validate the user input - if the input is not valid, the
* autofill save UI is not shown.
*
* <p>Typically used to validate credit card numbers. Examples:
*
* <p>Validator for a credit number that must have exactly 16 digits:
*
* <pre class="prettyprint">
* Validator validator = new RegexValidator(ccNumberId, Pattern.compile(""^＼＼d{16}$"))
* </pre>
*
* <p>Validator for a credit number that must pass a Luhn checksum and either have
* 16 digits, or 15 digits starting with 108:
*
* <pre class="prettyprint">
* import android.service.autofill.Validators;
*
* Validator validator =
*   and(
*     new LuhnChecksumValidator(ccNumberId),
*     or(
*       new RegexValidator(ccNumberId, Pattern.compile(""^＼＼d{16}$")),
*       new RegexValidator(ccNumberId, Pattern.compile(""^108＼＼d{12}$"))
*     )
*   );
* </pre>
*
* <p><b>Note:</b> the example above is just for illustrative purposes; the same validator
* could be created using a single regex for the {@code OR} part:
*
* <pre class="prettyprint">
* Validator validator =
*   and(
*     new LuhnChecksumValidator(ccNumberId),
*     new RegexValidator(ccNumberId, Pattern.compile(""^(＼＼d{16}|108＼＼d{12})$"))
*   );
* </pre>
*
* <p>Validator for a credit number contained in just 4 fields and that must have exactly
* 4 digits on each field:
*
* <pre class="prettyprint">
* import android.service.autofill.Validators;
*
* Validator validator =
*   and(
*     new RegexValidator(ccNumberId1, Pattern.compile(""^＼＼d{4}$")),
*     new RegexValidator(ccNumberId2, Pattern.compile(""^＼＼d{4}$")),
*     new RegexValidator(ccNumberId3, Pattern.compile(""^＼＼d{4}$")),
*     new RegexValidator(ccNumberId4, Pattern.compile(""^＼＼d{4}$"))
*   );
* </pre>
*  
* @param validator an implementation provided by the Android System.
* @return this builder.
*
* @throws IllegalArgumentException if {@code validator} is not a class provided
* by the Android System.
*
ＶＩ．コンピューティングデバイス
次に、図５を参照すると、図５は例示的な実施形態に従うコンピューティングデバイス５００の機能ブロック図である。特に、図５に示すコンピューティングデバイス５００は、前述のサーバデバイス１０８および／または１１０、および／またはリモートプロバイダ１１２および／または１１４、ユーザ機器１０４ａ〜１０４ｅのうちのいずれか、方法２００、ユーザ機器３０２、および／またはユーザ機器４０２の少なくとも１つの機能を行なうように構成されてもよい。
【０１０７】
コンピューティングデバイス５００は、ユーザインターフェイスモジュール５０１、ネットワーク通信インターフェイスモジュール５０２、１つ以上のプロセッサ５０３、データストレージ５０４、および１つ以上のセンサ５２０を含んでもよく、これらのうちのすべてがシステムバス、ネットワーク、または他の接続メカニズム５０５を介して互いにリンクされてもよい。
【０１０８】
ユーザインターフェイスモジュール５０１は、外部のユーザ入力／出力デバイスとの間でデータを送信および／または受信するように動作可能であってもよい。例えば、ユーザインターフェイスモジュール５０１は、キーボード、キーパッド、タッチスクリーン、存在感知ディスプレイ、コンピュータマウス、トラックボール、ジョイスティック、カメラ、音声認識モジュールおよび／または他の同様のデバイスなどのユーザ入力デバイスとの間で、データを送信および／または受信するように構成されてもよい。ユーザインターフェイスモジュール５０１はさらに、１つ以上の陰極線管（ＣＲＴ）、液晶ディスプレイ、発光ダイオード（ＬＥＤ）、デジタル光処理（ＤＬＰ）技術を使用するディスプレイ、プリンタ、電球、および／または他の同様のデバイスなどの、現在公知であるかまたはこれから開発されるユーザ表示デバイスに出力を提供するように構成されてもよい。また、ユーザインターフェイスモジュール５０１は、スピーカー、スピーカージャック、音声出力ポート、音声出力デバイス、イヤホン、および／または他の同様のデバイスなどで、可聴出力を生成するように構成されてもよい。ユーザインターフェイスモジュール５０１はさらに、コンピューティングデバイス５００におけるタッチおよび／または物理的接触によって検出可能な振動および／または他の出力などの触覚出力を生成可能な１つ以上の触覚デバイスを備えて構成されてもよい。ある実施形態では、ユーザインターフェイスモジュール５０１を用いて、コンピューティングデバイス５００を利用するためのＧＵＩを提供してもよい。
【０１０９】
ネットワーク通信インターフェイスモジュール５０２は、ネットワークを介して通信するように構成可能な１つ以上の無線インターフェイス５０７および／または１つ以上の有線インターフェイス５０８を含んでもよい。無線インターフェイス５０７は、１つ以上の無線送信機、受信機、および／または、送受信機（例えば、ブルートゥース（登録商標）送受信機、Ｚｉｇｂｅｅ（登録商標）送受信機、Ｗｉ−Ｆｉ送受信機、ＷｉＭＡＸ（登録商標）送受信機および／もしくは無線ネットワークを介して通信するように構成可能な他の同様のタイプの無線送受信機など）を含んでもよい。有線インターフェイス５０８は、１つ以上の有線送信機、受信機、および／または、送受信機（例えば、イーサーネット（登録商標）送受信機、ユニバーサルシリアルバス（ＵＳＢ）送受信機、あるいは、ツイストペアワイヤー、同軸ケーブル、光ファイバーリンクもしくは有線ネットワークへの同様の物理接続を介して通信するように構成可能な同様の送受信機など）を含んでもよい。
【０１１０】
ある実施形態では、ネットワーク通信インターフェイスモジュール５０２は、信頼性があり、セキュアで、および／または認証された通信を提供するように構成され得る。各通信について、信頼性のある通信（すなわち保証されたメッセージの送達）を保証するための情報は、場合によってはメッセージヘッダおよび／またはフッタの一部（たとえばパケット／メッセージシーケンシング情報、カプセル化ヘッダおよび／またはフッタ、サイズ／時間情報、ならびに送信照合情報（例えば、ＣＲＣおよび／またはパリティーチェック値など））として提供され得る。通信は、１つ以上の暗号プロトコルおよび／またはアルゴリズムを使用して、セキュリティ保護（たとえばエンコードもしくは暗号化）することが可能であり、および／または、復号化／デコードすることが可能である。当該暗号プロトコルおよび／またはアルゴリズムの例としては、ＤＥＳ、ＡＥＳ、ＲＳＡ、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ、および／またはＤＳＡなどがあるが、これらに限定されない。通信をセキュリティ保護する（その後復号化／デコードする）ために、他の暗号プロトコルおよび／またはアルゴリズムを同様に使用してもよいし、上記で列挙したものに加えて使用してもよい。
【０１１１】
１つ以上のプロセッサ５０３は、１つ以上の汎用プロセッサおよび／または１つ以上の特殊目的プロセッサ（たとえばデジタルシグナルプロセッサ、グラフィックス・プロセッシング・ユニット、特定用途向け集積回路など）を含んでもよい。１つ以上のプロセッサ５０３は、データストレージ５０４に含まれるコンピュータ可読プログラム命令５０６、および／または本明細書に記載の他の命令を実行するように構成されてもよい。
【０１１２】
データストレージ５０４は、１つ以上のプロセッサ５０３のうちの少なくとも１つによって読み出しおよび／またはアクセスすることのできる１つ以上のコンピュータ可読記憶媒体を含んでもよい。この１つ以上のコンピュータ可読記憶媒体は、光学、磁気、有機または他のメモリもしくはディスクストレージなどの揮発性および／または不揮発性ストレージコンポーネントを含んでもよい。これらのストレージコンポーネントは、全体的または部分的に、１つ以上のプロセッサ５０３のうちの少なくとも１つと統合されてもよい。ある実施形態では、データストレージ５０４は、単一の物理デバイス（たとえば１つの光学、磁気、有機または他のメモリまたはディスク記憶装置）を使用して実現され得る。一方、他の実施形態では、データストレージ５０４は２つ以上の物理デバイスを使用して実現され得る。
【０１１３】
データストレージ５０４は、コンピュータ可読プログラム命令５０６と、場合によってはその他のデータとを含んでもよい。ある実施形態では、データストレージ５０４は、本明細書に記載の方法、シナリオ、および技術のうちの少なくとも一部、および／または、本明細書に記載のデバイスおよびネットワークの機能のうちの少なくとも一部を行なうことが必要なストレージをさらに含んでもよい。
【０１１４】
ある実施形態では、コンピューティングデバイス５００は、１つ以上のセンサ５２０を含んでもよい。センサ５２０は、コンピューティングデバイス５００の環境での条件を測定し、その環境に関するデータを提供するように構成されてもよい。例えば、センサ５２０は、次のうちの１つ以上を含んでもよい。
【０１１５】
（ｉ）他の物体および／またはデバイスを識別する識別センサ。例えば、ＲＦＩＤリーダ、近接センサ、１次元バーコードリーダ、２次元バーコード（例えば、クイックレスポンス（ＱＲ）コード）リーダ、およびレーザトラッカーなどがあるが、これらに限定されない。識別センサは、ＲＦＩＤタグ、バーコード、ＱＲコード（登録商標）、および／または、読取可能に構成された他のデバイスおよび／または物体などの識別子を読み取り、少なくとも識別情報を提供するように構成されてもよい。
【０１１６】
（ｉｉ）コンピューティングデバイス５００の位置および／または動きを測定するセンサ。例えば、傾斜センサ、ジャイロスコープ、加速度計、ドップラーセンサ、グローバル・ポジショニング・システム（ＧＰＳ）デバイス、ソーナーセンサ、レーダーデバイス、レーザー変位センサ、およびコンパスなどがあるが、これらに限定されない。
【０１１７】
（ｉｉｉ）コンピューティングデバイス５００の環境を示すデータを取得する環境センサ。例えば、赤外線センサ、光学センサ、光センサ、カメラ、バイオセンサ、生体センサ、容量センサ、タッチセンサ、温度センサ、無線センサ、ラジオセンサ、動作センサ、マイクロフォン、音センサ、超音波センサ、および／または煙センサなどがあるが、これらに限定されない。
【０１１８】
（ｉｖ）コンピューティングデバイス５００に関して作用する１つ以上の力を測定する力センサ（例えば、慣性力および／または重力）。例えば、１つ以上の寸法における力、トルク、グラウンドフォース、摩擦を測定する１つ以上のセンサ、および／または、ＺＭＰのＺＭＰおよび／もしくは位置を特定するゼロモーメントポイント（ＺＭＰ）センサなどがあるが、これらに限定されない。
【０１１９】
他にも多数のセンサ５２０の例があり得る。
本開示は、本適用例で記載された特定の実施形態に限定すべきではない。これらの特定の実施形態は、さまざまな局面の説明を目的としたものである。当業者には明らかであるように、本開示の精神および範囲から逸脱せずに、多数の変更および変形が可能である。本開示で列挙したものに加えて、本開示の範囲内で機能的に均等な方法および装置が、上述の記載から当業者には明らかであろう。そのような変更例および変形例も、添付の特許請求の範囲内であることが意図される。
【０１２０】
上述の詳細な説明では、添付の図面を参照して、開示されたシステム、デバイス、および方法のさまざまな特徴および機能を記載している。これらの図面において、文脈が他の態様を示していなければ、通常、同様の符号は同様の構成要素を特定する。詳細な説明に記載された例示的な実施形態、図面、および特許請求の範囲は、限定的であるよう意図されるものではない。本明細書で提示された主題の精神または範囲から逸脱せずに、他の実施形態を利用し、他の変更を行なうことも可能である。本明細書で概括的に記載し、図面に示した本開示の局面は、種々の異なる構成で配置、置換、合体、分離、および設計され得ることが容易に理解されるであろう。これらはすべて、本明細書で明示的に企図されるものである。
【０１２１】
図面に示されるとともに本明細書で説明されたラダー図、シナリオ、およびフローチャートのうちのいずれかまたはすべてに関して、各ブロックおよび／または通信は、例示的な実施形態に係る情報の処理および／または情報の送信を表わす場合がある。これらの例示的な実施形態の範囲内には、代替的な実施形態も含まれる。代替的な実施形態においては、例えば、ブロック、送信、通信、要求、応答、および／またはメッセージとして記載された機能が、関与する機能に応じて、図示または説明されたものとは異なる順序で実行されてもよい（実質的に同時、または逆の順序で実行されることを含む）。さらに、本明細書で説明されたラダー図、シナリオ、およびフローチャートのうちのいずれかで用いるブロックおよび／または機能は、より多くてもよいし、より少なくてもよい。また、これらのラダー図、シナリオ、およびフローチャートは、部分的または全体的に互いに組み合わせることも可能である。
【０１２２】
情報の処理を表わすブロックは、本明細書に記載した方法または手法の特定のロジック機能を行なうように構成された回路に対応してもよい。代替的またはさらには、情報の処理を表わすブロックは、モジュール、セグメント、またはプログラムコード（関連データを含む）の一部に対応してもよい。プログラムコードは、上記方法または手法における特定のロジック機能または動作を実現するためにプロセッサによって実行され得る１つ以上の命令を含んでもよい。プログラムコードおよび／または関連データは、ディスク、ハードドライブ、または他の記憶媒体を含む記憶装置など、任意の種類のコンピュータ可読媒体に格納されてもよい。
【０１２３】
コンピュータ可読媒体は、非一時的なコンピュータ可読媒体、例えば、レジスタメモリ、プロセッサキャッシュ、およびランダムアクセスメモリ（ＲＡＭ）といった、短期間データを格納する非一時的なコンピュータ可読媒体などを含んでもよい。コンピュータ可読媒体は、より長い期間プログラムコードおよび／またはデータを格納する非一時的なコンピュータ可読媒体、例えば、読み取り専用メモリ（ＲＯＭ）、光学または磁気ディスク、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）といった二次的または永続的な長期記憶装置などを含んでもよい。コンピュータ可読媒体は、他の如何なる揮発性または非揮発性の記憶システムであってもよい。コンピュータ可読媒体は、例えば、コンピュータ可読記憶媒体、すなわち有形の記憶装置とみなしてもよい。
【０１２４】
さらに、１つ以上の情報送信を表わすブロックは、同一の物理デバイスのソフトウェアモジュール間および／またはハードウェアモジュール間の情報送信に対応してもよい。一方、他の情報送信は、異なる物理デバイスのソフトウェアモジュール間および／またはハードウェアモジュール間で行なわれてもよい。
【０１２５】
本明細書においてさまざまな局面および実施形態を開示したが、当業者には他の局面および実施形態も明らかであろう。本明細書において開示されたさまざまな局面および実施形態は説明の目的で提示されたものであり、限定するように意図されたものではない。その真の範囲は、以下の特許請求の範囲によって示される。
【図１】
0006880240.tif 000002
【図２】
0006880240.tif 000003
【図３Ａ】
0006880240.tif 000004
【図３Ｂ】
0006880240.tif 000005
【図３Ｃ】
0006880240.tif 000006
【図４Ａ】
0006880240.tif 000007
【図４Ｂ】
0006880240.tif 000008
【図４Ｃ】
0006880240.tif 000009
【図４Ｄ】
0006880240.tif 000010
【図５】
0006880240.tif 000011