Mar 02

Öncelikle Google API Console sayfasını açıyor ve “Create Project” butonuna basarak yeni bir proje oluşturuyoruz.

create_new_project
Android projemizin içerisinde kullanacağımız sender id bilgisi, Project Number olarak gösterilen değerdir. Bu değeri bir kenara not ediyoruz.
project_number

API & auth altındaki API sekmesine giriyoruz ve Google Cloud Messaging for Android servisini aktif hale getiriyoruz.
enable_android_gcm
Ardından, API & auth altında Credentials sekmesine girip, Create New Key butonuna tıklıyoruz. Karşımıza gelen pencerede Android Key seçeneğini seçiyoruz.
create_new_key_gcm
Karşımıza gelen pencerede tekrar Create butonuna basıyoruz.
repeate_create_key_gcm
API key’imiz kullanıma hazır. Bu key değerini de php web servisi içerisinde kullanacağımızdan dolayı bir kenara not ediyoruz.
api_key_gcm

Şimdi php web servis için gerekli olan kodları sırasıyla paylaşalım.
Öncelikle içerisine kullanıcıları kaydedeceğimiz bir tabloya ihtiyacımız var. Mysql sunucu içerisine giriş yapıp adı gcm olan bir veri tabanı oluşturalım. Ardından aşağıdaki kodu Mysql içerisinden çalıştırıp tablomuzu ekleyelim.

CREATE TABLE IF NOT EXISTS `gcm_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `gcm_regid` text,
  `name` varchar(50) NOT NULL,
  `email` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Görüldüğü üzere tablomuzun adı gcm_users. İçerisinde otomatik artan bir id kolunu, her kullanıcı için farklı olan gcm registration id bilgisi, adı, mail adresi ve tarih kolonları mevcut.
Şimdi php dosyalarının kod yapılarını paylaşalım.

config.php


Yukarıdaki kod yapısında görüldüğü üzere config dosyasında veri tabanı bağlantısını yapıyoruz. Ayrıca GOOGLE_API_KEY değişkenine biraz önce Google’dan aldığımız API key değerini gönderiyoruz.

function.php

 0) {
                return mysql_fetch_array($result);
            } else {
                return false;
            }
			
        } else {
            return false;
        }
    }

    /**
     * Get user by email
     */
   function getUserByEmail($email) {
        $result = mysql_query("SELECT * FROM gcm_users WHERE email = '$email' LIMIT 1");
        return $result;
    }

    // Getting all registered users
  function getAllUsers() {
        $result = mysql_query("select * FROM gcm_users");
        return $result;
    }

    // Validate user
  function isUserExisted($email) {
        $result    = mysql_query("SELECT email from gcm_users WHERE email = '$email'");
        $NumOfRows = mysql_num_rows($result);
        if ($NumOfRows > 0) {
            // user existed
            return true;
        } else {
            // user not existed
            return false;
        }
    }
	
	//Sending Push Notification
   function send_push_notification($registatoin_ids, $message) {
        

        // Set POST variables
        $url = 'https://android.googleapis.com/gcm/send';

        $fields = array(
            'registration_ids' => $registatoin_ids,
            'data' => $message,
        );

        $headers = array(
            'Authorization: key=' . GOOGLE_API_KEY,
            'Content-Type: application/json'
        );
		//print_r($headers);
        // 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;
    }
?>

Function.php dosyasında send_push_notification fonksiyonunu tanımlıyoruz. Bu fonksiyon içerisine aldığı iki değerin birincisi push notification gönderilecek cihazın registration id’si. İkinci değer ise gönderilecek olan mesaj. Sunucu üzerinden push notification işlemi gerçekleştirilmek istenildiğinde bu metot çalıştırılır. Çalıştırılan metot GCM sunucularına gidip bu iki değeri iletir. GCM sunucuları da kendisine gelen registration id değerine sahip olan mobil cihaza mesaj değerini gönderir.

Function.php dosyası içerisine ayrıca tüm kayıtlı kullanıcıları listelemesi için getAllUsers() fonksiyonunu ve birkaç diğer fonksiyonu tanımladık.

loader.php

Loader.php dosyası hem config.php hem de function.php dosyalarını içerisinde çağırdığımız dosyadır.

register.php

 "Kaydiniz Yapildi.");

    $result = send_push_notification($registatoin_ids, $message);

    echo $result;
} else {
    // user details not found
}
?>

Register.php dosyası mobil cihazdan Mysql veri tabanına kayıt yapmayı sağlar. İçerisine kullanıcının adı, mail adresi ve registration id bilgisini alır.

sent_push_notification_message.php

 $pushMessage);
	
		$result = send_push_notification($registatoin_ids, $message);
	
		echo $result;
	}
?>

Sent_push_notification_message.php dosyası notification göndermeye yarayan dosyadır. Kendisine gelen değerleri belirli bir aşamadan sonra send_push_notification fonksiyonuna gönderir ve push işlemini tetikletir.

index.php




    
        
        
        
        
        
    
    
        
        
        

No of Devices Registered:


0) { $i=1; while ($rowUsers = mysql_fetch_array($resultUsers)) { if($i%3==0) print ""; ?>
 
" name="" method="post" onSubmit="return sendPushNotification('')">
"/>
User not exist.

Index.php dosyası ile ekrandan kayıtlı olan kullanıcıları (mobil cihaz ile gcm_users dosyasına kayıtlı olan) listeleriz. Bu dosya üzerinden kayıtlı kullanıcılardan istediğimiz birine, push notificacation yöntemiyle mesaj gönderebiliriz.
index_push_gcm

GCM Php Web Service dosyalarını indirmek için tıklayın.

1 Yorum “Google Cloud Messaging Kullanarak Android Push Notification İşlemi I”

  1. avatar yusuf diyor ki:

    merhaba, google cloud kullandım sanırım sınırı geçmişim 123$ borcum var. sizce bu borcu ödemezsem sorun olur mu bilginiz varmı kredi kartı yerine paypal eklemiştim, adres ve ad soy adım orada farklı. hesabımı farklı gmail adresine ekledim. acaba bir sorun olur mu haciz maciz faiz felan? mail adresimi ekledim mailime cevap verirseniz sevinirim.

Yorum Yaz