Push Notification di Android Menggunakan Google Cloud Messaging + PHP

Google Cloud Messaging (GCM) untuk android adalah layanan gratis yang disediakan oleh google untuk melakukan push notifications. Dengan GCM kita dapat mengirimkan data dari server melalui GCM yang lalu diteruskan ke klien dalam hal ini perangkat android. Layanan ini dapat melakukan pengiriman notifikasi atau pesan sebesar 4kb. Mengenai queue nya merupakan bagian GCM yang mengatur (Push Notification Android GCM PHP).

android-gcm-arch

Tutorial ini menggunakan GUI eclipse. Ada beberapa requirement yang diperlukan terlebih dahulu.

1. Pastikan anda sudah menginstall extras Google Cloud Messaging for Android di Eclipse.

gcm1

2. Daftarkan/buat project Anda di google developer console. Di link https://console.developers.google.com/

3. Pada google developer console, beberapa hal yang dilakukan

– dapatkan project number dari project yang Anda buat

gcm3

– aktifkan google cloud messaging for android

gcm2

– dapatkan server key

gcm4

Jika Semua sudah dilakukan. Sekarang saat ini kita beralih untuk melakukan coding disisi eclipse.

1. Setelah anda memastikan sudah menginstall Google Cloud Messaging for android. Anda perlu mengincludekan jar gcm tersebut pada project Anda melalui Java Build Path – External Jars. Jar GCM terdapat pada android-sdk/extras/google/gcm/gcm-client/dist

2. Pada file MainActivity project Anda tambahkan setelah layout

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);

Sementara itu untuk mendaftarkan registration ID dengan menambahkan :

GCMRegistrar.register(MainActivity.this,GCMIntentService.SENDER_ID);

3. Selain itu kita perlu membuat file GCMIntentService.java untuk menangkap notifikasi.

import java.util.Timer;
import java.util.TimerTask;
 
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.util.Log;
 
import com.google.android.gcm.GCMBaseIntentService;
 
public class GCMIntentService extends GCMBaseIntentService {
 
	private static final String TAG = "GCM Tutorial::Service";
 
	// Use your PROJECT ID from Google API into SENDER_ID
	public static final String SENDER_ID = "394127269050";
 
	public GCMIntentService() {
		super(SENDER_ID);
	}
 
	@Override
	protected void onRegistered(Context context, String registrationId) {
 
		Log.i(TAG, "onRegistered: registrationId=" + registrationId);
	}
 
	@Override
	protected void onUnregistered(Context context, String registrationId) {
 
		Log.i(TAG, "onUnregistered: registrationId=" + registrationId);
	}
 
	@Override
	protected void onMessage(Context context, Intent data) {
		String message;
		// Message from PHP server
		message = data.getStringExtra("message");
		// Open a new activity called GCMMessageView
		Intent intent = new Intent(this, GCMMessageView.class);
		// Pass data to the new activity
		intent.putExtra("message", message);
		// Starts the activity on notification click
		PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);
		// Create the notification with a notification builder
		Notification notification = new Notification.Builder(this)
				.setSmallIcon(R.drawable.ic_launcher)
				.setWhen(System.currentTimeMillis())
				.setContentTitle("Title Notifikasi")
				.setContentText(message).setContentIntent(pIntent)
				.getNotification();
		// Remove the notification on click
		notification.flags |= Notification.FLAG_AUTO_CANCEL;
 
		NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		manager.notify(R.string.app_name, notification);
 
		{
			// Wake Android Device when notification received
			PowerManager pm = (PowerManager) context
					.getSystemService(Context.POWER_SERVICE);
			final PowerManager.WakeLock mWakelock = pm.newWakeLock(
					PowerManager.FULL_WAKE_LOCK
							| PowerManager.ACQUIRE_CAUSES_WAKEUP, "GCM_PUSH");
			mWakelock.acquire();
 
			// Timer before putting Android Device to sleep mode.
			Timer timer = new Timer();
			TimerTask task = new TimerTask() {
				public void run() {
					mWakelock.release();
				}
			};
			timer.schedule(task, 5000);
		}
 
	}
 
	@Override
	protected void onError(Context arg0, String errorId) {
 
		Log.e(TAG, "onError: errorId=" + errorId);
	}
}

4. Kita tambahkan satu file lagi untuk melihat isi notifikasi tersebut pada file GCMMessageView

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
 
public class GCMMessageView extends Activity {
	String message;
	TextView txtmsg;
 
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.messageview);
 
		// Retrive the data from GCMIntentService.java
		Intent i = getIntent();
 
		message = i.getStringExtra("message");
 
		// Locate the TextView
		txtmsg = (TextView) findViewById(R.id.message);
 
		// Set the data into TextView
		txtmsg.setText(message);
	}
}

layout untuk message view sederhana :


 
    
 
    
 

5. Pada file AndroidManifest.xml beberapa yang ditambahkan seperti :


    
    
    

Ingat anda perlu mengganti sesuai nama package Anda pada permission diatas. Selain itu juga nama file class yang tadi dibuat dalam activity


        
 
        
 
        
            
                
                
 
                
            
        

Setelah sudah, saatnya disisi server PHP yang akan mengirimkan pesan :

$message = $_POST['message'];
 
// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';
 
$fields = array(
                'registration_ids'  => array($_POST['registrationIDs']),
                'data'              => array( "message" => $message ),
                );
 
$headers = array( 
                    'Authorization: key=' . $_POST['apiKey'],
                    '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 );
 
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
 
// Execute post
$result = curl_exec($ch);
 
// Close connection
curl_close($ch);
 
echo $result;

Di file PHP anda perlu memasukkkan API key yang sudah didapatkan dari Google Developer Console. Selain itu, kita juga perlu memasukkan registration ID milik android ketika didaftarkan. Done !

Mungkin Anda juga menyukai

5 Respon

  1. mas doni berkata:

    thanks gan, tutorialnya berhasil di ane 😀

  2. Oktafianugrahadi berkata:

    Maaf mau nanya, Kalau misalkan kita mau buat aplikasi untuk notifikasi konten di sebuat situs web bisa ga’ pkai GCM? misalnya nih, web itu ada update konten baru, nah ketika web itu update aplikasi android kita memberikan notifikasi ke android kita.

    • alfach berkata:

      Iya bisa, persis seperti tutorial diatas. Jadi, token yang dilempar/milik android di simpan ke database. Lalu, ketika penambahan konten baru, maka sekaligus mengirimkan notifikasi berdasarkan token yang tersimpan tersebut.

Tinggalkan Balasan

Alamat surel Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *