Jump to content

Android Uygulamasına Bildirim Göndermek


umutbsl
 Share

Recommended Posts

Android uygulamanıza uzaktan bildirim test vs göndermek için bir çok servis mevcut fakat ingilizce ve birçoğu paralı turkcell'in servisi bedava hemde ingilizce üye oluyoruz http://push.turkcell.com.tr/ 

bunu indirip uygulamamıza entegre ediyoruz sonra push.turkcell.com.tr den bildirim ve testlerimizi gönderiyoruz

https://github.com/Turkcell/PushNotification_android_sdk

 

 

Turkcell Push SDK Android Entegrasyon Kılavuzu Giriş

Turkcell Push SDK sayesinde Android uygulamalarınıza kolayca push bildirimlerini alabilme yeteneğini kazandırabilirsiniz. Bu doküman da bir Android uygulamasına Turkcell Push SDK entegrasyonunun nasıl yapılacağı anlatılmıştır.

SDK’nın Projeye Library Project Olarak Eklenmesi

Turkcell Push SDK’nın dağıtımı Android Library Project olarak yapılmaktadır. Source codelar derlenmiş olarak libs klasörünün altında bulunmaktadır. minSdkVersion olarak API Level 8kullanılmaktadır. Bunun sebebi google-play-services_lib library’sinin minSdkVersion olarak API Level 8’i kullanmasıdır.

SDK’nın bir uygulama eklenmesinin klasik bir Android Library Projesinin projeye eklenmesinden bir farkı yoktur. İlk önce Library’i eklemek istediğimiz projenin üzerine gelip sağ tıklıyoruz. Açılan pencereden projenin Properties’ine giriyoruz. Projenin properties’ine girdikten sonra solda bulunanAndroid tabına geliyoruz. Bu tabın en altında bulunan Add butonuna basıyoruz. Açılan penceredenPushNotificationSDK’yı bulup seçip Ok butonuna tıklıyoruz. Burada önemli olan projemiz ile library’inin aynı dosya dizininde bulunması gerektiğidir. Yoksa library eklemede problemlerle karşılaşılabilir. Ekledikten sonra Ok butonuna basıp Properties penceresini kapatıyoruz. Library projesini başarılı bir şekilde ekledikten sonra kendi uygulamamız içinde bulunan project.propertiesdosyasının en altına manifestmerger.enabled = true ifadesini ekliyoruz. Bunu yapmamızın sebebi library projesi içinde bulunan AndroidManifest.xml dosyası içinde bulunan değerlerin bizim uygulamamız içinde bulunan AndroidManifest.xml dosyası ile derleme esnasında birleştirilmesini sağlamaktır.

PROJECT.PROPERTIES

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-18
android.library.reference.1=../PushNotificationSDK
manifestmerger.enabled=true

Turkcell Push Server Üzerinde Uygulamanın Oluşturulması

Uygulamanıza Turkcell Push SDK entegrasyonu yapabilmeniz için öncelikle Push Server üzerinde uygulama kaydı oluşturmalısınız. Bir Android uygulamasını Push Server’a kaydetmek için aşağıdaki bilgiler ile Push Server sorumlusuna başvurmanız gerekmektedir.

Alan İsmi

Alan Açıklaması

Uygulama Adı

Push Server üzerinde uygulamanıza vermek istediğiniz isim. Uygulamanızın birden fazla platformda yer alabileceğini düşünerek uygulama isminde platform adına da yer vermek faydalı olabilir.

Güvenlik Anahtarı

Turkcell PushServer tarafından otomatik oluşturulan bir SecretKey

GCM Api Key

https://cloud.google.com/console#/project sitesi üzerinden açılmış bir projenin Google Cloud Messaging for Android Api’sini enable ettikten sonra alınan API KEY değeri

Örnek değer aşağıdakine benzer bir değer:
AIzaSyCOb-sAb6yIydP3xVvL_Kmd1cTcXvmq27w

Paket Adı

Library Projenin eklendiği uygulamanın paket adı

