このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 用の Raw 通知を送受信する方法

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

ここでは、Microsoft Push Notification Service に Raw 通知を送信するために必要な手順と、Windows Phone で実行するアプリでその通知を受け取る方法を説明します。Raw 通知に関する情報、およびその使用方法については、「Windows Phone 8 のプッシュ通知」を参照してください。

完全な Raw 通知のサンプルをダウンロードすることができます。

重要:重要:

このトピックのセクションのうち、Web サービス上で実行されている ASP.NET の Web ページから Raw 通知を送信する手順では、完全版の Visual Studio か、無料の Microsoft Visual Web Developer 2010 Express が必要です。

このトピックは、次のセクションで構成されています。

このセクションでは、Windows Phone 上で実行され、プッシュ通知チャンネルを作成し、Raw 通知イベントを処理するアプリを作成します。

重要:重要:

わかりやすくするために、トースト通知の URI をコピーして、通知を送信する Web ページに貼り付けます。通常、この URI は、アプリ用に作成した Web サービスに渡されます。

Raw 通知を受け取るプッシュ クライアントを作成するには

  1. 新しい Windows Phone アプリを作成します。

  2. プロジェクトに「RawNotificationClient」という名前を付けます。

  3. 次の using ディレクティブを MainPage.xaml.cs ファイルの先頭に追加します。

    
    using Microsoft.Phone.Notification;
    
    
    
  4. MainPage コンストラクターを次のコードに置き換えます。このコードは、アプリの以前のインスタンス内で Raw 通知チャンネルが設定済みであるかどうかを確認します。通知チャンネルが見つかった場合は、通知イベントに接続されます。通知チャンネルが見つからない場合は、作成されて通知イベントに接続されます。

    
            public MainPage()
            {
                /// Holds the push channel that is created or found.
                HttpNotificationChannel pushChannel;
    
                // The name of our push channel.
                string channelName = "RawSampleChannel";
    
                InitializeComponent();
    
                // Try to find the push channel.
                pushChannel = HttpNotificationChannel.Find(channelName);
    
                // If the channel was not found, then create a new connection to the push service.
                if (pushChannel == null)
                {
                    pushChannel = new HttpNotificationChannel(channelName);
    
                    // Register for all the events before attempting to open the channel.
                    pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
                    pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
                    pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived);
    
                    pushChannel.Open();
    
                }
                else
                {
                    // The channel was already open, so just register for all the events.
                    pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
                    pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
                    pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived);
    
                    // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
                    System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
                    MessageBox.Show(String.Format("Channel Uri is {0}",
                        pushChannel.ChannelUri.ToString()));
    
                }
            }
    
    
    
    
  5. 次に、イベント ハンドラーのコードを追加します。最初のイベント ハンドラーは ChannelUriUpdated イベント用です。わかりやすくするため、ここではチャンネルの URI が表示されていますが、この URI は通常 Web サービスに送り返されます。

            void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
            {
    
                Dispatcher.BeginInvoke(() =>
                {
                    // Display the new URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
                    System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());
                    MessageBox.Show(String.Format("Channel Uri is {0}",
                        e.ChannelUri.ToString()));
                    
                });
            }
    
    
  6. 次のイベント ハンドラーはエラー処理用です。電話の場所やサービスによってデータ接続が変わる可能性があるため、コードでは、通知エラーを適切に処理する必要があります。

            void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
            {
                // Error handling logic for your particular application would be here.
                Dispatcher.BeginInvoke(() =>
                    MessageBox.Show(String.Format("A push notification {0} error occurred.  {1} ({2}) {3}",
                        e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData))
                        );
            }
    
    
  7. 最後のイベント ハンドラーは、Raw 通知を受け取るためのものです。このデータを使用することは、完全にアプリ固有の動作です。

               void PushChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)
            {
                string message;
    
                using (System.IO.StreamReader reader = new System.IO.StreamReader(e.Notification.Body))
                {
                    message = reader.ReadToEnd();
                }
    
    
                Dispatcher.BeginInvoke(() =>
                    MessageBox.Show(String.Format("Received Notification {0}:\n{1}",
                        DateTime.Now.ToShortTimeString(), message))
                        );
            }
    
    

これで Windows Phone のプッシュ クライアント コードが完成しました。このコードは、通知を送信する Web ページの作成が完了した後に実行します。

このセクションでは、デバイスでプッシュ チャネルが作成されたときに返される URI を使用して Raw 通知を送信する、ASP.NET の Web ページを作成します。

ASP.NET プロジェクトを作成するには、Visual Studio の完全版または無料の Microsoft Visual Web Developer 2010 Express が必要です。

