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.