Windows Phone 8 ve Azure Mobil Servisler

Oldukça uzun zamandır (yaklaşık 4 ay 🙂 ) işe başlamış olmam ve okulumun hala devam ediyor olmasından dolayı yazamıyorum. Umuyorum bundan sonra daha çok yazma fırsatı bulabilirim. Bu yazımda aslında MSP olduğum dönemde hazırlamış olduğum Windows Phone 8 ve Azure Mobil Servisleri anlatan video kaydını paylaşacağım. Öncelikle diğer arkadaşlarında hazırlamış olduğu videoları birleştirip Youtube’a yükleyen eski MSP Lead’im ve şu anda ki iş arkadaşım Fatih Bekdemir’e teşekkür ederim. Benim hazırlamış olduğum bölüm uzun bir serinin 24. bölümüdür, tüm playlist’e

http://www.youtube.com/watch?v=CXNhanNPmA8&list=PL9ReGaZDkswEswygAyOTeU1r-DWsTDzO-&index=24

linkinden erişebilirsiniz. Bir sonraki yazımda görüşmek üzere…

Reklamlar

Azure ve Windows Phone push Notifications

Tüm takipçilerime ve ilk kez bu yazımı okuyacak olanlara merhabalar, bu yazımda Microsoft Azure ve Windows Phone 8 için push notificationlarının nasıl oluşturulacağından bahsetmek istiyorum.

Minimum gerekenler,

  • Windows Phone 8 SDK,
  • Windows Azure Hesabı

Windows Azure hesabı olmayanlar ve ilk kez denemek isteyenler ücretsiz 90 günlük deneme sürümüne http://www.windowsazure.com/en-us/ adresinden üye olabilirler.

Azure Mobil Servisleri

Öncelikle Azure yönetim portalından yeni bir mobil servis oluşturarak işlemimize başlıyoruz.

1

Yukarıdaki ekran görüntüsünde de görüldüğü üzere Compute>Mobile Service>Create dememiz bu işlem için yeterli olacaktır.

2

Karşımıza gelen bu yeni Create a Mobile Service ekranındaki formu doldurmamız gerekiyor, URL kısmı mobil servisiniz için bir web adresi olacaktır yani ekran görüntüsüne bakıldığına pushdeneme.azure-mobile.net bizim web adresimiz. Push servisleri kullanabilmemiz için birde veritabanına ihtiyacımız olacağından Create a new SQL database instance diyoruz. Region kısmında ise veritabanımızın hangi datacenter’da tutulmasını istediğimizi belirtmemiz gerekiyor.

3

Bu kısımda veritabanımızı oluşturmamız gerekiyor, Eğer daha önceden azure kullandıysanız ve bir veritabanınız mevcut ise bunu seçerek devam edebilirsiniz yada eğer yeniyseniz yeni bir veritabanı oluşturarak bu işlemleri tamamlayabilirsiniz.

Yukarıdaki işlemleri tamamladıktan sonra, uygulamamızın kullanacağı mobil servisini ve veritabanını oluşturduk. Şimdi sıra uygulamamızı oluşturmaya geldi.

4

Bundan sonrasında azure’un örnek olması açısından kullanıcılarına sunmuş olduğu hazır örneği kullanarak devam edeceğim, mobil servisi oluşturduktan sonra karşınıza yukarıdaki gibi bir ekran gelecektir. Eğer herhangi bir dashboard’la karşılaşacak olursanızda üst menüdeki dashboard seçeneğinin hemen yanında bulunan bulut ikonuna tıklamanız yeterlidir. Yukarıdaki ekrandan create a new windows phone app diyerek uygulamamıza devam edebiliriz.

5

Bu ekranda ise azure’un bize sadece bu örnek için sunmuş olduğu sihirbazı kullanarak Create TodoItem Table ile veritabanımızda uygulamamız için bir bir tablo oluşturacağız. Yazıyı uzatmak istemediğim için detaylı olarak azure veritabanından bahsetmek istemiyorum. Bu yüzden mümkün olduğunca kolay şekilde uygulamamızı yapacağız. Tablomuzu’da oluşturduktan sonra Download diyerek uygulamamızın hazır C#/Xaml kodunu indirip Visual Studio ile açabiliriz.

Şu an daha fazla devam etmeden önce burada bahsetmek istediğim bir önemli nokta var, uygulamamız azure ile nasıl iletişim kuracak. Solution explorer’dan App.xaml.cs kodunu açtığınızda farkederseniz böyle bir kod göreceksiniz.

public static PhoneApplicationFrame RootFrame { get; private set; }

        public static MobileServiceClient MobileService = new MobileServiceClient(
            "mobile-servis url'i",
            "app-key"
            );

bu kod bloğunda uygulamamıza ait url’i ve app-key’i belirtmemiz gerekiyor. Appkey’inizi diğer uygulamalarınızda öğrenmek istersenizde Get Started ekranından CONNECT AN EXISTING WINDOWS PHONE 8 APP dedeğinizde karşınıza gelen ekrandan görüntüleyebilirsiniz.
6Artık uygulamamıza ait push notificationlarımızı oluşturabiliriz.

App.xaml.cs dosyasında global olacak şekilde aşağıdaki objeyi yaratın

