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).
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.
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
– aktifkan google cloud messaging for android
– dapatkan server key
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 !
thanks gan, tutorialnya berhasil di ane 😀
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.
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.
Yang di ubah bagian mana ya?
Webnya ini dibuat menggunakan WordPress, gimana ya? Hehehe
kok koding untuk “layout untuk message view sederhana :” nya saya kosong ya? error tuh kayaknya….