Bu bilgiler ile birlikte uygulamanız oluşturulduğunda size Turkcell Android SDK Uygulama Numarasıbilgisi iletilecektir.

AndroidManifest Tanımlamaları

Uygulamamızın atılan push mesajlarından haberdar olabilmesi için AndroidManifest.xml dosyası içine bazı tanımlamaların yapılması gerekmektedir.

İlk önce eklememiz gereken kısım uygulama izinleridir. Bunu aşağıdaki şekilde yapıyoruz. Aşağıdapaketadı şeklinde yazılan yere kendi uygulamamızın paket adını yazmamız gerekmektedir.

<permission
android:name="paketadı.permission.C2D_MESSAGE" android:protectionLevel="signature" />

<uses-permission
android:name="paketadı.permission.C2D_MESSAGE" />

<uses-permission
android:name="paketadı.pushnotification.RECEIVER" />

<permission
android:name="paketadı.pushnotification.RECEIVER" android:protectionLevel="signature" />

İzinleri ekledikten sonra aşağıdaki receiver tanımlamalarını eklememiz gerekmektedir. Aşağıda paketadı ile belirtilen yerlere yine uygulamamızın paket adı bilgisini yazmamız gerekmetedir.eklediğimizpaket ile belirtilen yere de PushNotificationReceiver sınıfını uygulamamızda hangi paketin altına koyduysak oranın dizin adını vermemiz gerekmektedir. Atılan push mesajları PushNotificationSDK tarafından bu sınıfa gönderilecektir.

<receiver android:name="tr.com.turkcellteknoloji.pushnotificationsdk.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="paketadı" />
</intent-filter>
</receiver>

<receiver
android:name="eklediğimizpaket.PushNotificationReceiver" android:permission="paketadı.pushnotification.RECEIVER" >

<intent-filter>
<action android:name="tr.com.turkcellteknoloji.pushnotificationsdk.RECEIVER" />

<category android:name="paketadı" />
</intent-filter>
</receiver>

Örnek PushNotificationReceiver sınıfı aşağıdaki gibi olabilir. Burada collapse_key parametresi ile atılan push mesajın içeriğine ulaşılabilir. from parametresi ile atılan push mesajın hangi serverdan geldiğinin id’sine ulaşılabilir. Bu ID aslında bizim register olurken kullandığımız senderId parametresi ile aynıdır(SenderID sonraki kısımlarda anlatılacaktır). Bu parametrelerin haricinde uygulama bazında tanımlanan payload(PushServer sorumluları tarafından sizin isteğiniz doğrultusunda oluşturulabilir) parametrelerine aşağıdaki şekilde keylerini vererek ulaşabiliriz.

public class PushNotificationReceiver extends BroadcastReceiver {

private NotificationManager mNotificationManager;
public static final int NOTIFICATION_ID = 1;

String message;

@Override
public void onReceive(Context context, Intent intent) {

/** All push message containts this values */
message = intent.getStringExtra("collapse_key");
Log.d("PushNotificationReceiver", "message:" + message);
Log.d("PushNotificationReceiver", "from:" + intent.getStringExtra("from"));

/** Sample Key Values (First, these must be added from Turkcell push server) */
Log.d("PushNotificationReceiver", "key:" + "video, " + "value:" + intent.getStringExtra("video"));
Log.d("PushNotificationReceiver", "key:" + "image, " + "value:" + intent.getStringExtra("image"));
Log.d("PushNotificationReceiver", "key:" + "www, " + "value:" + intent.getStringExtra("www"));

/** Show Sample Notification*/

mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(context, MainActivity.class), 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
context).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("GCM Notification")
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
.setContentText(message);

mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}

}

SDK Fonksiyonları

Turkcell Push SDK’nın en önemli sınıfı NotificationManager sınıfıdır. İşlemlerin hemen hepsi bu sınıfın üzerindeki static Instance özelliği üzerinde yapılmaktadır.

Ayarların Atanması

NotificationManager sınıfı üzerindeki fonksiyonlar çağırılmadan önce bu sınıfın gerekli bilgiler ile hazırlanması gerekmektedir. NotificationManager sınıfı init metodu aracılığıyla gerekli bilgileri kabul etmektedir. Ayarlar NotificationSettings sınıfı içerisinde tutulmaktadır. Örnek kullanımı aşağıdaki gibidir.

