Site icon Mobilhanem

Android Google Cloud Messaging ile Push Notification Gönderimi (PHP + MYSQL)

google cloud message

Merhaba Arkadaşlar,

Not: Firebase Push Notification dersi için tıklayınız.

Mobil Uygulama geliştirme dersleri ile sizlere yardımcı olmaya çalıştığımız mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize bugünde Google Cloud Messaging(GCM) ile Push Notification yani notifikasyon gönderme dersi ile devam ediyoruz.

Google servisi olan GCM telefonlarımız açık yada kapalı olsun client yani mobil cihazlar tarafından istek de bulunulmaksızın Notification göndermeye yarar.Yani bir nevi sunucudan cihaza bilgi ve uyarı gönderir. Birden fazla kullanım alanı olabilir. Mesajlaşma servisleri,bankalar,online hizmetler ve daha bir çok uygulama tarafından kullanılır. Hepimizin malumudur ki uygulamayı yazmak kadar kullandırtmakta çok önemlidir. Telefona indirilip kullanılmayan bir uygulama yazmayı hiç birimiz istemeyiz. GCM burda da işe yarıyor ve kullanıcıya Notification göndererek uygulamamızı hatırlatıyor ve kullanım oranlarını arttırıyor.Tabi şunuda unutmamak lazım, gereğinden fazla abartılı notification gönderimi ise kullanıcıyı bunaltır ve uygulamamızı silmesine neden olur.Bu ve bunun gibi bir çok kullanım alanı olan GCM Google tarafından ücretsiz olarak sunulmaktadır.

Bende bu dersimde sizlere detaylı bir anlatımla Google tarafındaki ayarları,uygulamaya entegre edilmesi ve PHP sunucudan notification gönderimini anlatacağım.Dolayısıyla diğer derslerimizden biraz daha uzun ve biraz daha ayrıntılı bir ders olacaktır.

Konuyu daha fazla uzatmadan başlıyorum.

[wpdm_file id=19]

Google Ayarları

Öncelikle https://console.developers.google.com/project sayfasına girerek Create Project diyoruz.

Karşımıza aşağıdaki gibi bir ekran geliyor.

Project Name : Projemizin Adı
Project Id: Projenin id si. Kendimiz istenilen şartlarda oluşturabileceğimiz gibi Google’n oluşturduğu id’yide kullanabiliriz.Sonradan değiştirilemez.
1. ve 2 . alanıda check ledikten sonra Create tıklıyoruz ve projemizin oluşmasını bekliyoruz.Projemiz oluştuktan sonra bizi Proje sayfamıza yönlendiriyor. Açılan sayfada sol taraftaki APIs&auth sekmesinin altındaki APIs’e tıklıyoruz.

Açılan sayfadaki listeden Google Cloud Messaging for Android i buluyor ve tıklıyoruz.Karşımıza çıkan ekranda sol üstte yer alan OFF yazan butona tıklıyor ve On olmasını bekliyoruz.

Evet arkadaşlar daha sonra APIs&auth sekmesinin altındaki Credentials’a tıklıyoruz.Açılan sayfada Create New Key’e tıklıyor ve Server Key’e tıklıyoruz.

Karşımıza çıkan bu sayfada herhangi bir IP kısıtlaması yapmıyacaksak Text alanını boş bırakıyır ve Create diyoruz.

Açılan yeni sayfadaki API KEY sonraki aşamlarda işimize yarıyacak. Lazım olduğu zaman bu sayfadan alabiliriz API KEY’imizi.

PHP+MYSQL

Evet arkadaşlar şimdi gelelim işin zor ama zevkli kısmı olan PHP+MYSQL kullanarak server kısmını hazırlamaya.Öncelikle çalışma mantığını anlatayım. Uygulamamız ilk açıldığı zaman bizim belirttiğimiz URL’e her cihaz için ayrı olan GCM register id gönderirir. Ben bu register id leri databasime kaydederim. Notification göndereceğim zamanda ister istediğim register id li cihazlara istersem tüm cihazlara Notification gönderebilirim. Bunu yaparkende ben bu dersimde PHP+MYSQL kullanıcam siz isterseniz farklı platformlarda kullanabilirsiniz.(asp,jsp,mssql,oracle vs..) .

