Windows Phone のプッシュ通知の送信

2012/02/09

Windows Phone クライアント アプリケーションで通知に登録すると、アプリケーションに通知を送信することができます。通常、これは通知の送信先となる URI のコレクションを保持する Web サービスを使用して実行しますが、Microsoft Push Notification Service にメッセージを送信できるアプリケーションを使用しても実行できます。プッシュ通知の送信を実装するサンプル コードを参照するには、「方法: Windows Phone 用のトースト通知を送受信する」、「方法: Windows Phone 用のタイル通知を送受信する」、および「方法: Windows Phone 用の Raw 通知を送受信する」を参照してください。

重要な注重要な注:

ユーザーの通知を Microsoft Push Notification Service に送信するように認証済み Web サービスを設定することをお勧めします。このようにすると、HTTPS インターフェイス経由で通信が行われるので、セキュリティが向上します。認証済み Web サービスには、1 日に送信できるプッシュ通知の数に対する制限はありません。一方、認証されていない Web サービスでは、1 サブスクリプションでの 1 日のプッシュ通知の数が 500 に制限されます。詳細については、「Windows Phone のプッシュ通知を送信するように認証済み Web サービスを設定する」を参照してください。

プッシュ通知を送信するには、Web サービスまたはアプリケーションで次のことが必要です。

  • 通知の送信先となる各 Windows Phone デバイス用に POST メッセージを作成します。

  • 適切な通知の種類に合わせたメッセージを作成します。以下のセクションでは、トースト通知、タイル通知、および Raw 通知メッセージ用のメッセージ形式について説明します。一度にサーバーにポストできる通知の種類 (タイル、トースト、または Raw) は 1 つのみです。同じクライアント デバイスに対して同時に複数の通知の種類を送信する場合は、通知の種類ごとに別個の POST メッセージを作成する必要があります。

  • Windows Phone OS 7.0 では使用できないプロパティを使用せずに (具体的には、トースト通知の場合は Parameter プロパティ、タイル通知の場合は BackTitleBackBackgroundImageBackContent、タイル ID プロパティ)、Windows Phone OS 7.0 クライアントに対して適切にメッセージをダウングレードします。デバイスの URI の情報を Web サービスに登録するのと同時に、デバイスの OS のバージョン情報を送信することをお勧めします。

  • Microsoft Push Notification Service にメッセージをポストします。

  • Microsoft Push Notification Service から応答を取得し、適切に対応します。

カスタム HTTP ヘッダーは次の情報を含むことができます。

Header

指定

説明

MessageID

"X-MessageID"":"1*MessageIDValue
MessageIDValue = STRING (uuid)
//For example:
X-MessageID:<UUID>

応答に関連付けられた通知メッセージ ID。このヘッダーが POST 要求に追加されない場合、Microsoft Push Notification Service は応答でこのヘッダーを省略します。

NotificationClass

”X-NotificationClass””:”1*NotificationClassValue
NotificationClassValue = DIGIT
//For example:
X-NotificationClass:1

Push Notification Service からアプリケーションにプッシュ通知がいつ送信されるのかを示すバッチ処理間隔。このヘッダーでの有効な値については、トースト通知、タイル通知、および Raw 通知のセクションの表を参照してください。このヘッダーが存在しない場合、メッセージは Push Notification Service によってすぐに配信されます。

Notification Type

“X-WindowsPhone-Target””:”1*NotificationTypeValue
NotificationTypeValue = STRING
//For example:
X-WindowsPhone-Target:toast

送信されるプッシュ通知の種類。有効なオプションは Tile、toast、および raw です。このヘッダーが存在しない場合、プッシュ通知は Raw 通知として処理されます。詳細については、「Windows Phone のプッシュ通知の概要」を参照してください。

CallbackURI

"X-CallbackURI"":"1*CallbackURIValue
CallbackURIValue = STRING (URI)
//For example:
X-CallbackURI: <URI>

特定のイベントがトリガーされたときに登録されたコールバック メッセージが送信される通知チャンネル URI。このカスタム ヘッダーが許可されるのは、認証済み Web サービスにコールバック メッセージを登録する場合のみです。

コールバック メッセージの登録の詳細については、「方法: Windows Phone 用のコールバック登録要求を設定する」を参照してください。認証済み Web サービスの詳細については、「Windows Phone のプッシュ通知を送信するように認証済み Web サービスを設定する」を参照してください。

タイルまたはトースト ペイロードで使用する場合、次の文字は表に示すようにエンコードする必要があります。

文字

XML エンコード

<

&lt;

>

&gt;

&

&amp;

&apos;

&quot;

通知のペイロードには次の種類があります。

トースト通知ペイロード

次の HTTP ヘッダーを使用します。

sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast");
sendNotificationRequest.Headers.Add("X-NotificationClass", "<batching interval>");

次の表は、バッチ処理間隔に使用できる値の説明です。

配信間隔

2

即時に配信します。

12

450 秒以内に配信しました。

22

900 秒以内に配信しました。

ペイロードには以下が含まれます。


string toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
    "<wp:Toast>" +
        "<wp:Text1><string></wp:Text1>" +
        "<wp:Text2><string></wp:Text2>" +
        "<wp:Param><string></wp:Param>" +
    "</wp:Toast>" +
"</wp:Notification>";