Raw 通知を送信する ASP.NET ページを作成するには

  1. Visual Studio のインスタンスをもう 1 つ開き、新しいアプリを作成します。テンプレートは [Web] の C# カテゴリにある [ASP.NET Empty Web Application] とします。

  2. プロジェクトに「SendRaw」という名前を付けます。

  3. [SendRaw] プロジェクト名を右クリックし、[追加]、[新しい項目]、[Web フォーム] の順に選択して、プロジェクトに新しい Web フォームを追加します。

  4. フォームに「SendRaw」という名前を付け、[追加] をクリックします。

  5. ソリューション エクスプローラーで SendRaw.aspx を右クリックし、[スタート ページに設定] をクリックして、SendRaw フォームをスタート ページとして設定します。

  6. 次の手順では、SendRaw.aspx Web フォームに以下のコントロールを追加します。

    コントロールの型

    コントロール ID

    コントロールのテキスト

    TextBox

    TextBoxUri

    URI を入力:

    TextBox

    TextBoxValue1

    値 1 を入力:

    TextBox

    TextBoxValue2

    値 2 を入力:

    Button

    ButtonSendRaw

    Raw 通知の送信

    TextBox

    TextBoxResponse

    応答:

    [Raw 送信] ボタンには、ButtonSendRaw_Click イベント ハンドラーが設定されます。SendRaw.aspx の内容を以下のコードに置き換えて、これらのコントロールを作成します。

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SendRaw.aspx.cs" Inherits="SendRaw.SendRaw" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <br />
            Enter URI:</div>
        <asp:TextBox ID="TextBoxUri" runat="server" Width="666px"></asp:TextBox>
        <br />
        <br />
        Enter Value 1:<br />
        <asp:TextBox ID="TextBoxValue1" runat="server"></asp:TextBox>
        <br />
        <br />
        Enter Value 2:<br />
        <asp:TextBox ID="TextBoxValue2" runat="server"></asp:TextBox>
        <br />
        <br />
        <br />
        <asp:Button ID="ButtonSendRaw" runat="server" onclick="ButtonSendRaw_Click" 
            Text="Send Raw Notification" />
        <br />
        <br />
        Response:<br />
        <asp:TextBox ID="TextBoxResponse" runat="server" Height="78px" Width="199px"></asp:TextBox>
        </form>
    </body>
    </html>
    
    
    
  7. 次の using ディレクティブを SendRaw.aspx.cs ファイルの先頭に追加します。

    
    using System.Net;
    using System.IO;
    using System.Text;
    
    
  8. ButtonSendRaw_Click イベント ハンドラーのコードを追加します。このコードは、最初の TextBox に入力された URI を取得し、トースト通知メッセージを作成して Microsoft Push Notification Service にポストします。

                 protected void ButtonSendRaw_Click(object sender, EventArgs e)
            {
                try
                {
                    // Get the URI that the Microsoft Push Notification Service returns to the push client when creating a notification channel.
                    // Normally, a web service would listen for URIs coming from the web client and maintain a list of URIs to send
                    // notifications out to.
                    string subscriptionUri = TextBoxUri.Text.ToString();
    
    
                    HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri);
    
                    // Create an HTTPWebRequest that posts the raw notification to the Microsoft Push Notification Service.
                    // HTTP POST is the only method allowed to send the notification.
                    sendNotificationRequest.Method = "POST";
    
                    // Create the raw message.
                    string rawMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                    "<root>" +
                        "<Value1>" + TextBoxValue1.Text.ToString() + "<Value1>" +
                        "<Value2>" + TextBoxValue2.Text.ToString() + "<Value2>" +
                    "</root>";
    
                    // Set the notification payload to send.
                    byte[] notificationMessage = Encoding.Default.GetBytes(rawMessage);
    
                    // Set the web request content length.
                    sendNotificationRequest.ContentLength = notificationMessage.Length;
                    sendNotificationRequest.ContentType = "text/xml";
                    sendNotificationRequest.Headers.Add("X-NotificationClass", "3");
    
    
                    using (Stream requestStream = sendNotificationRequest.GetRequestStream())
                    {
                        requestStream.Write(notificationMessage, 0, notificationMessage.Length);
                    }
    
                    // Send the notification and get the response.
                    HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();
                    string notificationStatus = response.Headers["X-NotificationStatus"];
                    string notificationChannelStatus = response.Headers["X-SubscriptionStatus"];
                    string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];
    
                    // Display the response from the Microsoft Push Notification Service.  
                    // Normally, error handling code would be here. In the real world, because data connections are not always available,
                    // notifications may need to be throttled back if the device cannot be reached.
                    TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus;
                }
                catch (Exception ex)
                {
                    TextBoxResponse.Text = "Exception caught sending update: " + ex.ToString();
                }
    
            }
    
    
    

サンプルを実行するには、最初にチャンネルを作成して URI を取得するプッシュ クライアント コードを実行します。次に、Web ページでこの URI を使用して Raw 通知を送信します。

サンプルを実行するには

  1. RawNotificationClient プロジェクトに戻って、これを実行します。Windows Phone エミュレーターが初期化した後に、アプリが起動します。しばらくすると、アプリによってプッシュ チャンネルの URI を含むメッセージが表示されます。この URI は Visual Studio デバッガーの [出力] ウィンドウにも表示されます。

    AP_Push_OutputWindow
    ヒントヒント:

    Visual Studio 2010 Express for Windows Phone では、既定の設定がデバッグ セッションの実行中に [出力] ウィンドウに表示されることはありません。[出力] ウィンドウを表示するには、[デバッグ] メニューで [Windows] を選択してから、[出力] を選択します。ウィンドウをスクロールして URI を確認します。

  2. これで通知チャンネルの作成が完了しました。Visual Studio デバッガーの [出力] ウィンドウからクリップボードに URI をコピーします。

  3. SendRaw プロジェクトに切り替えて、これを実行します。

  4. URI テキスト ボックスに、以前のプロジェクトからコピーした URI を貼り付けます。

  5. Raw 通知データのいくつかの値を入力します。[Raw 送信] をクリックします。

    AP_Push_SendRaw
  6. エミュレーターで実行中の Windows Phone アプリで、Raw 通知が受け取られるはずです。通知を受け取れるのは、アプリが実行されているときだけです。

    AP_Push_RawEvent

ここでは、ASP.NET ページから Windows Phone 上で実行されているアプリに Raw データを渡す方法について説明しました。

表示:
© 2015 Microsoft