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

Windows Phone 8 用のタイル通知を送受信する方法

2014/06/18

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

このトピックでは、Microsoft Push Notification Service にタイル通知を送信し、Windows Phone で固定されているアプリケーションのタイルを更新するのに必要な手順を説明します。タイル通知およびその使用方法については、「Windows Phone 8 のプッシュ通知」を参照してください。

完全なタイル通知のサンプルをダウンロードできます。

重要:重要:

このトピックで説明する、Web サーバー上の ASP.NET Web ページからタイル通知を送信する手順では、完全版の Visual Studio または無料の Visual Studio Express for Web が必要です。

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

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

重要:重要:

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

タイル通知を受信するプッシュ クライアントを作成するには

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

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

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

    
    using Microsoft.Phone.Notification;
    
    
  4. タイルの更新に使用する画像としてグラフィックスを 2 つか 3 つ作成します。たとえば、Microsoft ペイントを使用して、173 x 173 ピクセルで、赤、緑、青の単色の 3 つの .jpg ファイルを作成します。 ファイルには、Red.jpg、Green.jpg、Blue.jpg という名前を付けます。

  5. このグラフィックス ファイルをプロジェクトに追加するには、TileNotificationSample プロジェクトを右クリックし、[追加]、[既存の項目] の順にクリックします。作成した 3 つの画像を選択し、プロジェクトに追加します。

  6. ソリューション エクスプローラーで Red.jpg を選択します。[プロパティ] ウィンドウで、[ビルド アクション] を [コンテンツ] に設定して、このグラフィックスを .xap ファイルに含めます。他の .jpg ファイルについても、この手順を繰り返します。

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

    
            public MainPage()
            {
                /// Holds the push channel that is created or found.
                HttpNotificationChannel pushChannel;
    
                // The name of our push channel.
                string channelName = "TileSampleChannel";
    
                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.Open();
    
                    // Bind this new channel for Tile events.
                    pushChannel.BindToShellTile();
    
    
                }
                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);
    
                    // 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()));
    
                }
            }
    
    
    
  8. 次に、イベント ハンドラーのコードを追加します。最初のイベント ハンドラーは 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()));
                    
                });
            }
    
    
  9. 次のイベント ハンドラーはエラー処理用です。電話の場所やサービスによってデータ接続が変わる可能性があるため、コードでは、通知エラーを適切に処理する必要があります。

            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))
                        );
            }
    
    

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

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

重要:重要:

タイル画像のリモート インターネット URI を使用する必要がある場合は、次の手順を実行してください。

  1. リモート画像ファイルのサイズが 150 KB 未満であることを確認します。

  2. 画像が 60 秒以内でダウンロードできることを確認します。

  3. HttpNotificationChannel オブジェクトに関して、BindToShellTile(Collection<Uri>) メソッドでリモート ベース URI を指定する必要があります。

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