Bunun için öncelikle Mysql databasimizde “wp_gcm_kullanicilar” adinda bir tablo oluşturalım. Bunu yaparken Phpmyadmin kullanabilirsiniz. İşinizi çok kolaylaştırır.


CREATE TABLE `wp_gcm_kullanicilar` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `registration_id` TEXT NOT NULL ) ENGINE = INNODB

Yukarıdaki kodu ile tablomuzu oluşturduk.

Database bağlantımızı sağlayacak baglanti.php dosyamızı hazırlayalım.

baglanti.php

<?php
define('DB_NAME', '********');
/** MySQL veritabanı kullanıcısı */
define('DB_USER', '*********');
/** MySQL veritabanı parolası */
define('DB_PASSWORD', '*********');
/** MySQL sunucusu */
define('DB_HOST', 'localhost');
/** Yaratılacak tablolar için veritabanı karakter seti. */
define('DB_CHARSET', 'utf8');
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);

// Check connection
if (mysqli_connect_errno())
  {
  echo "Bağlanırken hata oluştu : " . mysqli_connect_error();
  }

?>

Evet arkadaşlar bağlantıyı oluşturduk şimdi gelelim Android cihazlardan uygulamamız ilk açıldığında gelecek olan GCM register id’leri kaydedecek php dosyamıza.

register.php


<?php 
require_once("baglan.php");//database bağlantısı gercekleştirdik
 if (isset($_GET["regId"])) { //Kontrol
 
 $regId = $_GET['regId']; //GET ile gelen regId değerini aldık
 
 $sql = "INSERT INTO wp_gcm_kullanicilar (registration_id) values ('$regId')"; //regId yi database kaydedicek sorgu
 
 if(!mysqli_query($con, $sql)){//sorguyu çalıştırdık
  die('MySQL query failed'.mysql_error());
	}
 }
mysqli_close($con);//mysql connection kapattık
 
 
?>

Arkadaşlar şimdi gelelim Notification göndereceğimiz php dosyasına. Html formdan aldığımız veriyi(mesajı) databasede GCM register id leri kayıtlı olan cihazlara notification göndereceğiz.Aslında biz direk kendi serverlarımızdan göndermiyoruz. Biz bilgileri GCM servicelerine gönderiyoruz. GCM serverlarıda gelen bilgilere göre register id li cihazlara bizim belirlediğimiz mesajı notification gönderiyor.

send.php


<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!--Türkçe karakter sorunu yaşamamak için-->

 <title>GCM Send</title>
</head>
<body>
 <?php
  if(isset($_POST['submit'])){//kontrol
   require_once("baglan.php");//database bağlantısı gercekleştirdik
   $registatoin_ids = array();//registration idlerimizi tutacak array ı oluşturuyoruz
   
   $sql = "SELECT *FROM wp_gcm_kullanicilar";//Tüm kullanıcı gcm registration idlerini alıcak sql sorgumuz
   $result = mysqli_query($con, $sql);//sorguyu çalıştırıyoruz
   while($row = mysqli_fetch_assoc($result)){
    array_push($registatoin_ids, $row['registration_id']);//databaseden dönen registration idleri $registatoin_ids arrayine atıyoruz
   }
 
   // GCM servicelerine gidecek veri
   //Arkadaşlar aşşağıdaki PHP kodlarıyla oynamıyoruz. Bu Google 'n bizden kullanmamızı istediği kodlar
   //Sadece registration_ids,mesaj ve Authorization: key değerlerini değiştiriyoruz
    $url = 'https://android.googleapis.com/gcm/send';
   
    $mesaj = array("notification_message" => $_POST['mesaj']); //gönderdiğimiz mesaj POST 'tan alıyoruz.Androidde okurken notification_message değerini kullanacağız
         $fields = array(
             'registration_ids' => $registatoin_ids,
             'data' => $mesaj,
         );
		
		//Alttaki Authorization: key= kısmına Google Apis kısmında oluşturduğumuz key'i yazacağız
         $headers = array(
             'Authorization: key=AIzaSyBf--subbkkRuEKbmxn3pXZCpY4u9OuTL8', 
             'Content-Type: application/json'
         );
         // Open connection
         $ch = curl_init();
   
         // Set the url, number of POST vars, POST data
         curl_setopt($ch, CURLOPT_URL, $url);
   
         curl_setopt($ch, CURLOPT_POST, true);
         curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   
         // Disabling SSL Certificate support temporarly
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   
         curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
   
         // Execute post
         $result = curl_exec($ch);
         if ($result === FALSE) {
             die('Curl failed: ' . curl_error($ch));
         }
   
         // Close connection
         curl_close($ch);
         echo $result;
  }
 ?>
 
 <form method="post" action="send.php">
  <label>Mesajı giriniz: </label><input type="text" name="mesaj" />
 
  <input type="submit" name="submit" value="Send" />
 </form>
</body>
</html>

Yukarıda yaptığımız işlemleri kısaca toparlıcak olursak sistem şu şekilde işleyecek. Uygulama android cihazdan açıldığı zaman bizim register.php mize registeri_id yi post edicek. Biz post edilen id yi kaydedeceğiz ve notification göndermek istedimizde ise send .php yi çalıştıracağız. Mesajımızı yazıp gönderdiğimizde send.php database kayıtlı olan register_id leri ve mesajımızı GCM servisine gönderecek.GCM serviste gelen register_id li cihazlara mesajımızı Notification olarak gönderecek.

ANDROID

Gelelim android kısmına.

Öncelikle yeni bir proje oluşturuyoruz.Arkadaşlar ben bu dersimde oluşturduğum ve bu dersimde Google Play’e nasıl yükleneceğini anlattığım projem üzerinden devam edicem.Bu proje zaten basit bir Webview uygulamasıydı.Ben projeye Splash Screen ekleyerek gerekli başlangıç işlemlerini orda yapıcam. Yani bir nevi sıfırdan proje oluşturmuş olacağız.Oluşturduğumuz projeye Google Play Service Lib dosyasını ekliyoruz. Google Play Service lib ekleme konusunda detaylı anlatımımı bu dersimizde yapmıştım.Google Play Service dosyasını projemize import ettikten sonra Android Manifest dosyasında gerekli izinlerle gerekli ayarlamaları yapıyoruz. Benim Android Manifest dosyam aşşağıdaki gibi

AndroidManifest.xml



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mobilhanem.webviewkullanimi"
    android:versionCode="2"
    android:versionName="1.1" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
	<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <permission android:name="com.example.gcm.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
         <activity
            android:label="@string/app_name"
            android:name=".SplashScreen"
			android:screenOrientation="portrait"
			android:theme="@android:style/Theme.Black.NoTitleBar" >
			
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
		<activity
            android:label="@string/app_name"
            android:name=".Anasayfa"
			android:screenOrientation="portrait"
			android:theme="@android:style/Theme.Black.NoTitleBar" >
        </activity>
        <receiver
            android:name="com.mobilhanem.gcm.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <category android:name="com.mobilhanem.gcm" />
            </intent-filter>
        </receiver>
         <service android:name="com.mobilhanem.gcm.GcmIntentService" />

        <meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />
    </application>

</manifest>

Başlangıç işlemlerini yaptığım yani kendi server’ıma register_id yi gönderdiğim java dosyaları ise aşağıdaki gibidir.Zaten kod üzerinde gerekli açıklamaları yaptım.

SplashScreen.java



import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.mobilhanem.gcm.RegisterApp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Log;
import android.widget.Toast;
 
public class SplashScreen extends Activity {
  
