GCM SERVER SIDE WITH ASP.NET — 1

Ulaş Erdegör
4 min readMar 28, 2016

--

Herkese merhabalar.

Edebiyata hayran, fakat edebiya ve dil bilgisi çok da iyi olmayan biriyim. Astronom diplomasına sahip bir yazılımcının “Blog Debelenişi” olmaz umarım.

Yazının başlığını İngilizce yazmakta ki amacım dilimizdeki karşılığının Ali ile Veli gibi komik olması ve biz araştıran yazılımcıların genelde İngilizce soru cümlelerini tercih ettiğini düşünmemdir.

https://developers.google.com/cloud-messaging/

Mobil cihaza uygulama indirildiğinde GCM ‘den bir RegistirationId almasını sağlarız. Daha sonra GCM ‘den dönen cevabı sunucumuza göndererek kayıt ederiz. Bildirim göndermek istediğimizde bu Id ile birlikte GCM ‘ye POST ederiz ve GCM isteği doğruladıktan sonra eşleşen cihazlara gönderir. Google bildirimlerin iletilmesi konusunda garanti vermediğini de kullanıcılara ilan etmekte fakat alanında en iyi hizmeti verdiğini söyleyebilirim.

Server-Side dediğimiz kısımda daha çok php ile yapılmış örnekler mevcut. Bende yakın zamanda Asp.net kullanma yollarını araştırıp kendi işimde kullandım. Ve burada “Paylaşmak güzeldir.” felsemizin emrettiğini yapmaya çabalayacağım.

http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat-app-part-2/

1- GELİŞTİRİCİ SAYFASIle Devoloper hesabımız olduğunu varsayarak bu sayfaya giriş yaptıktan sonra Get a configuration file tuşuna basarak uygulamayı tanıyacak APIKEY ‘i yaratmaya başlayalım.

Sonraki adım AppName(istediğiniz gibi yazabilirsiniz) , Android package name ise uygulamanız ile özdeş olmalıdır. Bu adım başarılı sonuçlandıktan sonra çıkan sayfada ENABLE GOOGLE CLOUD MESSAGING tuşuna basarak işlemi bitirelim.

Sunucumuzdan GCM ye istekte bulunacağımız Server API Key ve Gönderici Kimliğimiz Sender ID artık oluşmuş oldu. Alttaki tuşa basarak google-services.json dosyamızı da yarattıktan sonra bu dosyayı app/ veya mobile/ klasörlerinin altına atarak Geliştirici Sayfası ‘nda ki işlemleri bitirmiş olduk. Daha önce console sayfasına gidip, projenizi seçip API ayarlarını Enable edip daha sonra Credentials sayfasında server key oluşturma gibi adımları bu yaptığımız adımlar sayesinde geçmiş olduk. Google şu an ki console işlemleri ile işi inanılmaz kolay bir hale getirmiş.

Alternatif ingilizce bir yazıyı şuradan okuyabilirsiniz.

FD

2-VERİTABANI

Öncelikle MSSQL kullanarak uygulamamı indirip başarıyla yukardaki işlemleri yapan kullanıcıları kaydedeceğimiz tabloyu oluşturalım. Kullanıcıdan istediğiniz bilgilere göre burayı tasarlamanız gerekmektedir. Önerim; registirationId, phoneType(Android-Ios ayrımı için), phoneModel ve appVersion’ u kesinlikle kullanmanızdır. Kullanıcı bazlı özellikleri de isteyebilirsiniz.

tbl_Mobile_Push_Users

Sunucunuzdan gönderdiğiniz bildirimleri de kaydetmeniz gerekebilir. Bir mesaj tüm kullanıcılaranıza gönderilir fakat kullanıcı sayısı kadar aynı mesajı kaydetmek gereksiz iş sarfiyatıdır. Bu yüzden gönderilen mesajları tekil, GCM tarafından hata cevabı dönen mesajları ise kullanıcı bazlı başka bir tabloya kaydettim. GCM ‘den dönen cevapta “NotRegistered” (kullanıcı uygulamayı kaldırmış) yazıyor ise otomatik olarak tbl_Mobile_Push_Users tablomdan ilgili satırı siliyorum ve hatalı mesaj tablosuna yazdırmıyorum. Bunun sebebi zaten uygulamayı kullanmayan birine gönderilemeyen mesaj hatalı değildir.

tbl_Mobile_Push_Sent_Messages

pushType sütunu uygulamanın hangi sayfayı açacağını tutmaktadır. Örneğin pushType=0 uygulamayı direk açar iken, pushType=1 başka bir sayfayı açmakta. Client tarafında nasıl kullandığımı göreceksiniz.

success ve failure kısımları ise GCM tarafından dönen response ‘lardır. 1 ve 0 değerlerini alırlar. Bunu da bir sayaç ile kontrol ederek bir mesaj gönderme işleminin başarılı ve başarısız sayılarını gösterebiliriz.

tbl_Mobile_Push_Sent_Messages_Failure

Bu tabloda failure=1 dönen mesajların ait oldukları cihazların kimliği ile (registirationId) kaydediyorum. Başarısız mesajları tekrar yollamak istediğimde sadece buradaki kullanıcıları çağırabilirim.

SQL kısmında başka işlem yapmıyacağım. Tabiki profesyonel çalışmalarınızda storedProcedure kullanmanız önerimdir. Hem sunucu hem de veritabanı kısmındaki bağlantı, kaydetme gibi işlem kodlarını temel seviyede tuttum. Anlatımda o kadar ayrıntıya girmek istemedim.

Şu anda elimizde kimlik bilgilerimiz, veritabanımız ve buna ait üç adet tablomuz bulunmakta.

Server API Key,

Sender ID,

tbl_Mobile_Push_Users,

tbl_Mobile_Push_Sent_Messages

tbl_Mobile_Push_Sent_Messages_Failure

Sonraki adımımız Sunucu tarafı olacak. Umarım düşündüğüm kadar sıkmadan birşeyler anlatabilmişimdir. İlk elin günahı olmaz.

Güzel günler dilerim!

--

--