タイル通知を送信するための ASP.NET ページを作成するには

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

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

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

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

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

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

    コントロールの型

    コントロール ID

    コントロールのテキスト

    TextBox

    TextBoxUri

    URI を入力:

    TextBox

    TextBoxTitle

    タイトルを入力:

    TextBox

    TextBoxBackgroundImage

    画像を入力:

    TextBox

    TextBoxCount

    カウントを入力:

    TextBox

    TextBoxBackTitle

    背面のタイトルを入力:

    TextBox

    TextBoxBackBackgroundImage

    背面の背景画像を入力:

    TextBox

    TextBoxBackContent

    背面のコンテンツを入力:

    Button

    ButtonSendTile

    タイル通知の送信:

    TextBox

    TextBoxResponse

    応答:

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

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SendTile.aspx.cs" Inherits="SendTile.SendTile" %>
    <!-- 
        Copyright (c) 2011 Microsoft Corporation.  All rights reserved.
        Use of this sample source code is subject to the terms of the Microsoft license 
        agreement under which you licensed this sample source code and is provided AS-IS.
        If you did not accept the terms of the license agreement, you are not authorized 
        to use this sample source code.  For the terms of the license, please see the 
        license agreement between you and Microsoft.
    -->
    
    <!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">
    
    <body>
        <form id="form1" runat="server">
        <div>
        
            <br />
            Enter URI:</div>
        <asp:TextBox ID="TextBoxUri" runat="server" Width="666px"></asp:TextBox>
        <br />
        <br />
        Enter Front Title:<br />
        <asp:TextBox ID="TextBoxTitle" runat="server"></asp:TextBox>
        <br />
        <br />
        Enter Front Background Image:<br />
        <asp:TextBox ID="TextBoxBackgroundImage" runat="server"></asp:TextBox>
        <br />
        <br />
        Enter Front Count:<br />
        <asp:TextBox ID="TextBoxCount" runat="server"></asp:TextBox>
        <br />
        <br />
        <br />
        Enter Back Title:<br />
        <asp:TextBox ID="TextBoxBackTitle" runat="server"></asp:TextBox>
        <br />
        <br />
        Enter Back Background Image:<br />
        <asp:TextBox ID="TextBoxBackBackgroundImage" runat="server"></asp:TextBox>
        <br />
        <br />
        Enter Back Content:<br />
        <asp:TextBox ID="TextBoxBackContent" runat="server"></asp:TextBox>
        <br />
        <br />
        <br />
        <asp:Button ID="ButtonSendTile" runat="server" onclick="ButtonSendTile_Click" 
            Text="Send Tile Notification" />
        <br />
        <br />
        Response:<br />
        <asp:TextBox ID="TextBoxResponse" runat="server" Height="78px" Width="199px"></asp:TextBox>
        </form>
    </body>
    </html>
    
    
  7. 次の using ディレクティブを SendTile.aspx.cs ファイルの先頭に追加します。

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

                 protected void ButtonSendTile_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 Tile notification to the Microsoft Push Notification Service.
                    // HTTP POST is the only method allowed to send the notification.
                    sendNotificationRequest.Method = "POST";
    
                    // The optional custom header X-MessageID uniquely identifies a notification message. 
                    // If it is present, the same value is returned in the notification response. It must be a string that contains a UUID.
                    // sendNotificationRequest.Headers.Add("X-MessageID", "<UUID>");
    
                    // Create the Tile message.
                      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>";
     
                    // Set the notification payload to send.
                    byte[] notificationMessage = Encoding.Default.GetBytes(tileMessage);
    
                    // Set the web request content length.
                    sendNotificationRequest.ContentLength = notificationMessage.Length;
                    sendNotificationRequest.ContentType = "text/xml";
                    sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token");
                    sendNotificationRequest.Headers.Add("X-NotificationClass", "1");
    
    
                    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 を使用して、タイルを送信します。

サンプルを実行するには

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

    AP_Push_OutputWindow
    ヒントヒント:

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

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

  3. エミュレーターで実行しているWindows Phone アプリケーションで、アプリケーションの一覧で [TileNotificationClient をタップしたまま押さえ、[スタート画面に追加] を選択して、アプリケーションのタイルをスタート画面に固定します。これが更新されるタイルです。

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

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

  6. タイルのタイトル、カウント、および画像を入力します。画像名として .jpg ファイルの完全名 (Red.jpg など) を使用します。

    AP_Push_SendTile

    BindToShellTile(Collection<Uri>) メソッドを使用することで、リモート画像ファイルの URI を送信することもできます。

  7. [タイルの送信] ボタンをクリックします。スタート画面に追加したタイルが更新されます。タイルの背面のプロパティを設定している場合は、数秒後、タイルが裏返しになり、タイルの背面が表示されます。[タイトル] などのフィールドを空白にした場合、そのフィールドは更新されません。

    AP_PushTileUpdate

ここでは、ASP.NET ページを使用して Windows Phone に通知を送信することによって、タイルを更新する方法について説明しました。

表示:
© 2015 Microsoft