Home / Android / Push Notification di Android Menggunakan Google Cloud Messaging + PHP

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 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <TextView
        android:id="@+id/msglbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="pesan notifikasi"
 />
 
    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/msglbl" />
 
</RelativeLayout

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

<permission android:name="com.alfach.gcmtutorial.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="com.alfach.gcmtutorial.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

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

<activity android:name=".GCMMessageView" >
        </activity>
 
        <service android:name=".GCMIntentService" />
 
        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
 
                <category android:name="com.alfach.gcmtutorial" />
            </intent-filter>
        </receiver>

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 !

About alfach

Check Also

picasso

Menampilkan Image/Gambar dari Url Pada Android Menggunakan Picasso

Menampilkan image pada android merupakan hal yang gampang-gampang susah apalagi jika image tersebut diambil dari ...

5 comments

  1. thanks gan, tutorialnya berhasil di ane 😀

  2. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>