 private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
 public static final String PROPERTY_REG_ID = "registration_id";
 private static final String PROPERTY_APP_VERSION = "appVersion";
 private static final String TAG = "Mobilhanem GCM";
 GoogleCloudMessaging gcm;
 String regid;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.splash);

  
  if (checkPlayServices()) {//GOOGLE PLAY SERVİCE APK YÜKLÜMÜ
		gcm = GoogleCloudMessaging.getInstance(getApplicationContext());//GoogleCloudMessaging objesi oluşturduk
		regid = getRegistrationId(getApplicationContext()); //registration_id olup olmadığını kontrol ediyoruz
		
		if(regid.isEmpty()){//YENİ KAYIT
			  //regid değerimiz boş gelmişse uygulama ya ilk kez acılıyor yada güncellenmiş demektir.Registration işlemleri tekrardan yapılacak.
	          new RegisterApp(getApplicationContext(), gcm, getAppVersion(getApplicationContext())).execute(); //RegisterApp clasını çalıştırıyoruz ve değerleri gönderiyoruz
		}else{
			  //regid değerimiz boş gelmemişse önceden registration işlemleri tamamlanmış ve güncelleme olmamış demektir.Yani uygulama direk açılacak
			  //Arkadaşlar eğer splash ekranının gözükmesini istiyorsanız thread kullanıp 2 3 sn bekletebilirsiniz.Daha sonra aşağıdaki işlemlere başlayabilirsiniz

		       Toast.makeText(getApplicationContext(), "Bu cihaz önceden kaydedilmiş", Toast.LENGTH_SHORT).show();
		       Intent i = new Intent(getApplicationContext(),Anasayfa.class);//Anasayfaya Yönlendir
       		   startActivity(i);
       		   finish();
		   }
          
  }
   
 }
 
 private boolean checkPlayServices() { 
	//Google Play Servis APK yüklümü
	 //Yüklü Değilse Log basıp kapatıcak uygulamayı
	 //Siz kullanıcıya uyarı verdirip Google Play Apk Kurmasını isteyebilirsiniz
	 
     int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
     if (resultCode != ConnectionResult.SUCCESS) {
         if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
             GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                     PLAY_SERVICES_RESOLUTION_REQUEST).show();
         } else {
             Log.i(TAG, "Google Play Servis Yükleyin.");
             finish();
         }
         return false;
     }
     return true;
 }
 private String getRegistrationId(Context context) { //registration_id geri döner
	 //Bu method registration id ye bakar.
	 //Bu uygulamada registration id nin önceden olabilmesi için uygulamanın önceden açılmış ve registration işlemlerini yapmış olması lazım
	 //Uygulama önceden acıldıysa registration_id SharedPreferences yardımı ile kaydedilir.
	 
     final SharedPreferences prefs = getGCMPreferences(context);
     String registrationId = prefs.getString(PROPERTY_REG_ID, "");//registration_id değeri alındı
     if (registrationId.isEmpty()) {//eğer boşsa önceden kaydedilmemiş yani uygulama ilk kez çalışıyor.
         Log.i(TAG, "Registration id bulunamadı.");
         return "";
     }
    
     int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
     int currentVersion = getAppVersion(getApplicationContext());//yine SharedPreferences a kaydedilmiş version değerini aldık
     if (registeredVersion != currentVersion) {//versionlar uyuşmuyorsa güncelleme olmuş demektir. Yani tekrardan registration işlemleri yapılcak
         Log.i(TAG, "App version değişmiş.");
         return "";
     }
     return registrationId;
 }
  
 private SharedPreferences getGCMPreferences(Context context) {
     return getSharedPreferences(SplashScreen.class.getSimpleName(),
             Context.MODE_PRIVATE);
 }
  
 private static int getAppVersion(Context context) { //Versiyonu geri döner
     try {
         PackageInfo packageInfo = context.getPackageManager()
                 .getPackageInfo(context.getPackageName(), 0);
         return packageInfo.versionCode;
     } catch (NameNotFoundException e) {
         // should never happen
         throw new RuntimeException("Paket versiyonu bulunamadı: " + e);
     }
 }
}

SplashScreen uygulama ilk açıldığında önceden registration işlemlerinin yapılıp yapılmadığını kontrol eder. Eğer yapılmışsa uygulama normal açılır. Eğer yapılmamışsa uygulama RegisterApp.java dosyasını çağırarak registration işlemlerini başlatır.

RegisterApp.java



import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.mobilhanem.webviewkullanimi.Anasayfa;
import com.mobilhanem.webviewkullanimi.SplashScreen;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
 
 
public class RegisterApp extends AsyncTask<Void, Void, String> {
 
 private static final String TAG = "Mobilhanem GCM";
 Context ctx;
 GoogleCloudMessaging gcm;//Google Cloud referansı
 final String PROJECT_ID = "149270419021";//Bu değer Google Apı sayfasında Owerview menüsünde(Giriş sayfası) yukarıda yer alır. Project Number:987... şeklinde
 String regid = null; 
 private int appVersion;
 
 public RegisterApp(Context ctx, GoogleCloudMessaging gcm, int appVersion){ //SplassScreen den gelen değerleri aldık
  this.ctx = ctx;
  this.gcm = gcm;
  this.appVersion = appVersion;
 }
  
  
 @Override
 protected void onPreExecute() {
  super.onPreExecute();
 }
 
 
 @Override
 protected String doInBackground(Void... arg0) { //
  String msg = "";
        try {
            if (gcm == null) {
                gcm = GoogleCloudMessaging.getInstance(ctx);//GCM objesi oluşturduk ve gcm referansına bağladık
            }
            regid = gcm.register(PROJECT_ID);//gcm objesine PROJECT_ID mizi göndererek regid değerimizi aldık.Bu değerimizi hem sunucularımıza göndereceğiz Hemde Androidde saklıyacağız
            msg = "Registration ID=" + regid;

            
            sendRegistrationIdToBackend();//Sunuculara regid gönderme işlemini yapacak method
            
            storeRegistrationId(ctx, regid);//Androidde regid saklı tutacak method
            
        } catch (IOException ex) {
            msg = "Error :" + ex.getMessage();
           
        }
        return msg;
 }
 