public static HttpNotificationChannel CurrentChannel { get; private set; }

Daha sonrasında ise Push notificationlarımız için bir channel oluşturmamız gerekiyor. Bunun içinde aşağıdaki methodu tanımlamanız yeterli olacaktır.

private void KanalOlustur()
{
    CurrentChannel = HttpNotificationChannel.Find("MyPushChannel");

if (CurrentChannel == null)
{
    CurrentChannel = new HttpNotificationChannel("MyPushChannel");
    CurrentChannel.Open();
    CurrentChannel.BindToShellTile();
}

}

Yukarıdaki kodun son satırında BindToShellTile’ı görmüşsünüz. Bu uygulamamızın shellTile notificationlarını kullanacağını belirtmektedir. Eğer bir toast kullanmak istiyorsanızda bu kısmı aşağıdaki gibi değiştirebilirsiniz.

CurrentChannel.BindToShellToast();

Şimdi ise sırada uygulamamız açıldığında bu methodu tetikleyecek olan kod bloğunu yazmak olucak. App.xaml.cs dosyasında Application_LaunchingEvent handler’ını bularak oluşturmuş oluduğunuz KanalOlustur methodunu çağırmanız yeterlidir. Bu işlemlerden sonra Application_Launching event handlerı aşağıdaki gibi görünecektir.

private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            AcquirePushChannel();
        }

Kodumuzda son olarak yapmamız gereken ise herhangi bir push notification göndermek istediğimizde göndermek istemiş olduğumuz notification kanalınıda belirtmemiz gerekmektedir. MainPage.xaml.cs dosyasını açtığınızda sınıfın en başındaki entity sınıfını görmüş olmanız gerekmektedir. Bu sınıfa aşağıdaki özelliği eklediğinizde artık azure servisimize veri gönderirken push kanalımızda göndermiş olacağız.

[DataMember(Name = "channel")]
 public string Channel { get; set; }

Artık son olarakta uygulamamızdan notificationlarımızı gönderme kodumuzuda ekleyip bu kısmı tamamlayabiliriz. Buton1_click eventine geldiğinizde bir InsertTodoItem satırının olduğu gözünüze çarpacaktır. Bu satırda listemize eklemiş olduğumuz elemanlar mobil servisimize ait veritabanında tutulmaktadır. burada bizim yapmamız gereken değişiklik aşağıdadır. Basitçe yapılacak öğemizi azure servisimize gönderirken yanında push kanalımızıda göndermekteyiz.

private void ButtonSave_Click(object sender, RoutedEventArgs e)
        {
            var todoItem = new TodoItem { Text = TodoInput.Text, Channel=App.CurrentChannel.ChannelUri.ToString() };
            InsertTodoItem(todoItem);
        }

Şimdilik uygulamamızın kaynak koduyla işimiz bitti, artık azure veritabanımızı push notification göndermesi için ayarlayabiliriz. Bunun için üstte yer alan menüden önce Data’yı daha sonrasında ise tablonuzu seçiniz.

7

Karşınıza gelen ekran size tablonuzda herhangi bir veri olmadığını söylemektedir, henüz data göndermedik. Yine üstteki menüden Script’i seçerek, veritabanımıza herhangi bir veri girildiğine yapılacak olan işlemi belirtmemiz gerekiyor. Amacınız sadece veriler üzerinde ekleme,silme, okuma veya güncelleme yapmak ise burada herhangi bir değişiklik yapmanıza gerek yoktur. Biz bir push notification göndereceğimiz için insert fonksiyonunda aşağıdaki değişikliği yapmamız gerekiyor.

function insert(item, user, request) {
    request.execute({
        success: function () {
            // Write to the response and then send the notification in the background
            request.respond();
            push.mpns.sendFlipTile(item.channel, {
                title: item.text
            }, {
                success: function (pushResponse) {
                    console.log("Sent push:", pushResponse);
                }
            });
        }
    });
}

Uygulamınızda tile notification yerine toast göstermek istiyorsanızda yukarıdaki javascript kodunun yerine aşağıdakini kullanabilirsiniz.

function insert(item, user, request) {
request.execute({
        success: function(){
            request.respond();
            push.mpns.sendToast(item.channel,{text1:'You have new message',
            text2:item.message,param:'/SendMessage.xaml?receiver='+item.sender},{
                success:function(pushResponse){

                      console.log("Sent push:",pushResponse)
            }
    });
        }
    });
}

Evet, sonunda uygulamamızı ancak tek bir eksiğimiz kaldı, oda tabiki de uygulamamıza push notificationlarını kullanacağını belirten izinleri ayarlamak. Visual Studio Solution Explorer’dan Properties -> WMAppManifest.xml dosyasını açarak arayüzden Capabilities’i seçiniz.

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Şimdi F5’e basarak uygulamanızı kontrol edebilirsiniz. Ancak uygulamadan bir push notification göndermeden önce Tile eklemeyi unutmayın. Bu konuyla ilgili herhangi bir sorusu olanlar yazının altındaki yorum kısmını kullanabilirler.

Bir sonraki yazımda görüşmek üzere.

Not: Uygulamadaki kodların bazı kısımları, http://www.windowsazure.com’dan alınmıştır.