Diyelim ki bir Windows Phone uygulaması geliştiriyorsunuz ve uzaktaki bir veri kaynağından periyodik olarak bilgi çekip, bu bilgiyi live tile notification ya da toast notification olarak göstermek istiyorsunuz. Bunu yapabilmek için iki seçeneğiniz bulunuyor. Ya uygulamanızda background agent kullanarak belirli sürelerde sunucudan yeni veri isteğinde bulunacaksınız ya da yeni veri oluştuğunda sunucudan istemci uygulamanıza push notification göndereceksiniz.

Windows Phone için hisse senedi değerleri ve son depremler gibi anlık veri güncellemeleri gerektiren uygulamalar geliştirecekseniz background agent pek de doğru bir çözüm olmayacaktır. Çünkü background agent kullanmanın bazı dezavantajları bulunmaktadır. Bunlardan en önemlisi genellikle 30 dakikada bir çalışıyor olmasıdır. Doğal olarak bu da anlık veri güncellemesi gerektiren uygulamalarınız için çok uzun bir süre. Diğer bir dezavantajı ise işletim sisteminde cihazın pil ömrünü korumak için sadece 6 tane background agent’ın çalışmasına izin veriliyor olmasıdır, özellikle cihaz pil tasarruf moduna geçtiğinde background agent’ın çalışmama ihtimali de, göz önünde bulundurulması gereken önemli noktalardan birisi.

Push notification ise background agent’ın aksine daha sıklıkla ve herhangi bir anda veri gönderimi sağlayabilmektedir. Düşününce her şey kulağa hoş geliyor ancak push notification için de bazı dezavantajlar yok değil. Özellikle pil tasarrufu modunda veya cihazın notification trafiğinin yoğun olduğu durumlarda, verinin iletileceğinin garantisi yoktur.

Peki nasıl çalışır?

Windows phone uygulamanıza push notification gönderebilmeniz için öncelikle yapmanız gereken Push Client Service'a bir Channel Uri isteğinde bulunmak. Push Client Service kendisine gelen istek doğrultusunda MPNS ( Microsoft Push Notification Service ) ile iletişime geçip bir kanal adresi alır ve uygulamanıza gönderir.

Push Notification Cycle

Daha sonra elinizdeki bu kanal bilgisini, uygulamanıza push notification gönderecek olan servisinize iletmeniz gerekiyor. Çünkü servis, veri göndereceği zaman ilgili veriyi bu kanal üzerinden MPNS’e gönderir. MPNS de ilgili push notification’ı uygulamanıza yönlendirir.

Azure Mobile Services'da Push Notification

Windows Phone ‘da tile, badge, raw ve toast notification gibi pek çok notification türü bulunmaktadır. Aslına bakarsanız özünde hepsi birer HTTP POST mesajıdır, tek farkları her biri için farklı payload yapılarının bulunmasıdır. Örneğin uygulamanıza bir toast notification göndereceğiniz zaman ilgili kanal adresini kullanarak servisinizden aşağıdaki gibi bir payload’u HTTP POST etmeniz gerekmektedir.

<?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>  

Azure Mobil Servislerde ise işler çok daha kolay. Tüm bu işlemleri sizin yerinize mobil servisiniz zaten hallediyor. Size sadece mobil servisinizde push notification namespace’i altındaki ilgili fonksiyonları kullanmak kalıyor.

Mobil servisinizden Windows Phone uygulamanıza push notification gönderebilmek için öncelikle uygulamanızın ilk açılışında kanal adresi almanız gerekiyor. Çünkü mobil servisiniz bu kanal adresini kullanarak uygulamanıza push notification göndermektedir.

public HttpNotificationChannel PushChannel { get; private set; }

private void RequestPushChannel()  
{
    PushChannel = HttpNotificationChannel.Find("PushDemoChannel");
    if (PushChannel == null)
     {
        PushChannel = new HttpNotificationChannel("PushDemoChannel");
        PushChannel.Open();
        PushChannel.BindToShellToast();
     }
}

Push Client Service'ten aldığınız kanal bilgisine yukarıda gibi BindToShellToast metoduyla toast notification aboneliği bind etmeniz gerekiyor. Tabi her şey sadece kanal bilgisini almakla bitmiyor, alınan bu kanalın push notification gönderecek olan mobil servisinize gönderilmesi gerekiyor. Mobil servise gelen kanal bilgisini de bir tabloda tutmak ve notification gönderileceği zaman bu tablodan okumak sizin için kolaylık sağlayacaktır.

Gelelim yazımızın temel amacına :) Mobil servisinizden toast notification göndermek için de aşağıdaki gibi bir script işinizi görecektir. İstemci tarafında almış olduğum kanal bilgisini item nesnesi ile mobil servisime gönderiyorum. Artık elimde cihaz ile iletişim kurabileceğim bir kanal bilgisi var. Mobil servisimdeki push notification ile ilgili hazır script kütüphanesini kullanarak aşağıdaki gibi toast notification gönderiyorum.

Mobile Service Push Notification

About the Author