/* Initialize PushNotification SDK */
NotificationSettings notificationSettings = new NotificationSettings();
notificationSettings.setApplicationId(DEFAULT_APP_ID); notificationSettings.setSecretKey(DEFAULT_SECRET_KEY);
notificationSettings.setSenderId(DEFAULT_SENDER_ID);

/* initalize optional parameter these are not necessarry */
notificationSettings.setCustomId("customId");
notificationSettings.setGenericParam("resolution768x480");

try {
NotificationManager.getInstance().init(this, notificationSettings);
} catch (Exception e) {
e.printStackTrace();
}

Buradaki ApplicationIdSecretKey ve SenderID değerleri belirtilmesi zorunlu alanlardır. Bu alanların boş olması durumunda init metodunda exception oluşacaktır.

NotificationSettings nesnesi ile sağlayabileceğiniz değerler ve açıklamaları aşağıdaki tabloda gösterilmiştir.

Alan Adı

Açıklaması

Zorunlu mu?

ApplicationId

PushServer üzerinde uygulamanız oluşturulduğunda size iletilen ApplicationId değeri.

Evet

SecretKey

PushServer üzerinde uygulamanızın oluşturulması için oluşturup yetkili kişiye bildirdiğiniz SecretKey değeri.

Evet

SenderID

SenderID parametresi Google Cloud Console’da oluşturulan projenin id’sidir. Örnek aşağıdaki url’deki kalın yazıyla belirtilmiş parametre

https://cloud.google.com/console#/project/838411778420

Evet

CustomId

Token dışında bir tanımlayıcı ID ile register olarak, yine bu ID üzerinden push atılabilmesini sağlayan parametre. (Ör: bir cihazı birden çok authenticate olmuş kullanıcının kullanbildiği durumlarda, kullanıcının değişmesi durumunda yeni bir kayıt göndermek üzere kullanılabilir)

Hayır

GenericParameter

Kayıt olurken kullanılacak herhangi bir tanımlayıcı parametre.

Hayır

Kayıt Olma veya Var Olan Kaydı Silme

NotificationManager nesnesine gerekli ayarlar sağlandıktan sonra Push bildirimleri alabilmek için yapılması gereken ilk işlem kayıt olmaktır. Push Server’a kayıt olmak içinNotificationManager.register metodu çağırılmalıdır. Register metodu içine RegistrationResultCallback tipinde bir listener almaktadır. Bu listener’ın 3 tane metodu bulunmaktadır. Bunlar onSuccessonFailed ve onAlreadyRegistered metodlarıdır. Örnek kullanım aşağıdaki gibi olmalıdır. Bu metotların adında anlaşılacağı üzere başarılı kayıt işlemi gerçekleştiği zaman onSuccess metodu, başarısız bir kayıt işlemi gerçekleştiği zaman onFailed metodu, bu uygulama önceden kayıt olmuşsa onAlreadyRegistered metodu çalışmaktadır.

Not: onSuccess ve onFailed metotları RegistrationResultCallback dışındaki bütün listenerlarda ortak olan metotlardır. Bu metotların adı onSuccess ve onFailed metotlarıdır. Bütün işlemlerde hata alınması durumunda detaylı bilgi onFailed metodunun parametresi olan Exception sınıfınıngetMessage metodundan alınabilir.

try {
NotificationManager.getInstance().register(registrationResultCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}

private RegistrationResultCallback registrationResultCallback = new RegistrationResultCallback() {
@Override
public void onSuccess(RegistrationResult result) {
Log.v(TAG, "Registration success");
Toast.makeText(getActivity(), "Registration success", Toast.LENGTH_LONG).show();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "Registration failed:" + e.toString());
Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
}

@Override
public void onAlreadyRegistered() {
Log.v(TAG, "Application already registered");
Toast.makeText(getActivity(), "Application already registered", Toast.LENGTH_LONG).show();
}
};Kayıt olmanın yanısıra bir uygulama push bildirimleri almayı kesmek de isteyebilir. Bunu yapmak içinNotificationManager.unregister metodunun çağrılması gerekmektedir. Unregister metoduUnregistrationResultCallback tipinde bir listener almaktadır. Bu listenerın 2 tane metodu bulunmaktadır.try {
NotificationManager.getInstance().unregister(unRegistrationResultCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}

private UnRegistrationResultCallback unRegistrationResultCallback = new UnRegistrationResultCallback() {
public void onSuccess(UnregistrationResult result) {
Log.v(TAG, "Unregistration success");
Toast.makeText(getActivity(), "Unregistration success:", Toast.LENGTH_LONG).show();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "Unregistration failed:" + e.getMessage());
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}
};

Bildirim Kategori Listesinin Alınması

Push Server uygulama bazlı Push bildirim kategorileri oluşturma yeteneği sağlamaktadır. Bu yetenek sayesinde uygulamalar sadece belirli kategorilerdeki bildirimlere abone olabilmektedir. Örneğin bir haber uygulamasında kullanıcı sadece Spor kategorisindeki bildirimleri almak isteyebilir. Uygulamada mevcut kullanılabilir bildirim kategori listesini almak için NotificationManager.getCategories metodu çağırılmalıdır. Bu metotda parametre olarak GetCategoriesCallback tipinde bir listener almaktadır. Örnek bir kod bloğu aşağıdaki gibidir.

