umutbsl Posted September 28, 2014 Share Posted September 28, 2014 (edited) 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 ApplicationId, SecretKey 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 onSuccess, onFailed 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 September 28, 2014 by umutbsl Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.