Mobile Services JS Backend - Push Notification

Bu yazıda Azure Mobile Services Push özelliğinden bahsedeceğim. Mobile Services üzerinden bir kaç satırlık JS kodu ile Windows Phone, Windows, IOS, Android cihazlara push notification göndermeniz mümkün. Visual Studio ile gelen özellikler sayesinde bu özelliğin Windows veya Windows Phone projelerine eklemek oldukça kolay, Universal App geliştiriyorsanız bu özelliği iki proje içinde implement etmeniz gerekecek.

Bu işlemi yapabilmemiz için bir Windows Store Dev Center üyelğine ve bir Azure Mobile Services'a ihtiyacımız var.

Ben örnek proje olarak Windows Store App yapacağım. Yeni bir Windows Store App yaratıyoruz ve solution explorer'da proje üzerine sağ tuş ile tıklayarak Add -> Push Notification'a tıklıyoruz. Karşınıza çıkan pencerede Next'e tıklıyoruz ve bizden Microsoft Account istiyor. Bu account sizin Windows Store Dev Center account'unuz olmalı. Daha sonra uygulamanızın Store ile eşleştirilmesi gerekiyor. Daha sonra azure mobile services ile eşleştirmeniz için Visual Studio size yardımcı olacak. Daha sonra finish butonu ile açılan pencereyi tamamlıyoruz ve projeye bizim için bir kaç satır kod ekliyor.

Projemize eklenen kodlara bakalım,

   

Solution Explorer

   

Gördüğünüz gibi push.register.cs adında bir dosya eklendi. İçeriğine baktığımızda MobileServices client nesnesi üzerinden Register olduğunu göreceğiz. Aslında mantık olarak şu şekilde çalışmakta, uygulamanız kapalı bile olsa push notification gelebilmeli ve her uygulamanın push notificationi için ayrı ayrı listener olmaması için bu push notification alma işi işletim sistemi düzeyinde handle ediliyor. Uygulama işletim sisteminden bir channel request ediyor, ve işletim sistemi bizim uygulamamız için bir channel yaratıyor, bu channel'in uri'sini mobile service'e gönderiyoruz ve daha sonra push notification atmak istediğimizde, istek Windows Notification Service'lare gönderiliyor ve bu service'ler bizim cihazımıza notification'i push ediyor. OS requesti alıyor ve notificationi gösteriyor. Aralara girip müdahale etmemizde mümkün olsada genel yapı bu şekilde çalışıyor. Aşağıdaki diagram konuyu özetliyor.

   

Push Notification Diagram

   

Kodları inceleyim,

Yukarıdaki kodlarda gördüğünüz gibi ilk önce CreatePushNotificationChannelForApplicationAsync methodu ile channel yaratılıyor ve RegisterNativeAsync(channel.Uri); methodu ile yaratılmış channel'in uri'si azure mobile service'e gönderiliyor. Daha sonrada test amaçlı olarak InvokeApiAsync methodu ile bir custom api (notifyAllUsers) çağrılıyor. Bu UploadChannel methodu App.xaml.cs içerisinden uygulama açılırken çağırılıyor ve uygulama açılırken kendisini azure mobile service'a push notification için register etmesi sağlaniyor. Haliyle uygulama açılır açılmaz notification geliyor. Çünkü notifyAllUsers cağırılıyor, bu cağrıyı iptal edip sadece register edebilirsiniz.

   

Şimdi gidelim ve bu custom api ne işe yarıyor bunu inceleyelim. Azure Management Portal'dan veya Visual Studio Solution Explorer'dan ilgili Mobile Services altında notifyAllUsers.js kodlarına ulaşabilirsiniz. Aşağıdaki kodların içerisinde açıklamaları bulabilirsiniz.

Uygulamayı çalıştırdığınız push notification geldiğini göreceksiniz.

   

Push Notification

Örneğin sizde Mobile Services Scheduler ile her 15 dk'da bir haber sitelerini kontrol edip, son dakika gelişmesi var ise kullanıcılarınıza push notification atabilirsiniz.

Kaynak kodları buradan indirebilirsiniz.