try {
NotificationManager.getInstance().getCategories(getCategoriesCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
private GetCategoriesCallback getCategoriesCallback = new GetCategoriesCallback() {
@Override
public void onSuccess(CategoryListQueryResult result) {
Log.v(TAG, "getCategoriesCallback success");
result.getCategories();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "getCategoriesCallback fail:" + e.getMessage());
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
};

Bu callback sınıfının onSuccess metodunda bulunan CategoryListQueryResult sınıfının içindeCategory listesi tutulmaktadır. Category listesine getCategories metodu ile ulaşılabilir. Category sınıfının içinde sadece category’nin ismi bulunmaktadır. Bu isme de getCategoryName metodu ile ulaşılabilir.

Bildirim Kategorisine Abone Olma

Uygulama için tanımlanmış bildirim kategori listesi alındıktan sonra kullanıcıya bu kategorilere abone olabileceği bir arayüz sunabilirsiniz. Kullanıcıyı herhangi bir kategoriye abone yapmak içinNotificationManager.subscribeToCategory metodunu çağırmalısınız. Metot parametre olarakCategory nesnesi ve SubscribeToCategoryResultCallback tipinde listener almaktadır. Örnek bir kod bloğu aşağıdaki gibidir.

try {
NotificationManager.getInstance().subscribeToCategory(new Category("spor"), subscribeToCategoryResultCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
private SubscribeToCategoryResultCallback subscribeToCategoryResultCallback = new SubscribeToCategoryResultCallback() {

@Override
public void onSuccess(CategorySubscriptionResult result) {
Log.v(TAG, "SubscribeToCategoryResultCallback success desc:" + result.getResultDescription());
Toast.makeText(getActivity(), "Category subscription successful", Toast.LENGTH_SHORT).show();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "SubscribeToCategoryResultCallback fail desc:" + e.getMessage());
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
};

Başarılı cevap olarak CategorySubscriptionResult tipinde bir nesne dönmektedir. İsteğin açıklamasıgetResultDescription metodundan alınabilir.

Bildirim Kategorisi Aboneliğini Kaldırma

Kullanıcının herhangi bir bildirim kategorisine olan aboneliğini kaldırmak içinNotificationManager.unSubscribeFromCategory metodu çağırılmalıdır. Metot parametre olarakCategory nesnesi ve UnsubscribeFromCategoryResultCallback tipinde listener almaktadır. Örnek bir kod bloğu aşağıdaki gibidir.

try {
NotificationManager.getInstance().unsubscribeFromCategory(getItem(position), unsubscribeFromCategoryResultCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
private UnsubscribeFromCategoryResultCallback unsubscribeFromCategoryResultCallback = new UnsubscribeFromCategoryResultCallback() {

@Override
public void onSuccess(CategorySubscriptionResult result) {
Log.v(TAG, "UnsubscribeFromCategoryResultCallback success desc:" + result.getResultDescription());
Toast.makeText(getActivity(), "Category unsubscription successful", Toast.LENGTH_SHORT).show();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "UnsubscribeFromCategoryResultCallback fail desc:" + e.getMessage());
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
};

Başarılı cevap olarak CategorySubscriptionResult tipinde bir nesne dönmektedir. İstediğin açıklaması getResultDescription metodundan alınabilir.

Bildirim Kategorisi Aboneliklerinin Alınması

Kullanıcın abone olduğu bildirim kategorilerinin listesini almak içinNotificationManager.getCategorySubscriptions metodunu çağırmalıdır. Metot parametre olarakGetCategorySubscriptionCallback tipinde bir listener almaktadır. Örnek bir kullanım aşağıdaki gibidir.

try {
NotificationManager.getInstance().getCategorySubscriptions(getCategorySubscriptionCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}

private GetCategorySubscriptionCallback getCategorySubscriptionCallback = new GetCategorySubscriptionCallback() {

@Override
public void onSuccess(CategoryListQueryResult result) {
Log.v(TAG, "getCategoriesCallback success");
result.getCategories();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "getCategoriesCallback fail:" + e.getMessage());
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
};

Bu fonksiyon da GetCategories metodu ile aynı tipte nesne dönmektedir. Metot geri dönüşleri aynıdır.

Bildirim Geçmişinin Alınması

Kullanıcıya o zamana kadar iletilmiş olan bildirim listesini almak içinNotificationManager.getNotificationHistory metodu çağırılmalıdır. Metot parametre olarak sayfa sayısı ve bir sayfadaki bildirim sayısını alır. Aşağıdaki örnek kod bloğunda her biri 15 bildirimden oluşan bildirim geçmişi sayfalarından ikinci sayfa isteniyor. Ayrıca 3. bir parametre olarak daGetNotificationHistoryResultCallback tipinde bir listener almaktadır. Örnek kod bloğu aşağıdaki gibidir.

try {
NotificationManager.getInstance().getNotificationHistory(2, 15, getNotificationHistoryResultCallback);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}

private GetNotificationHistoryResultCallback getNotificationHistoryResultCallback = new GetNotificationHistoryResultCallback() {

@Override
public void onSuccess(NotificationHistoryResult result) {
Log.v(TAG, "GetNotificationHistoryResultCallback success");
notificationHistoryResult.getNotificationMessages();
}

@Override
public void onFailed(Boolean connectionError, Exception e) {
Log.v(TAG, "GetNotificationHistoryResultCallback fail");
}
};

Bu listenerın onSuccess metoduna NotificationHistoryResult tipinde bir nesne vardır. Bildirimlere bu nesne üzerindeki getNotificationMessages metodu ile ulaşabilirsiniz. Bu metot NotificationMessagetipinde bir liste döner. NotificationMessage sınıfının içinde bulunan getContent() metodu ile atılan push mesajının içeriğine ulaşabilirsiniz. getId metodu ile atılan push mesajının id’sine ulaşabilirsiniz.getCreatedDate metodu ile atılan push mesajının ne zaman atıldığı bilgisine ulaşabilirsiniz.getPayloadParams metodu ile push mesajında gönderilen payLoad parametrelerine ulaşabilirsiniz. Bu metot cevap olarak bir HashMap döner. Bu HashMap tipindedir. Atılan key ve value değerlerine aşağıdaki şekilde ulaşılabilirsiniz.

HashMap<String, String> payloadParameters = notificationHistoryResult.getNotificationMessages().get(position).getPayLoadParams();
if (payloadParameters != null) {
String keyValuePairs = "";
for(Entry<String, String> entry : payloadParameters.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
keyValuePairs += key + ":" + value + "\n";
}
}

Kullanım Klavuzu

Edited by umutbsl
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...