<Text1> および <Text2> は文字列形式です。

<Param> 値には次の形式を使用できます。

  • /page1.xaml - アプリケーションの起動時に移動先となるページを定義します。先頭に "/" を付ける必要があります。

  • /page1.xaml?value1=1234 &amp;value2=9876 - アプリケーションの起動時に移動先となるページと、名前/値ペアの情報を定義します。先頭に "/" を付ける必要があります。

  • ?value1=1234 &amp;value2=9876 - アプリケーションの既定の開始ページに渡される名前/値ペアの情報を含みます。先頭に "?" を付ける必要があります。

通常、ユーザーがトーストをクリックし、デバイスで実行されているクライアント アプリケーションの指定されたページに移動した後、OnNavigatedTo イベント ハンドラーでトースト ペイロードのパラメーターの値が解析されます。

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            string strVal1 = this.NavigationContext.QueryString["value1"];
            string strVal2 = this.NavigationContext.QueryString["value2"];

        }

タイル通知ペイロード

次の HTTP ヘッダーを使用します。

sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token");
sendNotificationRequest.Headers.Add("X-NotificationClass", "<batching interval>"); 

次の表は、バッチ処理間隔に使用できる値の説明です。

配信間隔

1

即時に配信します。

11

450 秒以内に配信しました。

21

900 秒以内に配信しました。

ペイロードには以下が含まれます。


string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
    "<wp:Tile Id=\”Navigation Uri of the Tile to update\”>" +
        "<wp:BackgroundImage><front side of Tile background image path></wp:BackgroundImage>" +
        "<wp:Count><front side of Tile count></wp:Count>" +
        "<wp:Title><front side of Tile title></wp:Title>" +
        "<wp:BackBackgroundImage><back side of Tile image path></wp:BackBackgroundImage>"+
        "<wp:BackTitle><back side of Tile title></wp:BackTitle>"+
        "<wp:BackContent><back side of Tile text></wp:BackContent>"+
    "</wp:Tile> " +
"</wp:Notification>";

Id は、アプリケーションにセカンダリ タイルがある場合に、更新するタイルを指定します。アプリケーション タイルを更新するには、Id を省略できます。


string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
  "<wp:Tile >" +
    "<wp:BackgroundImage>" + TextBoxBackgroundImage.Text + "</wp:BackgroundImage>" +
    "<wp:Count>" + TextBoxCount.Text + "</wp:Count>" +
    "<wp:Title>" + TextBoxTitle.Text + "</wp:Title>" +
    "<wp:BackBackgroundImage>" + TextBoxBackBackgroundImage.Text + "</wp:BackBackgroundImage>" +
    "<wp:BackTitle>" + TextBoxBackTitle.Text + "</wp:BackTitle>" +
    "<wp:BackContent>" + TextBoxBackContent.Text + "</wp:BackContent>" +
  "</wp:Tile> " +
"</wp:Notification>";


それ以外の場合、Id にはセカンダリ タイルの正確なナビゲーション URI が含まれている必要があります。


string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
  "<wp:Tile ID=\"/SecondaryTile.xaml?DefaultTitle=FromTile\">" +
    "<wp:BackgroundImage>" + TextBoxBackgroundImage.Text + "</wp:BackgroundImage>" +
    "<wp:Count>" + TextBoxCount.Text + "</wp:Count>" +
    "<wp:Title>" + TextBoxTitle.Text + "</wp:Title>" +
    "<wp:BackBackgroundImage>" + TextBoxBackBackgroundImage.Text + "</wp:BackBackgroundImage>" +
    "<wp:BackTitle>" + TextBoxBackTitle.Text + "</wp:BackTitle>" +
    "<wp:BackContent>" + TextBoxBackContent.Text + "</wp:BackContent>" +
  "</wp:Tile> " +
"</wp:Notification>";

Tile プロパティの値をクリアするには、プロパティに対して Action 属性を Clear に設定します。タイルの前面には常に背景イメージを設定する必要があるため、BackgroundImage プロパティをクリアすることはできません。

string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<wp:Notification xmlns:wp=\"WPNotification\">" +
        "<wp:Tile Id=\"Navigation URI of the tile to update\">" +
            "<wp:BackgroundImage> </wp:BackgroundImage>" +
            "<wp:Count Action=\"Clear\"></wp:Count>" +
            "<wp:Title Action=\"Clear\"></wp:Title>" +
            "<wp:BackBackgroundImage Action=\"Clear\"></wp:BackBackgroundImage>"+
            "<wp:BackTitle Action=\"Clear\"></wp:BackTitle>"+
            "<wp:BackContent Action=\"Clear\"></wp:BackContent>"+
        "</wp:Tile> " +
    "</wp:Notification>";



Raw 通知ペイロード

次の HTTP ヘッダーを使用します。

sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-NotificationClass", "<batching interval>"); 

次の表は、バッチ処理間隔に使用できる値の説明です。

配信間隔

3

即時に配信します。

13

450 秒以内に配信しました。

23

900 秒以内に配信しました。

ペイロードの構造はアプリケーションによって定義されます。次のコードは一例です。


string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<root>" +
        "<Value1><UserValue1><Value1>" +
        "<Value2><UserValue2><Value2>" +
    "</root>"

単純にバイト ストリームを渡すこともできます。次のコードは一例です。

new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};

表示: