(58)【調査した分野】(Int.Cl.,DB名)
前記難読化ルーティングデータは、前記通知サービスによって解釈可能なルーティングデータを搬送するようにフォーマットされたトークンを備え、前記通信チャネルで前記トークンに関連づけられて送信された通知を宛てる、請求項1に記載のコンピュータプログラム。
前記通知サービスはさらに、前記難読化ルーティングデータを暗号化し、デジタル署名することによって、前記通信チャネルをセキュアにするステップを含む動作を実行するように構成される、請求項1に記載のコンピュータプログラム。
前記通信チャネルを確立するステップは、前記通知サービスと前記クライアントアプリケーションとの間の永続的なグローバルに一意のアドレスとしてチャネル識別子を割り当てるステップを含む、請求項1に記載のコンピュータプログラム。
前記難読化ルーティングデータのフォーマットおよびコンテンツは、前記通知サービスによって制御され、前記クライアントアプリケーションと前記アプリケーションサービスの両方に分かりにくくされる、請求項1に記載のコンピュータプログラム。
前記難読化ルーティングデータを生成するステップは、前記クライアントアプリケーションからの要求に応答して、クライアントでキャッシュされ、前記要求において提供された状態データに基づいて、前記通信チャネルのチャネルハンドルを構成するステップを含む、請求項1に記載のコンピュータプログラム。
【発明を実施するための形態】
【0015】
概要
クライアントアプリケーションにメッセージを提供することを第三者に可能にさせるステートレスアプリケーション通知が説明される。通信チャネルが、通知サービスとアプリケーションとの間で確立されることができる。要求に応じて通知サービスは、そのチャネルのための難読化ルーティングデータを生成することができ、難読化ルーティングデータは、チャネルハンドルまたはトークンの形態であることができる。ルーティングデータは、ルーティングデータのコンテンツとフォーマットを第三者に分かりにくくし、改ざんを防止するために、暗号化およびデジタル署名されることができる。難読化ルーティングデータを所持するアプリケーションサービスは、データと共に通知をパッケージ化し、そのパッケージを送達のために通知サービスに送信することができる。アプリケーションサービスは、難読化ルーティングデータによって符号化されたチャネルの詳細を知らずに、そのようにする。難読化ルーティングデータを生成する通知サービスは、データを解読および解釈し、アプリケーションサービスに代わって適切なエンドポイントアプリケーションにチャネルで通知を送達することができる。
【0016】
以下の説明では、「動作環境」と題するセクションが提供され、1つ以上の実施形態が用いられ得る1つの環境を説明する。これに続き、「ステートレスアプリケーション通知の例」と題するセクションが、1つ以上の実施形態に係るステートレスアプリケーション通知の例示的な詳細を説明する。次に、「例示的な方法」と題するセクションが、1つ以上の実施形態に係るステートレスアプリケーション通知のための例示的な技法を説明する。最後に、「例示的なシステム」と題するセクションが、1つ以上の実施形態を実現するために利用され得る例示的なコンピューティングシステムおよびデバイスを説明する。
【0017】
動作環境
図1は、1つ以上の実施形態に係る動作環境を、一般的に100で示す。環境100は、1つ以上のプロセッサ104と、1つ以上のコンピュータ可読媒体106と、コンピュータ可読媒体上に存在し、プロセッサによって実行可能な、1つ以上のアプリケーション108とオペレーティングシステム110と、を有するクライアント102を含む。クライアント102は、限定ではなく例として、デスクトップコンピュータ、ポータブルコンピュータ、タブレットまたはスレートデバイス、ハンドヘルドコンピュータ、たとえば、携帯情報端末(PDA)、携帯電話、セットトップボックス等といった、任意の適切なコンピューティングシステムおよび/またはデバイスとして具体化され得る。クライアント102を含むさまざまなシステムおよび/またはデバイスを表し得るコンピューティングシステムの一例が、
図7に示され、以下に説明される。
【0018】
コンピュータ可読媒体は、限定ではなく例として、コンピューティングデバイスに典型的に関連づけられる、すべての形態の揮発性および不揮発性メモリおよび/または記憶媒体を含み得る。そのような媒体は、ROM、RAM、フラッシュメモリ、ハードディスク、取り外し可能な媒体等を含み得る。コンピュータ可読媒体は、「コンピュータ可読記憶媒体」と「通信媒体」の両方を含むことができ、その例は、
図7の例示的なコンピューティングシステムの説明中に見出され得る。
【0019】
加えて、クライアント102は、上述および後述されるようにステートレス通知を容易にするために用いられ得る、チャネル状態データ111を含む。チャネル状態データ111は、クライアントのアプリケーション108のための通知を提供するためにクライアント102と通知サービスとの間で確立され得る、送達経路または「チャネル」に関連する。チャネル状態データ111は、数例を挙げると、1つ以上のチャネルに関連する、識別子、ルーティングデータ、トークン、認証データ、および満了データを含み得る。クライアント102は、サーバ側でのステートレスな処理を可能にするために、それら自身のチャネル状態データ111をキャッシュし得る。
【0020】
図1にさらに示されるように、クライアント102は、上述および後述のごとく、さまざまなリソース(たとえば、コンテンツおよびサービス)を提供する1つ以上のサービスプロバイダ114と、インターネットのようなネットワーク112を介して通信可能に結合され得る。例として、クライアント102は、サービスプロバイダ114とインタラクトし、メッセージを交換して、チャネルを作成し、そのチャネルを用いて通知を取得し得る。
【0021】
サービスプロバイダ114は各々、1つ以上のプロセッサ116および1つ以上のコンピュータ可読媒体118を有するものとして示されている。サービスプロバイダ114はさらに、リソースマネジャ120を含むものとして示されている。リソースマネジャ120は、ネットワーク112を介して利用可能にされ得るさまざまなリソース122を管理するためにサービスプロバイダ114によって動作可能な機能を表す。たとえば、さまざまなリソース122は、クライアント102による出力のためにネットワークにわたって通信される、ウェブページまたは他のユーザインターフェースを介して提供され得る。リソースマネジャ120は、リソース122へのアクセス、リソース122のパフォーマンス、リソース122を提供するためのユーザインターフェースまたはデータの構成等を管理することができる。
【0022】
サービスプロバイダ114は、リソース122にアクセスするためにクライアント102がナビゲートし得る、1つ以上のウェブサーバおよび/またはサイトを提供することができる。リソース122は、典型的には1つ以上のプロバイダによりネットワークにわたって利用可能にされるサービスおよび/またはコンテンツの任意の適切な組み合わせを含み得る。サービスのいくつかの例は、検索サービス、eメールを送受信するためのeメールサービス、クライアント102間でインスタントメッセージを提供するためのインスタントメッセージングサービス、および共通の関心とアクティビティを共有するユーザのグループ間の繋がりと対話を容易にするためのソーシャルネットワーキングサービスを含むが、これらに限定されない。コンテンツは、テキスト、映像、広告、音声、マルチメディアストリーム、動画、画像、ウェブページ、ウェブアプリケーション、デバイスアプリケーション、ブラウザによる表示のためのコンテンツ、または他のデバイスアプリケーション等のさまざまな組み合わせを含み得る。
【0023】
加えて、サービスプロバイダ114は、クライアント102と他のエンティティとの間の通知126の通信を管理するように動作可能な機能を表す、通知サービス124を含むことができ、またはそうでなければ利用することができる。通知サービス124は、単独で、および/または、他のサービスと共に、動作して、1つ以上の異なるタイプのメッセージングのための機能を提供することができる。限定ではなく例として、通知サービスによって提供される複数の異なるタイプのメッセージングは、eメール、テキストメッセージ、アプリケーションコンテンツにおけるアプリケーションおよび/またはオペレーティングシステム通知、ソーシャルネットワーキングの通知および招待、インスタントメッセージング、ボイスメッセージ、ピアツーピアメッセージング等を含み得る。
【0024】
通知サービス124はまた、本明細書に説明されるステートレスアプリケーション通知のための技法を実現するように動作可能である。特に、通知サービス124は、1つ以上のアプリケーションサービス128に代わってクライアント102への通知126の通信を容易にするために実現され得る。通知126は、宣伝、アプリケーションのアップデート、警告、アプリ内のフィーチャー等といった、アプリケーションサービスに対応するアプリケーション108に宛てられたメッセージとして構成されることができる。通知サービス124は、クライアント102への通知126のルーティングおよび送達を担う。クライアント102によってキャッシュされたチャネル状態データ111は、必要に応じて通知サービス124によりオンデマンドで取得されることができる。しかしながら、通知サービス124は、通知要求を備えた難読化ルーティングデータを使用して、サーバ側でチャネルおよび通知のための「ステートレス」な処理を実行することができる。通知サービス124は、クライアントが現在接続中である場合、クライアントに関する状態情報を一時的に格納することができる。状態データは、現在接続中のクライアントの識別情報、どの種類/タイプの通知が許可されるかまたはブロックされるかについての情報等を含み得る。しかしながら、クライアントが接続を切ると、一時的な状態データは通知サービス124によって破棄されることができるので、処理は「ステートレス」であると考えられる。
【0025】
以下においてより詳細に説明するように、通知126は、クライアント102とサービスプロバイダ114との間で確立されたチャネルで送達されることができる。通知は、通知サービス124を通じて提供されるチャネルハンドルまたはトークンといった難読化ルーティングデータと通知とを関連づけることにより、チャネルを介して送信されることができる。チャネルを介して通知を提供する1つの例示的なアプローチにおいて、通知サービス124は、チャネルメタデータ132を搬送するように構成されたトークン130を用い得る。チャネルメタデータ132は、要求の処理、チャネルの確立、通知のルーティング等のために、通知サービス124によって「インプロセス」で使用されるデータを表し得る。これは、クライアント102から必要に応じて取得される、さまざまなチャネル状態データ111を含み得る。しかしながら、通知サービス124が必ずしもクライアント102に代わってチャネルメタデータ132をキャッシュするわけではない。
【0026】
チャネルに関連するさまざまなデータが、チャネルID、チャネルハンドル、およびルーティングデータを含む、チャネルメタデータ132の一部として含まれ得る。チャネルIDは、チャネルを一意に識別し、チャネルIDが第三者にさらされないように維持される。しかしながら、第三者は、チャネルのために生成され、トークンで提供されたチャネルハンドルを用いることができ、またはそうでなければ、ハンドルを解釈せずに、または対応するチャネルIDを知らずに、エンドポイントに通知サービス124を通じてメッセージを宛てることができる。特に、チャネルハンドルは、チャネルの特性を分かりにくくするためにチャネルIDの抽象化として導出され得る。チャネル、チャネルハンドル、およびステートレスアプリケーション通知のこれらの態様および他の態様についての詳細が、以下の図面に関連して提供される。
【0027】
例示的な動作環境が説明されたので、ここでは、1つ以上の実施形態に係るいくつかのステートレスアプリケーション通知の例の説明を考慮する。
【0028】
ステートレスアプリケーション通知の例
このセクションは、1つ以上の実施形態に係るステートレスアプリケーション通知についての例示的な詳細を説明する。以下の説明ではまず、「通知送達のためのチャネル」と題するサブセクションが、アプリケーション通知を容易にするために確立され得るチャネルを説明する。次に、「ステートレストークン」と題するサブセクションが、チャネルを使用して適切なエンドポイントに通知をルーティングするために使用されるルーティングデータを搬送するためにいくつかの実施形態において用いられ得る、トークンについての詳細を提供する。以下において、ステートレスアプリケーション通知を実現するための、サービスプロバイダ114、クライアント102、およびアプリケーションサービス128間の例示的なインタラクションが、
図2および
図3に示す例示的な動作シナリオに関連して説明される。
【0029】
通知送達のためのチャネル
上で紹介したように、通知は、クライアント102とサービスプロバイダ114との間で確立されたチャネルで送達されることができる。一般的に、チャネルは、アプリケーションサービス128から特定のエンドポイントまでの通知の送達経路の表現(たとえば、アドレス)である。本明細書において使用されるエンドポイントは、特定のユーザ、デバイス、および/またはアプリケーションの一意の組み合わせに対応する。すなわち、チャネルは、特定のクライアント102にインストールされ、クライアント102の特定のユーザによって使用される、特定のアプリケーション108のために確立され関連づけられた通信経路と考えられ得る。チャネルは、グローバルに一意のアドレスがエンドポイントアプリケーションに割り当てられ得る、メカニズムである。
【0030】
各チャネルは、対応するチャネル識別子(ID)を有し得る。チャネルIDは、対応するエンドポイントまでの送達経路を一意に識別する永続的な識別子である。チャネルをセキュアにし、アタッカーがチャネルをハイジャックまたは誤用することを防止するために、チャネルIDは分かりにくい状態で保持され得る。少なくともいくつかの実施形態において、チャネルIDは、クライアント102によってセキュアに維持され、第三者にさらされない。たとえば、1つ以上のアプリケーション108のためのチャネルIDは、オペレーティングシステム110の内部のパラメータ/オブジェクトとして構成されることができる。オペレーティングシステム110は、通知サービス128とのインタラクションにおいてチャネルIDを利用することができるが、そうでなければチャネルIDを非公開の状態で保持する。
【0031】
したがって、チャネルでの通知を可能にするために、チャネルIDそのものをさらすおよび/または使用する代わりに第三者に発行されることができるチャネルハンドルが作成される。たとえば、アプリケーションのインストールまたは実行時に、アプリケーションのために通知がアクティブにされた場合、アプリケーションに固有のコンテンツをアップデートするために使用され得るチャネルが確立されることができる。1つのアプローチにおいて、アプリケーションは、オペレーティングシステム108を通じてチャネルハンドルの発行を要求することができる。たとえば、要求は、ローカルアプリケーションプログラミングインターフェース(API)を通じて行われ得る。オペレーティングシステムが次に、通知サービス124とインタラクトして、通知サービス124にチャネルハンドルを発行させ、チャネルハンドルをアプリケーション108に返送させる。通知サービス124はまた、既存のチャネルがない場合、新たなチャネルを確立することができる。アプリケーション108は次に、アプリケーションサービス128にチャネルハンドルを供給して、アプリケーションサービス128からの対応する通知を可能にすることができる。
【0032】
より具体的には、チャネルハンドルが、アプリケーションおよび第三者への供給のために、チャネルIDの抽象化として導出されることができる。チャネルハンドルは、クライアントからの要求に応答して通知サービス124によって構成されることができる。クライアントからの要求は、対応するチャネルハンドルを作成するために通知サービス124によって使用される、チャネルIDおよび他のクライアント状態データ111を含むように構成され得る。ハンドルは、チャネルの特性を難読化させ、ハンドルの変更を防止するために暗号化されることができる。デジタル署名が、変更または改ざんを防止するために使用されることもできる。通知サービス124は、チャネルハンドルの作成を担い、また、チャネルハンドルのフォーマットおよびコンテンツを制御する。したがって、ハンドルのフォーマットおよびコンテンツは、クライアント102および/または第三者アプリケーションサービス128の両方に分かりにくくされることができる。このように、チャネルハンドルは、ハンドルが通知サービス124には解釈可能で他の当事者には解釈可能でないように、構成されることができる。
【0033】
チャネルハンドルは、任意の適切な手法でフォーマットされることができる。一般的に、チャネルハンドルは、エンドポイントアプリケーションまでの経路またはアドレスを表現するように構成される。このように、チャネルハンドルは、チャネルのためのさまざまなルーティングデータを符号化することができる。限定ではなく例として、通知サービス124は、特定のアプリケーション、クライアントデバイス、およびクライアントデバイスのユーザのための識別子の組み合わせを符号化するユニフォーム・リソース・アイデンティファイア(URI)として、チャネルハンドルを作成することができる。より一般的には、チャネルハンドルは、通知を識別し、対応するエンドポイントにルーティングするのに十分な、ルーティングデータの任意の組み合わせを表現し得る。ハンドルは、基礎をなすチャネルIDに基づいて作成されることができるので、通知サービス124は、ハンドルを解釈し、送信された通知をそのハンドルを使用して適切なチャネルで対応するエンドポイントに送達することができる。
【0034】
複数のチャネルハンドルが特定のチャネルIDのために発行されることができる。したがって、満了したまたは危殆化されたチャネルハンドルは、基礎をなすチャネルIDに影響せずに無効化され得る。チャネルハンドルはまた、チャネルハンドルを満了時間に関連づけることによって、限られた生存期間を有するように構成されることができる。満了時間の後、チャネルハンドルはもはや通知を送達するために使用されることはできない。しかしながら、アプリケーションは、同一のチャネルで新たなチャネルハンドルの発行を要求することができる。チャネルハンドルはまた、通知の送達を絶え間なくチャネルに提供するために、満了に先立って更新されることができる。チャネルハンドルが更新された場合、通知サービス124は、同一のチャネルで以前のハンドルの置き換えとして使用され得る新たなハンドルを提供する。複数のチャネルハンドルが同一の時間に、あるチャネルのためにアクティブであることができる。ハンドルの更新についてのさらなる詳細は、以下の例示的な方法に関連して説明される。
【0035】
チャネルそのものは、無期限に開かれたままであり得、多くのチャネルハンドルが、チャネルの生存期間にわたってチャネルに割り当てられることができる。チャネルは明示的に閉じられ得、その時点で、閉じられたチャネルに関連づけられたいずれのチャネルハンドルも、もはや通知を送信するために使用可能ではないだろう。クライアント102によって維持されたデータは、そのようなチャネルの閉鎖を制御する。チャネルの閉鎖は、クライアント102からチャネルIDを永久的に取り去る問題であるので、そのチャネルIDに関連づけられたハンドルの使用はいずれも、チャネルIDがもはや存在しないのでクライアント102によって拒絶されるだろう。そして、新たなチャネルIDが、特定のアプリケーション108のために確立された新たなチャネルを表現するために発行されるだろう。それに応じて、永続的なチャネルが確立されることができ、それに基づいて、複数の限られた使用チャネルハンドルが、チャネルを攻撃またはそうでなければ危殆化から保護しながらチャネルを介した通信を可能にするために発行されることができる。
【0036】
ステートレストークン
説明したように、クライアント102によってキャッシュされたチャネル状態データ111は、チャネルを使用した通知サービス124によるステートレスな通知の送達を可能にすることができる。クライアントに代わって状態データを格納するのではなく、通知サービス124は、必要に応じて、クライアント102からチャネル状態データ111を「ルックアップする」かまたはそうでなければ提供されることが可能である。したがって、サービスプロバイダ114は、状態データを格納することに関連づけられたコストを回避することができる。したがって、クライアント102は、それら独自のチャネル状態データ111の一部または全部をキャッシュし、必要に応じてサービスプロバイダ114にデータを提供するように構成されることができる。クライアントからまたは別の手法で取得されたチャネルに関連するデータは、
図1においてチャネルメタデータ132として表される。
【0037】
動作中、トークン130は、通知サービス124を通じて暗号化およびデジタル署名されたチャネルメタデータ132を受け渡すために使用されることができる。トークン130を生成するために使用されるチャネルメタデータ132は、必要に応じて通知サービス124によりクライアント102から取得され、サービスプロバイダ114によって実際に永続的に格納され得ない、「インプロセス」データであり得るので、トークン130は、ステートレスであると考えられ得る。
【0038】
トークン130は、さまざまな手法で構成されることができる。一般的に、トークン130は、通知サービス124によって解釈可能な特定のフォーマットで構成されたルーティングデータを含み、トークンを使用した通知を対応するエンドポイントにルーティングするために使用され得る。例として、トークン130は、ペイロードとして選択チャネルメタデータ132と共にパッケージ化されたBLOB(バイナリ・ラージ・オブジェクト)として構成されることができる。さまざまな他のトークンの構成もまた意図される。たとえば、トークン130は、URIまたは他の適切なチャネルハンドルを含むように構成されることができる。トークン130はまた、バージョンデータ、認証データ、満了時間、および/または、トークンの妥当性を制御および検査するために使用される他のセキュリティ情報といった、セキュリティ情報を含むように構成されることができる。セキュリティ情報は、異なるトークンのバージョンのための異なる秘密鍵および/または異なるフォーマットの使用を可能にする。さらに、トークンは、改ざんを防止するために暗号化および/またはデジタル署名されることができる。いくつかの実施形態において、通知サービス124は単独で、トークン130を解読および解釈し、それに応じて、トークンに含まれたチャネルメタデータ132(たとえば、チャネルハンドルまたは他のルーティングデータ)によって特定されたエンドポイントに通知をルーティングすることが可能である。
【0039】
いくつかの実施形態において、トークン130内で暗号化されたチャネルメタデータ132は、直接的にルーティングデータを含むことができる。このルーティングデータは、トークン130において受け渡される自己完結型の情報を使用して、メッセージをステートレスに処理してエンドポイントにルーティングすることを、通知サービス124に可能にさせる。ルーティングデータは例として、バージョンデータ、チャネルハンドル、対応するアプリケーション108、クライアント102、および/または機械のための識別子、デジタル証明書、暗号のために使用される公開鍵等を含み得る。通知サービス124はトークンを発行するので、通知サービス124は、トークンを使用して送信されたメッセージを解釈し、(たとえば、秘密鍵を使用して)トークン130を解読してチャネルメタデータ132を取得し、トークンに含まれたルーティングデータを検査し、適切なチャネルに通知をルーティングすることが可能である。
【0040】
いくつかのケースにおいて、通知のルーティングは、チャネルハンドルおよび/またはトークン130内に含まれる他の適切なルーティングデータそのものを使用して、「インプロセス」で行われることができる。加えて、またはあるいは、通知サービス124は、トークンに含まれる情報に基づいて、適切なエンドポイントを「ルックアップ」することができる。たとえば、通知サービス124は、トークンにおいて提供されたチャネルハンドルをチャネルIDと突き合わせ、メッセージを対応するエンドポイントにルーティングすることができる。このように、上述したトークン130は、通知サービス124がアプリケーションサービス128に代わってアプリケーション108に対しステートレスに通知を送達することができる、1つの例示的なメカニズムを提供する。
【0041】
チャネルおよびステートレストークンの上記説明のコンテキストで、
図2および
図3に示したいくつかの例示的な動作シナリオをここで考慮する。特に、
図2は、ステートレスアプリケーション通知のためにチャネルハンドルを提供するトランザクションの例示的なシーケンスを示す
図200を示す。
図3は、チャネルハンドルを用いて通知サービス124を通じて通知を送達することに含まれるトランザクションの例示的なシーケンスを示す
図300を示す。
【0042】
図2の例を参照すると、例示的なシナリオ200は、チャネルおよびチャネルハンドルの作成に含まれる動作を示す。202で、アプリケーション108は、チャネル要求を開始し得る。たとえば、アプリケーションは、アプリケーションがインストールまたは実行された場合、ユーザが通知をアクティブにした場合、またはそうでなければ、通知を取得するためにアクティブになると、要求を開始し得る。要求によって、コンピューティングデバイス102による処理は、通知を可能にするためにアプリケーション108によって使用され得るチャネルデータを有する適切な応答を提供することになる。いくつかの実施形態において、チャネル要求および応答は、オペレーティングシステム110によって提供されるローカルアプリケーションプログラミングインターフェース(API)によって処理されることができる。
【0043】
要求に応答して、204で、オペレーティングシステム110は、アプリケーションのための既存のチャネルIDをルックアップし得る。チャネルが存在する場合には、既存のチャネルIDが要求と共に提供され得る。オペレーティングシステム110はまた、新たなチャネルハンドルの作成を要求するか否か、または、既存のチャネルハンドルを使用するか否かを、ポリシーに基づいて決定することができる。既存のチャネルがない場合、新たなチャネルを作成する要求が行われ得る。
【0044】
206で、オペレーティングシステム110は、チャネル作成メッセージ中にアプリケーションに固有の情報および/またはチャネルIDをパッケージ化し、チャネル作成メッセージを通知サービス124に送信する。アプリケーション情報は、前述のごとく、チャネルハンドルを作成し、および/または、トークン130を発行するために、通知サービス124によって使用され得る、ルーティングデータおよび/または他のチャネル状態データ111を含み得る。
【0045】
208で、通知サービス124は、適切な場合、チャネル要求に応答して、要求されたチャネルを作成し得る。加えて、またはあるいは、通知サービス124は、チャネルのために新たなチャネルハンドルを作成し得る。いくつかの実施形態において、通知サービス124は、要求におけるチャネルIDによって示されたチャネルに通知を宛てるのに十分な、または、新たに作成されたチャネルのための、チャネルハンドルおよび/またはルーティングデータを含むように、上述したトークン130を形成する。トークン130は、通知サービス124によって暗号化およびデジタル署名されることができる。
【0046】
210で、通知サービス124は、クライアント102のオペレーティングシステム110にチャネルデータを返送する。返送されるチャネルデータは、チャネルハンドル、トークンが用いられる場合にはトークン、難読化ルーティングデータ、および/または、適切な場合には新たなチャネルIDを含み得る。返送されるチャネルデータは、通知をルーティングするための情報を含むので、通知サービス124は、クライアントに代わってデータをキャッシュせずに、要求および対応する情報を破棄することができる。引き続いて起こるチャネルハンドルおよび/またはトークンの処理は、通知メッセージで提供し返されたチャネルデータを使用してステートレスに行われることができる。一般的に、この処理は、提供されたチャネルデータを使用し、チャネルのための追加の状態データをルックアップせずに、「インプロセス」で行われる。しかしながら、通知サービス124は、いくつかのシナリオにおいて、追加のチャネル状態データ111をルックアップするか、またはクライアントに要求し得る。
【0047】
212で、オペレーティングシステム110は、返送されたチャネルデータをキャッシュする。これは、チャネルIDとアプリケーションエンドポイントとの間のマッピングを作成することを含み得る。説明したように、チャネルIDとマッピングは、オペレーティングシステム110により非公開の状態で保持され得る。したがって、オペレーティングシステム110は、チャネルIDを抽出し、チャネルIDとマッピングを秘密の状態で保持することができる。しかしながら、214で、他のチャネルデータは、通知を容易にするためにアプリケーション108に提供され返され得る。これは、チャネルハンドル、ハンドルを有するトークン、および/またはチャネルに関連する他のチャネルデータを、アプリケーション108に提供し返すことを含み得る。
【0048】
チャネルでの通知を可能にするために、216で、アプリケーション108は、適切なチャネルデータを対応するアプリケーションサービス128に提供する。再びこれは、アプリケーションにメッセージをルーティングし返すためにアプリケーションサービス128によって用いられ得る、チャネルハンドル、トークン、および/または他のチャネルデータを含み得る。218で、アプリケーションサービスは、引き続いて起こる使用のためにチャネルデータを格納して、アプリケーションに通知を送達し返すことができる。
【0049】
アプリケーション108、オペレーティングシステム110、およびアプリケーションサービス128はいずれも、通知のために使用されるハンドルまたはトークンのフォーマットおよびコンテンツを知り得ない、ということに再度注意するべきである。アプリケーション108、オペレーティングシステム110、およびアプリケーションサービス128は、ハンドルまたはトークンを解釈し、解読し、またはそうでなければ処理するように構成されないことができる。むしろ、アプリケーション108およびアプリケーションサービス128は、所与のハンドルおよび/またはトークンが使用されて、通知が通知サービス124を通じて対応するエンドポイントに送達され得ることを理解するように構成される。1つのアプローチにおいて、通知は、アプリケーションサービス128によりハンドル/トークンにペイロードとして添付され、通知をルーティングおよび送達するための処理を実行する通知サービス124に通信される。ハンドル/トークンを使用して通知を送達することに関する詳細が、
図3に関連してすぐ下に説明される。
【0050】
特に、
図3は、通知サービス124を通じて通知を送達するためにチャネルハンドルを用いるための1つの例示的なシナリオ300を示す。チャネルハンドルは、個々に提供され得るか、またはトークン130内に含まれ得る。いずれのケースにおいても、チャネルハンドルは、暗号化されることおよび/またはデジタル署名されることによって保護される。この例において、チャネルハンドルは、通知サービスによって解釈され、正しいエンドポイントに通知を送達するために使用され得る、符号化されたルーティングデータを表す。そのようなルーティングデータは、前述したように、暗号化され署名されたトークン内に含まれ得る。
【0051】
アプリケーションサービス128は、特定のアプリケーションに関連する通知を生成し得る。通知は、アプリケーションコンテンツにおけるアプリケーションのアップデート、宣伝または特別なオファー、警告等を提供するように構成され得る。通知は、特定のアプリケーションを有する任意のエンドポイントに宛てられたグローバルなメッセージ、または、デバイスのタイプ、ユーザの基準、プラットフォーム等の選択基準に基づいて1つ以上の特定のエンドポイントをターゲットとしたメッセージ、であることができる。
【0052】
302で、アプリケーションサービスは、通知のためにチャネルハンドルをルックアップする。たとえば、アプリケーションサービス128は、特定のアプリケーション(または選択基準)を有し通知がアクティブにされた1つ以上のエンドポイントのためのチャネルハンドルをキャッシュすることができる。したがって、アプリケーションサービス128は、通知を適切なチャネルハンドルと突き合わせるために、キャッシュされたデータを参照し得る。
【0053】
304で、通知が通知サービス124に送信される。通知は、チャネルハンドルにペイロードとして添付されることができる。複数のエンドポイントへの送達のケースでは、通知は、エンドポイントに対応する複数のチャネルハンドルに関連づけられることができる。
【0054】
306で、通知サービス124は、通知を処理し、それは、チャネルハンドルを解読すること、およびチャネルハンドルの妥当性を検査することを含み得る。たとえば、通知サービス124は、解読鍵を使用して、チャネルハンドルおよび/またはチャネルハンドルを含むトークン130を解読することができる。これは、通知サービス124に、通知を送達するのに十分な符号化されたルーティングデータを取得することを可能にさせる。通知サービス124はまた、チャネルハンドルが満了していないかどうか、または無効になっていないかどうか、対応するチャネルが未だアクティブであるかどうか、を確認するためにチェックし得る。
【0055】
さらに、通知サービス124は、通知を許可する前に、所定のクレデンシャル(たとえば、秘密鍵、パスワード/ID、または共有された他の秘密)を用いてサインインするようアプリケーションサービス128に要求することにより、アプリケーションサービス128を認証することができる。所定のクレデンシャルは、アプリケーションサービス128によって提供されたチャネルハンドル内に含まれるクレデンシャルと突き合わせられ得る。比較が行われ、クレデンシャルが一致しない場合、通知の送達は拒絶され得る。クレデンシャルの比較を可能にするために、チャネルハンドルは、ハンドルが作成されるときに、認証のための特定の同一性に結び付けられることができる。これは、ハンドルが作成されるときに、ハンドル中に、オペレーティングシステム110または別の手法によってクライアント102から提供されたクレデンシャルを、通知サービス124が埋め込むことによって達成されることができる。
【0056】
チャネルハンドルが妥当であると仮定すると、通知サービス124は、チャネルハンドルを解釈して、どこに通知を送信するかを決定する。特に、308で、通知サービス124は、チャネルハンドルを使用して、クライアントエンドポイントおよび対応するチャネルIDを決定する。たとえば、チャネルハンドルは、チャネルIDを再構成するために通知サービス124によって処理されることができる。別のアプローチでは、チャネルハンドルは、対応するチャネルIDをルックアップするために参照として使用されることができる。トークンのケースでは、トークン内に符号化されたルーティングデータは、トークンが解読および検査された後に通知を直接ルーティングするのに十分であり得る。
【0057】
いずれのケースにおいても、通知サービス124は、どこに通知を送信するかを識別し、310で、クライアント102に通知を通信する。たとえば、通信は、チャネルIDを参照してクライアント102のオペレーティングシステム108に宛てられることができる。312で、オペレーティングシステム108は、通知が宛てられたアプリケーション108をチャネルIDに基づいて把握するための処理を実行する。これが行われ得る1つの手法は、オペレーティングシステム108のローカルAPIによるものである。適切なアプリケーション108が識別されると、通知が、314でアプリケーション108に送達される。アプリケーション108は、通知を処理し、それに応じて通知によって命令された任意の対応する動作を実行することができる。たとえば、アプリケーション108は、ユーザインターフェース内で見るために通知を提示し、アップデートを実行またはスケジューリングし、通知に関する警告および/または視覚的なインジケータを提供し、通知を格納し得る、といった具合である。
【0058】
ステートレスアプリケーション通知のいくつかの例を考慮したので、ここでは、1つ以上の実施形態に係るステートレスアプリケーション通知のための例示的な手順を考慮する。
【0059】
例示的な方法
図4は、1つ以上の実施形態に係る方法のステップを説明するフロー図である。方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせに関連して実現されることができる。少なくともいくつかの実施形態において、方法は、通知サービス124を含む、またはそうでなければ利用する、
図1の例示的なサービスプロバイダ114のような、適切に構成されたコンピューティングデバイスによって実現されることができる。
【0060】
ステップ400は、チャネルに関連づけられたトークンについてクライアントから要求を取得する。たとえば、通知を受信するためにアプリケーションがアクティブになると、アプリケーションは、前述のごとくチャネル要求を送信し得る。要求は、クライアント102の特定のアプリケーションのためのトークンを作成するために使用され得るクライアント状態データ111を含み得る。通知サービス124は、チャネル、および/または、既存のチャネルにアクセスするために使用され得る難読化ルーティングデータ、を作成するための要求を受信および処理することができる。
【0061】
特に、ステップ402は、クライアントのためのルーティングデータを含むトークンを生成する。ルーティングデータは、チャネルハンドル、または、チャネルの詳細を符号化するクライアント状態データ111の他の組み合わせの形態、であることができる。有効に、ルーティングデータは、通知126をルーティングするために通知サービス124によって後に回復され得るチャネルに関する送達経路またはアドレスを符号化する。ルーティングデータは、通知サービス124によって生成されたトークンの一部として提供されることができる。トークンは、要求において提供されたクライアント状態データ111を使用して、ステートレスに作成され、用いられることができる。トークンは、表、データベース、または外部のソースからデータをルックアップせずに、トークンのみに基づいて、「インプロセス」で、チャネルに関する経路またはアドレスを後に決定することを、通知サービス124に可能にさせるのに十分な、ルーティングデータを含むように構成されることができる。トークンはまた、満了時間、セキュリティデータ、および他のメタデータを含み得る。
【0062】
ステップ404は、トークンを解読し、トークンに署名する。これは、トークンを保護し、ルーティングデータを第三者から難読化させる。ステップ406は、通知のためにチャネルを用いることをクライアントに可能にさせるためにクライアントにトークンを返送する。トークンは、オペレーティングシステム110を通じてアプリケーション108に提供されることができ、アプリケーション108が次に、アプリケーションサービス128による使用のためにトークンを供給することができる。
【0063】
ステップ408は、トークンを使用するクライアントへの送達のための通知を取得する。たとえば、通知サービス124は、パケット化されたまたはそうでなければトークンに関連づけられた通知を、アプリケーションサービス128から取得することができる。
【0064】
ステップ410は、トークンを解読して、ルーティングデータを取り出し、ルーティングデータの妥当性を検査する。通知サービス124はトークンを発行し、トークンのセキュリティを制御するので、通知サービス124は、トークンを解読および解釈することが可能である。通知サービス124はまた、満了時間をチェックすること、チャネルがアクティブであるかどうかを確認すること、通知がチャネルのために可能にされていると確認すること、およびそうでなければさまざまなセキュリティ情報をチェックすること、によって、ルーティングデータの妥当性を検査することができる。
【0065】
ルーティングデータまたはトークンに伴う問題が発見されると、エラーハンドリング処理が開始されることができる。エラーメッセージが通知の送信元に送り返されることができ、トークンの再発行、クライアントへのエラー通知の送信、チャネルのロック、送信元の認証解除等といった、他の訂正動作が実行されることができる。そうでなければ、ルーティングデータが妥当である場合、通知サービスは、解読されたルーティングデータを処理して、チャネルIDを再構成することができ、またはそうでなければ、ルーティングデータによって記述されたチャネルを識別することができる。そして、ステップ412は、トークンから取り出されたルーティングデータに基づいてクライアントに通知を送達する。
【0066】
図5は、1つ以上の実施形態に係る別の方法のステップを説明するフロー図である。方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせに関連して実現されることができる。少なくともいくつかの実施形態において、方法は、
図1の例示的なクライアント102のような、適切に構成されたコンピューティングデバイスによって実現されることができる。たとえば、方法は、ステートレスアプリケーション通知のためのクライアント側の技法を可能にするように適応したオペレーティングシステム108のローカルアプリケーションプログラミングインターフェース(API)によって実現されることができる。
【0067】
ステップ500は、通知サービスにチャネルのためのチャネルハンドルを要求する。特定のチャネルのためのチャネルハンドルが、さまざまな時間にアプリケーションのために要求され得る。これは、アプリケーションが最初にインストールされたときに、アプリケーションの実行時に、または通知がユーザまたは別の手法によってアクティブにされたときに、行われることができる。オペレーティングシステム110は、前述のごとくAPIを通じてアプリケーション要求を処理することができる。
【0068】
アプリケーションが、チャネルハンドルを取得するためにオペレーティングシステム108を呼び出すと、オペレーティングシステム108は、以前にキャッシュされたハンドル(利用可能な場合)を提供すべきか、新たなハンドルを要求すべきかを、ポリシーに基づいて決定することができる。新たなハンドルは、たとえば、既存のハンドルが存在しない場合、キャッシュされたハンドルが満了している場合、新たなチャネルを取得することが適切である場合等に要求されることができる。
【0069】
新たなハンドルは、ハンドルが満了する前にハンドルを更新するために要求されることができる。これは、たとえば、更新されたハンドル(またはトークン)を取得するタイミングを規定するポリシーに基づいて行われ得る。更新のために、ハンドルは、以前から存在するチャネルで要求される。新たなハンドルは、以前から存在するチャネルのために発行されることができる。説明したように、複数のハンドルが同一の時間に、あるチャネルのためにアクティブであることができる。したがって、チャネルのために以前に作成されたハンドルは、そのハンドルが満了しない限り、無効にならない限り、またはそうでなければ非アクティブにされない限り、更新後に使用され続けることができる。しかしながら、更新後、アプリケーションは、引き続き起こる通知による使用のために最新のハンドルを供給することができる。
【0070】
更新はまた、個々にまたはグループとしてアプリケーションサービス128によって維持されたハンドルまたはトークンを更新するためにアプリケーションサービス128によって開始されることができる、ということに注意すべきである。これは、通知の継続性を保証するためにチャネルのためのルーティングデータを定期的にリフレッシュすることをアプリケーションサービス128に可能にさせる。更新は、通知サービス124を通じて行われ、更新されたデータが、要求するアプリケーションサービス128に通信し返され得る。通知サービス124はまた、更新されたハンドルまたはトークンを適切なクライアント102に提供することができる。
【0071】
ステップ502は、チャネルを難読化させるチャネルハンドルを含む応答を取得する。たとえば、通知サービス124は、要求されたチャネルハンドルをクライアント102に返送し返すことができる。チャネルハンドルは、通知サービス124によって解釈され得る難読化ルーティングデータを組み込むことができる。加えて、チャネルIDが応答と共に含まれ得る。クライアント102は、返送されたデータ(たとえば、ハンドル、トークン、ルーティングデータ、チャネルID)を、引き続いて起こる使用のためにキャッシュすることができる。
【0072】
ステップ504は、アプリケーションサービスからの通知のアクティブ化を可能にするためにアプリケーションにチャネルハンドルを提供する。キャッシュされたチャネルハンドルまたは新たに作成されたハンドルが、要求に応じてアプリケーションに提供されることができる。アプリケーションは次に、チャネルハンドルを対応するアプリケーションサービス128に通信して、通知をアクティブにすることができる。チャネルハンドルを所持するアプリケーションサービス128は、上述および後述するように、チャネルハンドルによって符号化された難読化ルーティングデータを実際に理解せずに、通知サービス124を通じて、対応するチャネルに通知を宛てることができる。
【0073】
ステップ506は、チャネルハンドルを使用して通知サービスを通じてチャネルに送信された通知を受信する。通知は、通知サービスからクライアント102へと通信されることができる。通知は、本明細書に説明されるように、オペレーティングシステム108および/またはローカルAPIによって受信および処理されることができる。特に、通知サービス124は、チャネルハンドルを使用してアプリケーションサービス128に代わって通知を解釈およびルーティングする。したがって、クライアント102は、クライアント102のために確立されたそれぞれのチャネルで通知サービス124を通じてさまざまな通知を受信することができる。通知は、前述のごとくさまざまな手法で、クライアント102で、処理され、格納され、および/または出力されることができる。
【0074】
図6は、1つ以上の実施形態に係る方法のステップを説明するフロー図である。方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせに関連して実現されることができる。少なくともいくつかの実施形態において、方法は、
図1の例示的なアプリケーションサービス128を提供するように構成された1つ以上のサーバといった、適切に構成されたコンピューティングデバイスによって実現されることができる。
【0075】
ステップ600は、難読化ルーティングデータをクライアントから受信して、クライアントの対応するアプリケーションへの通知をアクティブにする。たとえば、アプリケーションサービス128は、アプリケーション108から、チャネルハンドル、トークン、または他の難読化ルーティングデータを取得し、格納することができる。難読化ルーティングデータは、対応するチャネルによってアプリケーション108に通知を送信することをサービスに可能にさせる。チャネルそのものは、本明細書に説明される手法でアプリケーションサービス128に分かりにくくされ得る。
【0076】
ステップ602は、アプリケーションへの送達のための通知を生成する。通知は、特定のアプリケーションへの送達のためのメッセージとして構成され得る。通知は、アプリケーションのコンテンツにおけるプログラムのアップデート、宣伝、警告、リンク、報酬、達成メッセージ等を含み得る。
【0077】
ステップ604は、難読化ルーティングデータと共に通知をパッケージ化する。特に、アプリケーションサービス128は、通知を含むパッケージを作成することができ、このパッケージは、難読化ルーティングデータをそのパッケージ中に含むことによってチャネルに宛てられる。たとえば、アプリケーションのアップデートは、チャネルURI、ハンドル、トークン、またはチャネルのために発行された他のルーティングデータと共にパッケージ化されることができる。通知は、パッケージ中に含まれた難読化ルーティングデータによって表される送達命令に添付された、またはそうでなければ関連づけられた、ペイロードと考えられることができる。
【0078】
ステップ606は、難読化ルーティングデータと共に通知を通信して、通知サービスに、難読化ルーティングデータによって指定されたアプリケーションに通知を送達させる。アプリケーションサービス128は、ルーティングデータの詳細またはルーティングデータ中に符号化されたエンドポイントの実際のアドレスを必ずしも知らずに、難読化ルーティングデータを使用してエンドポイントにメッセージを宛てることができる、ということに再度注意すべきである。難読化ルーティングデータを伴う通知のパッケージは、通知サービス124によって提供されるサービスを利用するためにアプリケーションサービス128によって構成される。通知サービス124は、難読化ルーティングデータを解読し、それに応じて通知を送達することを担う。したがって、アプリケーションサービス128は、通知を宛てるために、単にさまざまな形態の難読化ルーティングデータを利用するだけでよく、正しいエンドポイントを識別し、通知をルーティングするための処理を、通知サービス124に引き継ぐ。
【0079】
ステートレスアプリケーション通知のためのさまざまな例示的な方法を考慮したので、ここでは、1つ以上の実施形態に係るステートレスアプリケーション通知のさまざまな態様を実現するために用いられ得る例示的なシステムを考慮する。
【0080】
例示的なシステム
図7は、上述したさまざまな実施形態を実現することができる1つ以上のコンピューティングシステムおよび/またはデバイスを表す例示的なコンピューティングデバイス702を含む例示的なシステムを、一般的に700で示す。コンピューティングデバイス702は、たとえば、サービスプロバイダ114のサーバ、コンピューティングデバイス102に関連づけられたデバイス(たとえば、クライアントデバイス)、アプリケーションサービス128を提供するサーバ、オンチップのシステム、および/または任意の他の適切なコンピューティングデバイスまたはコンピューティングシステムであり得る。
【0081】
例示的なコンピューティングデバイス702は、1つ以上のプロセッサ704または処理ユニット、1つ以上のメモリおよび/またはストレージコンポーネント708を含み得る1つ以上のコンピュータ可読媒体706、入力/出力(I/O)デバイスのための1つ以上の入力/出力(I/O)インターフェース710、および、さまざまなコンポーネントおよびデバイスに互いに通信することを可能にさせるバス712を含む。コンピュータ可読媒体706および/または1つ以上のI/Oデバイスは、コンピューティングデバイス702の一部として含まれることができ、またはあるいは、コンピューティングデバイス702に結合されることができる。バス712は、メモリバスまたはメモリコントローラ、周辺機器バス、アクセラレイティッド・グラフィックス・ポート、および、さまざまなバスアーキテクチャのうちのいずれかを使用するプロセッサまたはローカルバス、を含むいくつかのタイプのバス構造のうちの1つ以上を表す。バス712は、有線および/または無線バスを含み得る。
【0082】
1つ以上のプロセッサ704は、それらを形成する材料、またはその中で用いられる処理メカニズムによって限定されるものではない。たとえば、プロセッサは、半導体および/またはトランジスタ(たとえば、電子集積回路(IC))からなり得る。そのようなコンテキストで、プロセッサ実行可能な命令は、電子的に実行可能な命令であり得る。メモリ/ストレージコンポーネント708は、1つ以上のコンピュータ可読媒体に関連づけられたメモリ/ストレージ容量を表す。メモリ/ストレージコンポーネント708は、揮発性媒体(たとえば、ランダムアクセスメモリ(RAM))および/または不揮発性媒体(たとえば、読み出し専用メモリ(ROM)、フラッシュメモリ、光学ディスク、磁気ディスク等)を含み得る。メモリ/ストレージコンポーネント708は、固定媒体(たとえば、RAM、ROM、固定ハードドライブ等)だけでなく、取り外し可能な媒体(たとえば、フラッシュメモリドライブ、取り外し可能なハードドライブ、光学ディスク等)も含み得る。
【0083】
入力/出力インターフェース710は、ユーザによるコンピューティングデバイス702へのコマンドおよび情報の入力を可能にし、また、さまざまな入力/出力デバイスを使用したユーザおよび/または他のコンポーネントまたはデバイスへの情報の提示を可能にする。入力デバイスの例は、キーボード、タッチスクリーンディスプレイ、カーソルコントロールデバイス(たとえば、マウス)、マイクロフォン、スキャナ等を含む。出力デバイスの例は、ディスプレイデバイス(たとえば、モニタまたはプロジェクタ)、スピーカー、プリンタ、ネットワークカード等を含む。
【0084】
さまざまな技法は、ソフトウェア、ハードウェア(固定論理回路)、またはプログラムモジュールの一般的なコンテキストで本明細書に説明され得る。一般的に、そのようなモジュールは、特定のタスクを実行し、または、特定の抽象データ型を実現する、ルーチン、プログラム、オブジェクト、要素、コンポーネント、データ構造等を含む。これらのモジュールおよび技法の実現は、何らかの形態のコンピュータ可読媒体によって記憶または伝送され得る。コンピュータ可読媒体は、コンピューティングデバイスによってアクセスされ得る、さまざまな利用可能な単数の媒体または複数の媒体を含み得る。限定ではなく例として、コンピュータ可読媒体は、「コンピュータ可読記憶媒体」および「通信媒体」を含み得る。
【0085】
「コンピュータ可読記憶媒体」は、単なる信号伝送、搬送波、または信号そのものとは対照的に、情報の永続的および/または非一時的な記憶を可能にする媒体および/またはデバイスのことを言い得る。このように、コンピュータ可読記憶媒体は、信号ではない搬送媒体のことを言う。コンピュータ可読記憶媒体はまた、所望の技法の態様を実現するためにいくつかの実施形態において用いられ得るハードウェアの形態で実装された、命令、モジュール、および/または固定デバイス論理を有する、ハードウェア要素を含む。
【0086】
コンピュータ可読記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、論理要素/回路、または他のデータ、といった情報の記憶に適した方法または技術において実現される、揮発性および不揮発性の、取り外し可能および取り外し不可能な媒体および/またはストレージデバイスを含む。コンピュータ可読記憶媒体の例は、RAM、ROM、EEPROM、フラッシュメモリ、または他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、または他の光学ストレージ、ハードディスク、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気ストレージデバイス、集積回路またはチップのハードウェア要素(たとえば、固定論理)、または他のストレージデバイス、有形媒体、または、所望の情報を記憶するのに適し、コンピュータによってアクセスされ得る製造物、を含むことができるが、それらに限定されない。
【0087】
「通信媒体」は、コンピューティングデバイスのハードウェアに、たとえばネットワークを介して、命令を伝送するように構成された信号搬送媒体のことを言い得る。通信媒体は典型的に、変調されたデータ信号、たとえば、搬送波、データ信号、または他のトランスポートメカニズムに、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを組み込み得る。通信媒体はまた、任意の情報送達媒体を含む。「変調されたデータ信号」という用語は、信号中に情報を符号化するようにその特徴のうちの1つ以上が設定または変更された信号を意味する。限定ではなく例として、通信媒体は、有線ネットワークまたはダイレクト有線接続のような有線媒体、および、音響、RF、赤外線、および他の無線媒体、といった無線媒体を含む。
【0088】
上記のうちのいずれかの組み合わせもまた、コンピュータ可読媒体の範囲内に含まれるべきである。したがって、API、通知サービス124、オペレーティングシステム110、アプリケーション108、および他のプログラムモジュールを含む、ソフトウェア、ハードウェア、またはプログラムモジュールは、何らかの形態のコンピュータ可読媒体に組み込まれた1つ以上の命令および/または論理として実現され得る。
【0089】
したがって、本明細書に説明された特定のモジュール、機能、コンポーネント、および技法は、ソフトウェア、ハードウェア、ファームウェア、および/またはそれらの組み合わせで実現され得る。コンピューティングデバイス702は、コンピュータ可読媒体上で実現されるソフトウェアおよび/またはハードウェアモジュールに対応する特定の命令および/または機能を実現するように構成されることができる。命令および/または機能は、ステートレスアプリケーション通知のための技法ならびに他の技法を実現するために、1つ以上の製造物(たとえば、1つ以上のコンピューティングデバイス702および/またはプロセッサ704)によって実行可能/動作可能であり得る。そのような技法は、本明細書に説明された例示的な手順を含むが、それに限定されない。したがって、コンピュータ可読媒体は、本明細書に説明される1つ以上のデバイスによって実行されると、ステートレスアプリケーション通知のためのさまざまな技法をもたらす命令を記憶し、またはそうでなければ提供するように構成され得る。
【0090】
結論
チャネルハンドルおよび/またはトークンの形態の難読化ルーティングデータが通知サービスを通じて通知を送信するために用いられ得るステートレスアプリケーション通知が説明された。ルーティングデータは、ルーティングデータのコンテンツとフォーマットを第三者に分かりにくくするために、暗号化およびデジタル署名されることができる。難読化ルーティングデータを所持するアプリケーションサービスは、データと共に通知をパッケージ化し、そのパッケージを送達のために通知サービスに送信することができる。通知サービスは、データを解読および解釈し、アプリケーションサービスに代わって適切なエンドポイントに通知を送達するように構成される。
【0091】
主題が、構造上の特徴および/または方法の動作に固有の表現で説明されているが、添付の請求項において定義される主題は、上述した特定の特徴または動作に必ずしも限定されるものではない、ということが理解されるべきである。むしろ、上述した特定の特徴および動作は、請求項を実現する例示的な形態として開示されている。