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).
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 :
<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="@string/msglbl" />
<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>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 !
Bacaan terkait
Membuat dan Print Dokumen di Flutter
Dalam aplikasi adakalanya kita memerlukan agar aplikasi menghasilkan dokumen atau dokumen tersebut untuk bisa di print. Di flutter hal tersebut dapat dilakukan denga...
Mendapatkan String App Hash untuk SMS Retriever Android
Implementasi verifikasi menggunakan OTP pada aplikasi sering digunakan. Sebelumnya android memiliki permission (SMS_RECEIVE and SMS_READ) untuk membaca SMS agar memu...
flutter_stetho : Debug Flutter (Network) Menggunakan Chrome Dev Tools
Ada kalanya ketika melakukan development aplikasi mobile, kita perlu melakukan debugging terkait network layaknya inspect web pada browser chrome. Di flutter hal ter...
Komentar (3)
Tulis komentar
Komentar akan dimoderasi sebelum tampil.



