Windows Phone CMS'den Notification Gönderme

Toast Notifications uygulamadaki bir olaya bağlı olarak oluşturulan notification çeşididir. Örneğin RSS’ten veri çeken bir uygulama düşünüldüğünde yeni gelen bir kayıt için kullanıcıya haber vermek isteyebilirsiniz veya uygulamanızda mesajlaşma gibi özellikler varsa yeni mesajın  geldiğini bildirebilirsiniz. Bunların dışında haberler, hava durumu gibi birçok örnek verilebilir.

Senaryo şu şekilde işliyor;

Uygulama işletim sistemine "Bana birisi Toast Notification yollayacak.." diyor ve işletim sistemi sonrasında Microsoft'un Push Notification Server'ına bağlanıyor ve diyor ki "Sana benim uygulamam için bir notification yollanacak nereye yollansın ?" Telefonun işletim sistemi uygulamaya bir Endpoint atıyor ve işletim sistemi diyor ki "Bu endpoint'e Notification gönderilirse ben onu senin adına göstericem".Sonrasında uygulama bu endpoint'i alıp kendi local server'ına "Bu ID'li cihaz için şu endpoint'e mesaj yollarsan görünecektir." diyor ve gönderilen mesaj uygulama ekranında görünüyor.

 

 

  • Aşağıdaki örnek uygulama bir Asp.Net sayfasından Windows Phone uygulamasına nasıl Toast Message gönderilir açıklıyor olacaktır

 

Window Phone Projesi. MainPage.xaml sayfası

 

HttpNotificationChannel Channel;  //Global değişkenimiz

public MainPage()

{

InitializeComponent();

 

Channel = HttpNotificationChannel.Find("Find"); //Kayıtlı kanal var mı kontrolünün yapıldığı yer

if (Channel == null)

{

Channel = newHttpNotificationChannel("Kanal");

 

//Kullanacağımız eventleri oluşturuyoruz

Channel.ChannelUriUpdated += Channel_ChannelUriUpdated;

 

Channel.ShellToastNotificationReceived +=

Channel_ShellToastNotificationReceived;

 

Channel.Open();

Channel.BindToShellToast();

}

}

void Channel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)

{

StringBuilder message = newStringBuilder();

string relativeUri = string.Empty;

 

message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString());

 

 

foreach (string key in e.Collection.Keys)

{

message.AppendFormat("{0}: {1}\n", key, e.Collection[key]);

 

if(string.Compare(key,"wp:Param",System.Globalization.CultureInfo.InvariantCulture,

System.Globalization.CompareOptions.IgnoreCase) == 0)

{

relativeUri = e.Collection[key];

}

}

 

// Toast mesajı için ekranda dialog çıkartır

Dispatcher.BeginInvoke(() => MessageBox.Show(message.ToString()));

}

 

 

 

void Channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)

{

Dispatcher.BeginInvoke(() =>

{

System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());

MessageBox.Show(String.Format("Channel Uri is {0}",

e.ChannelUri.ToString()));

 

});

 

}

 

 

Toast mesajının gönderileceği Asp.Net Projesi

Gonder.aspx Design sayfası

 

<htmlxmlns="http://www.w3.org/1999/xhtml">

<headid="Head1"runat="server">

    <title></title>

</head>

<body>

    <formid="form1"runat="server">

        <div>

 

            <br/>

            Enter URI:

        </div>

        <asp:TextBoxID="TextBoxUri"runat="server"Width="666px"></asp:TextBox>

        <br/>

        <br/>

        Enter Title:<br/>

        <asp:TextBoxID="TextBoxTitle"runat="server"></asp:TextBox>

        <br/>

        <br/>

        Enter Subtitle:<br/>

        <asp:TextBoxID="TextBoxSubTitle"runat="server"></asp:TextBox>

        <br/>

        <br/>

        <br/>

        <asp:ButtonID="ButtonSendToast"runat="server"OnClick="ButtonSendToast_Click"

            Text="Send Toast Notification"/>

        <br/>

        <br/>

        Response:<br/>

        <asp:TextBoxID="TextBoxResponse"runat="server"Height="78px"Width="199px"></asp:TextBox>

    </form>

</body>

 

</html>

 

 

Gonder.aspx Code Behind

    protectedvoid ButtonSendToast_Click(object sender, EventArgs e)

        {

            try

            {

                string subscriptionUri = TextBoxUri.Text.ToString();

 

 

                HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri);

                sendNotificationRequest.Method = "POST";

 

                string toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +

                "<wp:Notification xmlns:wp=\"WPNotification\">" +

                   "<wp:Toast>" +

                        "<wp:Text1>" + TextBoxTitle.Text.ToString() + "</wp:Text1>" +

                        "<wp:Text2>" + TextBoxSubTitle.Text.ToString() + "</wp:Text2>" +

                        "<wp:Param>/Page2.xaml?NavigatedFrom=Toast Notification</wp:Param>" +

                   "</wp:Toast> " +

                "</wp:Notification>";

 

                byte[] notificationMessage = Encoding.Default.GetBytes(toastMessage);

 

                sendNotificationRequest.ContentLength = notificationMessage.Length;

                sendNotificationRequest.ContentType = "text/xml";

                sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast");

                sendNotificationRequest.Headers.Add("X-NotificationClass", "2");

 

 

                using (Stream requestStream = sendNotificationRequest.GetRequestStream())

                {

                    requestStream.Write(notificationMessage, 0, notificationMessage.Length);

                }

 

               

                HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();

                string notificationStatus = response.Headers["X-NotificationStatus"];

                string notificationChannelStatus = response.Headers["X-SubscriptionStatus"];

                string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];

 

                TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus;

            }

            catch (Exception ex)

            {

                TextBoxResponse.Text = "Exception caught sending update: " + ex.ToString();

            }

        }

 

 

İlk olarak Client’ı yani WinPhone projemizi çalıştırıyoruz VisualStudio’da bulunan Output sayfasında uygulamamazın oluşturduğu URL'i aşağıda olduğu şekilde alıyoruz

 

Sonrasında Server tarafını yani Asp.Net projemizi çalıştırıyoruz Gerekli yerleri doldurup Send Toas Notification butonuna tıklıyoruz ve göndermiş olduğumuz mesaj Windows Phone Uygulamamızda resimde olduğu gibi görünüyor.

 

Uygulamanın kaynak kodlarını buradan indirebilirsiniz. 

 

Comments (1) -

  • Çok yararlı bir örnek olmuş, tşk.

Add comment