 private void storeRegistrationId(Context ctx, String regid) {//Androidde regid ve appversion saklı tutacak method
	 //Burada SharedPreferences kullanarak kayıt yapmaktadır
	 //SharedPreferences hakkında ayrıntılı dersi Bloğumuzda bulabilirsiniz.
   final SharedPreferences prefs = ctx.getSharedPreferences(SplashScreen.class.getSimpleName(),
             Context.MODE_PRIVATE);
     Log.i(TAG, "Saving regId on app version " + appVersion);
     SharedPreferences.Editor editor = prefs.edit();
     editor.putString("registration_id", regid);
     editor.putInt("appVersion", appVersion);
     editor.commit();
   
 }
 
 
 private void sendRegistrationIdToBackend() {//Sunucuya regid değerini gönderecek method
	 //Arkadaşlar biz burda get methodu ile gönderdik .
	 //Siz isterseniz post methoduda kullanabilirsiniz
	 //HTTP Post ie ilgili dersimiz blog umuzda bulunmaktadır.
  URI url = null;
  try {
   url = new URI("http://www.mobilhanem.com/test/register.php?regId=" + regid);
  } catch (URISyntaxException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 
  HttpClient httpclient = new DefaultHttpClient();
  HttpGet request = new HttpGet();
  request.setURI(url);
  try {
   httpclient.execute(request);
  } catch (ClientProtocolException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 
 @Override
 protected void onPostExecute(String result) {
	 //doInBackground işlemi bittikten sonra çalışır
  super.onPostExecute(result);
  Toast.makeText(ctx, "Registration Tamamlandı.Artık notification alabilirsiniz", Toast.LENGTH_SHORT).show();
  Log.v(TAG, result);
  Intent i = new Intent(ctx,Anasayfa.class);//Anasayfaya Yönlendir
  i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
  ctx.startActivity(i);
 
 }
}

Buraya kadar olan kısım register işlemleri içindi. Şimdi ise Notification geldiği zaman uygulamamızın ne yapcağını ayarlamaya. Burda Servis ve BroadCastReciver sınıflarını kullandık. Servis sınıfı hakkında yazımız blog içinde mevcuttur. BroadCastReciver sınıfı hakkında ise en kısa zamanda yazacağım.

Arkadaşlar aşağıdaki kodlar Notification geldiği zaman çalışacaktır.

GcmBroadcastReceiver.java

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;
 
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
                GcmIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

Yukarıdaki kod Android ağını dinlemektedir. GCM servislerinden bir PUSH Notification gelirse uygulamayı uyandırır ve GCMIntentService’i çalıştırır.

GCMIntentService.java

package com.mobilhanem.gcm;

import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.mobilhanem.webviewkullanimi.R;
import com.mobilhanem.webviewkullanimi.SplashScreen;

import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
 
public class GcmIntentService extends IntentService {
    public static final int NOTIFICATION_ID = 1;
    private NotificationManager mNotificationManager;
    NotificationCompat.Builder builder;
 
    public GcmIntentService() {
        super("GcmIntentService");
    }
 
    @Override
    protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
        //Gelen mesaj tipini alıyoruz
        String messageType = gcm.getMessageType(intent);
        String mesaj = intent.getExtras().getString("notification_message");
        Log.d("mesaj--->>>",mesaj);
        
        if (!extras.isEmpty()) {  // has effect of unparcelling Bundle
            
            if (GoogleCloudMessaging.
                    MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                sendNotification("Send error: " + extras.toString());
            } else if (GoogleCloudMessaging.
                    MESSAGE_TYPE_DELETED.equals(messageType)) {
                sendNotification("Deleted messages on server: " +
                        extras.toString());
            } else if (GoogleCloudMessaging.
                    MESSAGE_TYPE_MESSAGE.equals(messageType)) {//Herhangi bir sorun yoksa Notification mızı oluşturacak methodu çağırıyoruz
                sendNotification(mesaj);
            }
        }
        GcmBroadcastReceiver.completeWakefulIntent(intent);
    }

    private void sendNotification(String msg) { //Burda Status barda gösterilecek Notificationın ayarları yapılıyor(titreşim,bildirim,text boyutu vs..)
        mNotificationManager = (NotificationManager)
                this.getSystemService(Context.NOTIFICATION_SERVICE);
 
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, SplashScreen.class), 0);
 
        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
        .setContentTitle("Mobilhanem")
        .setSmallIcon(R.drawable.ic_launcher)
        .setStyle(new NotificationCompat.BigTextStyle()
        .bigText(msg))
        .setContentText(msg)
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
        .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
 
        
        mBuilder.setContentIntent(contentIntent);
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());//Notification gösteriliyor.
    }
}

Evet arkadaşlar açıklamaları kod üzerinde yapmaya çalıştım. Bugüne kadar anlattığım dersler arasında beni en çok yoran dersti. İnşallah sizleri yormadan halledebilirsiniz.Ama bu dersimde altını çizerek söylüyorum örnek projeyi kesinlikle indirerek çalışın.İndirmeden anlamanız çok zor olacaktır. Ben projenin bu halini Google Play’e koyacağım ve ders eklediğim zaman notification ile bildireceğim.

Sormak istediğiniz veya eklemek istediğiniz bir yer olursa çekinmeden yorum bırakabilirsiniz.Sizlerden ricam facebook.com/mobilhanem sayfamızı beğenmenizdir. Birdahaki dersimde Androidde Custom Listview kullanımını anlatacağım.Birdahaki dersimize kadar kendinize iyi bakın.

NOT:Android Studio için Google Play Service import dersimiz için tıklayınız.

[wpdm_file id=19] 0
Exit mobile version