HMS Push Kit — Mobil Uygulamadan Bildirim Gönderme (Kotlin)

Ismail Oguzhan Ay
Huawei Developers - Türkiye
4 min readJun 18, 2020

Mobil Uygulama içerisinden HMS Push Kit kullanarak nasıl bildirim mesajı atabiliriz?

Herkese merhaba, bu yazımızda HMS Push Kit kullanarak, mobil uygulamamızdan nasıl bildirim atabiliriz? bu soru üzerine bir demo yapıyor olacağız. Öncelikle HMS Push Kit, Huawei Mobil Servislerinin bize sağladığı bildirim gönderme servisidir. Böylelikle, uygulamadaki ihtiyaca göre, HMS Push yönetim panelinden veya direkt olarak Huawei mobil cihazımızdan bildirim gönderme işlemini yapabiliriz.

Mobil uygulamamızın, Huawei App Gallery içerisinde tanımlı olması ve kit yönetimi ekranından Push Kit aktif durumda olmalıdır.

HMS Push Kit Servis Yapısı

HMS Push Kit ile konsol üzerinden veya direkt request atarak(server side) uygulamamızı kullanan kullanıcılarımıza bildirim gönderme işlemini gerçekleştirebiliriz. Konsol üzerinden arayüz yardımı ile belirlediğimiz yapıda bildirimlerimizi, tüm kullanıcılara, tek bir kullanıcıya veya bir topic içerisindeki kullanıcı kitlemize bildirimler gönderebiliriz.

Uygulamadan bildirim gönderebilmek için sırasıyla,

  1. Servisten access token almalı
  2. Cihazımız, push servisten token almış olmalı
  3. Push servisine, access token, cihaz id token ve bildirim içeriği ile birlikte istek gönderilmeli

HMS Push Kit Uygulama Yol Haritası

  1. Mobil Uygulamamızın App Gallery Connect bağlantısı yapılmış olmalı (Detaylı bilgi için -> HMS Push Kit)

2. App Gallery içerisindeki projemizin API seçeneklerinden Push Kit seçeneği seçili durumda olmalı

3. Mobil uygulama içerisinde dependency tanımlamaları

Projemizde build.gradle app içerisine aşağıdaki dependency eklemelerini yapmalıyız.

4. Mobil Uygulama içerisinde Push Kit için gerekli sınıfların ve servislerin hazırlanması

5. Cihaz ile uygulamadan bildirim gönderme işlemi

4. Mobil Uygulama içerisinde Push Kit için gerekli sınıfların ve servislerin hazırlanması

Resimde görüldüğü gibi sınıflarımız ve servislerimiz için gerekli yapıları oluşturmaya başlayalım. İlk olarak ihtiyacımız olan accessToken yapısını oluşturmak ve accessToken’ı almalıyız.

AccessToken.kt

Aşağıdaki gibi accessToken class modelimizi tanımlıyoruz. Bu sayede dönen requestlerimizi karşılıyor olacağız.

AccessTokenInterface.kt

Aşağıdaki interface yapımızda ise accessToken için göndereceğimiz requestin interface çatısını oluşturuyoruz. AccessToken alırken request içerisinde ihtiyacımız olan grant_type, client_secret ve client_id göndermeliyiz.

Client_secret ve client_id nereden öğrenebilirim ?

App Gallery Connect içerisinden Project Settings -> Convention altından ulaşabilirsiniz.

Yukarıda accessToken için gerekli olan class ve interface yapımızı oluşturduk. Şimdi sıra, retrofit kullanarak oluşturacağımız client yapısına geldi.

AccessTokenClient.kt

Aşağıdaki client class içerisinde, accessToken için retrofit client sınıfımızı oluşturduk. Base url olarak accessToken alacağımız oauth login adresimizi belirledik.

Bu noktada, accessToken tarafı için gerekli olan sınıf ve servis yapımızı kurguladık. Şimdi benzer yapıyı Notification için uygulayalım.

NotificationMessage.kt

Push servisinden dönen request için aşağıdaki gibi NotificationMessage sınıfımızı oluşturuyoruz. Push servisine yapacağımız istek sonrasında servisten bize code, msg ve requestId dönüyor olacaktır.

NotificationInterface.kt

Aşağıdaki interface yapımızda notification için göndereceğimiz requestin interface çatısını oluşturuyoruz. Request içerisinde ihtiyacımız olan authorization ve notificationMessageBody parametrelerini göndermeliyiz.

Buradaki authorization parametresi için, Bearer AccessToken parametresini gönderiyor olacağız.

Yukarıda model class ve interface yapılarımızı oluşturduk. Şimdi, notification için gerekli NotificationClient classımızı yazalım, sonrasında interface içerisinde belirttiğimiz NotificationMessageBody sınıfımızı yazıyor olacağız.

NotificationClient.kt

NotificationClient içerisinde, push göndereceğimiz end-point olan pushBaseUrl tanımı yapalım.

NotificationMessageBody.kt

Push request içerisinde göndereceğimiz 2 parametremiz var demiştik. Bunlar Authorization (Bearer AccessToken) ve NotificationMessageBody (Bildirim mesajımızın body kısmı için oluşturduğumuz sınıfımızda, title,body ve pushToken(cihaz token değeri) parametreleri bulunuyor.)

AccessToken ve NotificationMessage yapılarımız için gerekli geliştirmeleri tamamladıktan sonra, PushService sınıfımızı geliştirelim.

PushService.kt

PushService sınıfımızı HmsMessageService() sınıfına extend ederek 2 fonksiyonu override ediyoruz. Bunlar onNewToken() ve onMessageReceived() methodlarıdır.

Bu noktaya kadar, uygulamamız içerisinden bildirim gönderebilmemiz için gerekli olan class ve servis yapılarımızı kurguladık. Şimdi sıra, bu yapıları bir manager, PushManager, ile kullanalım.

PushManager.kt

PushManager sınıfımız içerisinde, 3 tane methodumuz bulunmaktadır. Bunlar, getDeviceIdToken(), getAccessToken() ve sendNotification() methodlarıdır.

  • getDeviceIdToken() methodu ile cihazımızın Token Id verisini aldığımız methoddur.
  • getAccessToken() methodu ile de oauth servisinden accessToken aldığımız methoddur.
  • sendNotification() methodu ile de bildirim gönderdiğimiz methoddur. sendNotification() methodu içerisine cihaz pushToken ve accessToken parametreleri alır.

PushManager sınıfımızı da oluşturduk, son olarak bu sınıfımız ile bildirim atmak istediğimiz event içerisinden örnek bir bildirim gönderelim.

PushActivity.kt

PushActivity adında bir aktivitemiz var. Bildirim göndermeye yarayan bir buton ekledik ve butonun clickListener içerisinde öncelikle cihazımızın Id token değerini alıp, sonrasında servis için getAccessToken() methodunu çağırdık. Böylece, accessToken değerini aldıktan sonra bildirim mesajımızı gönderdik.

5. Cihaz ile Uygulamadan Bildirim Gönderme İşlemi ve Ekran Görüntüleri

Arkadaşlar bu yazımızda, Android Kotlin dili ile HMS Push Kit kullanarak bir demo proje geliştirdik. Uygulama içerisinden HMS Push Kit servisi kullanarak bildirim gönderdik.

Yazımızın sonuna geldik, okuduğunuz için teşekkürler..

Kaynak kod için : github

Kaynaklar:

Farklı 2 kaynak olarak aşağıdaki yazıları da incelemenizi tavsiye ederim.

--

--