Friday, October 12, 2018

Bandwidth Management untuk Dynamic User

Simple queue bisa dikatakan sebuah solusi paling mudah dalam melakukan bandwidth management, sebagai admin jaringan kita hanya perlu isikan target address dengan ip komputer client kemudian kita tentukan bandwith yang dialokasikan untuk user tersebut. Permasalahan muncul jika ternyata user yang kita handle merupakan user dengan jumlah yang cukup banyak. Belum lagi jika user tersebut sifatnya dynamic. Mereka bisa konek ataupun disconnect  sesuai kemauan mereka. Akan sangat repot jika kita harus membuat simple queue satu per satu. Salah satu fitur mikrotik yang dapat digunakan untuk mengatasi permasalah ini adalah dengan PCQ, 
PCQ merupakan salah satu cara melakukan manajemen bandwidth yang cukup mudah dimana PCQ bekerja dengan sebuah algoritma yang akan membagi bandwidth secara merata ke sejumlah client yang aktif. PCQ ideal diterapkan apabila dalam pengaturan bandwidth kita kesulitan dalam penentuan bandwidth per client. 
Misalnya, sebelumnya kita bisa melakukan bandwidth management dengan system HTB dimana jumlah client sedikit, maka masih mudah bagi admin jaringan dalam menentukan parameter limit-at. Tetapi bagaimana jika bandiwdth 1 Mbps namun ingin dibagi rata ke 200-an client. Jika menggunakan model HTB, akan sulit untuk menentukan limit-at . Dengan kondisi seperti ini, akan lebih mudah jika kita serahkan perhitungan management bandwidth ke router, agar Router yang akan membagi bandwidth secara otomatis ke client.
Cara kerja PCQ adalah dengan menambahkan sub-queue, berdasar classifier tertentu. Berikut gambaran cara kerja PCQ dengan parameter PCQ-Rate = 0.
  
PCQ rate adalah dasar perhitungan Router. Seberapa besar rate-limit yg akan diberikan ke user yg aktif.  Cara setting PCQ sebanarnya cukup mudah. Kita hanya perlu menambahkan Queue Type PCQ, kemudian tentukan nilai classifier dan nilai rate. Untuk management traffic download, centang opsi classifier dst.address. Dan untuk management traffic upload, centang opsi src.address. 
 
Selanjutnya, implementasikan PCQ yang dibuat sebelumnya. Misal dikombinasikan dengan Simple Queue. 
 
Sayangnya, karena semua urusan pembagian bandwidth sama rata dilakukan Router secara otomatis, kita tidak bisa menerapkan Priority ke user tertentu pada saat menggunakan PCQ.

Monitoring PCQ dapat dilihat pada bagian statistic. 
 

Teknik Manajemen Bandwidth Dengan MikroTik 4

Manajemen Bandwidth adalah teknik manajemen trafik jaringan komputer untuk pengaturan bandwidth sesuai profil yang diinginkan. Manajemen bandwidth digunakan untuk optimasi kinerja trafik jaringan, latency atau mengendalikan penggunaan bandwidth.
Pada kesempatan ini saya akan mencontohkan implementasi Manajemen Bandwidth Dengan MikroTik.
  • Mengatur Bandwidth Menggunakan Simple Queue
  • Mengatur Bandwidth Menggunakan Queue Tree
  • Metode Pembagian Bandwidth Shared / Up To
  • Manajemen Bandwidth Berdasarkan Prioritas Trafik

Ada 2 fitur pada MikroTik untuk bagaimana mengatur bandwidth pada MikroTik :
  • Simple Queue - dirancang untuk mempermudah mengatur bandwidth untuk alamat IP tertentu dan / atau subnet.
  • Queue Tree - Untuk implementasi manajemen bandwidth lanjutan, membutuhkan marking packet pada fitur Mangle ( /ip firewall mangle). 

5 Teknik Manajemen Bandwidth Dengan MikroTik


Mengatur Bandwidth Menggunakan Simple Queue


Simple Queue adalah fitur / fungsi pada MikroTik RouterOS untuk membagi bandwidth komputer client yang sederhana dan paling mudah. Yang dapat menentukan kecepatan download dan upload maksimum berdasarkan IP Address komputer client.

Contoh, kita akan menentukan kecepatan download dan upload maksimum untuk komputer yang mempunyai IP Address 192.168.0.6 sebesar : maksimum download 1mbps dan maksimum upload 512kbps. Di Winbox klik menu "Queue >> tab Simple Queues >> klik Add [+] 

Mengatur Bandwidth Menggunakan Simple Queue


Parameter Simple Queue :
  • Name : isi dengan nama user/komputer
  • Target : isi ip address client yang ingin dibatasi. Parameter ini bisa diisi dengan :
    • Single IP (192.168.0.6)
    • Network IP (192.168.0.0/24) IP client dari 192.168.0.2-192.168.0.254
    • IP lebih dari 1 (192.168.0.6,192.168.0.7) klik tombol panah bawah kecil di sebelah kanan kotak isian untuk menambahkan IP. 
  • Max Limit : [Target Upload] [Target Download] tentukan batasan bandwidth dengan memilih dengan klik drop down atau di ketik manual satuan bps (bit per second).

Dengan settingan seperti di atas, komputer client yang mempunyai IP address 192.168.0.6 akan mendapatkan maksimum kecepatan download 1mbps & upload 512kbps.


Mengatur Bandwidth Menggunakan Queue Tree


Pada Queue Tree implementasi manajemen bandwidth di mikrotik membutuhkan marking packet "matcher" pada fitur Mangle ( /ip firewall mangle). Jadi kita harus mendefinisikan sebuah koneksi terlebih dahulu dan menandainya (marking) agar bisa kita terapkan manajemen bandwidth untuk marking koneksi tersebut. Misalnya kita akan menandai koneksi/paket berdasarkan src-address (IP asal). Karena queueing pada Queue Tree mempunyai aliran paket secara satu arah. Jadi kita membuat marking untuk koneksi download & upload berdasarkan in-out interface gateway/internet, dan src-dst IP Address asal dan tujuan. Ribet yah? hehehe.

Saya ingin menandai paket dari komputer big boss yang mempunyai IP Address 192.168.0.3, dan saya beri nama "big_boss.down/up" yang nantinya mempunyai bandwidth/prioritas lebih besar dari karyawan lainnya. Dan karyawan lainnya saya tandai dengan nama "all_staff.down/up".  

Dari angan-angan tersebut, pertama kita buat mark packet download & upload si boss terlebih dahulu. IP >> Firewall >> Mangle

/ip firewall mangle
add action=mark-packet chain=forward dst-address=192.168.0.3 in-interface=\
    pppoe-speedy log-prefix="" new-packet-mark=big_boss.down passthrough=no
add action=mark-packet chain=postrouting log-prefix="" new-packet-mark=big_boss.up \
    out-interface=pppoe-speedy passthrough=no src-address=192.168.0.3

Mark Packet Koneksi Download

Mark Packet Koneksi Upload


Kedua, kita tandai paket download & upload komputer semua karyawan. IP >> Firewall >> Mangle

/ip firewall mangle
add action=mark-packet chain=prerouting in-interface=pppoe-speedy log-prefix="" \
    new-packet-mark=all_staff.down passthrough=no
add action=mark-packet chain=postrouting log-prefix="" new-packet-mark=all_staff.up \
    out-interface=pppoe-speedy passthrough=no

Mark Packet Koneksi Download

Mark Packet Koneksi Upload

Untuk in-out interface pada contoh ini saya menggunakan interface "pppoe-speedy" karena gateway internet saya ada di interface tersebut.

Karena pada rules firewall mangle di mikrotik berlaku hirarki/urutan, jadi pada marking koneksi komputer karyawan saya tidak masukan lebih spesifik parameter src-address/dst-address nya. Karena pada baris 1 & 2 sudah ada marking untuk IP address si bos, jadi pada rules dibawahnya IP Address 192.168.0.3 akan diabaikan karena sudah diproses terlebih dahulu. Mikrotik akan menganggap pada mark packet "all_staff.up & all_staff.down " adalah paket koneksi download & upload semua IP Address selain 192.168.0.3.

Setelah kita menandai koneksi seperti diatas, marking tersebut akan kita gunakan untuk mengatur bandwidthnya pada Queue Tree.

Skenarionya kantor saya punya total bandwidth internet 3Mbps dari ISP dan ingin mengalokasikan bandwidth internet untuk si bos 2Mbps dan semua karyawan 1Mbps. 

Implementasi yang digunakan untuk skenario diatas, akan seperti ini :

1) Queueing packet si boss

/queue tree
add max-limit=2M name="Download Big Boss" packet-mark=big_boss.down parent=global queue=default
add max-limit=2M name="Upload Big Boss" packet-mark=big_boss.up parent=global queue=default

Queue Tree



2) Queueing packet Karyawan

/queue tree
add max-limit=1M name="Download All Staff" packet-mark=all_staff.down parent=global queue=default
add max-limit=1M name="Upload All Staff" packet-mark=all_staff.up parent=global queue=default

Queue Tree


Parameter pada Queue Tree

Parent : Pada parameter ini kita bisa tetapkan apakah queue ini adalah child queue.
Packet Mark : Memilih packet mark yang sudah di buat di /IP Firewall Mangle
Max Limit : Maksimal bandwidth yang bisa dicapai oleh paket yang di queue.

Hasilnya sperti ini :

Queue Tree MikroTik


Secara umum begitulah manajemen bandwidth di mikrotik menggunakan Queue Tree, dengan teknik di atas kita bisa kembangkan misalnya prioritas bandwidth berdasarkan service / aplikasi jaringan (email, game online dll) karena dengan fungsi mangle kita bisa membedakan koneksi packet lebih spesifik.


Metode Pembagian Bandwidth Shared / Up To


Jika sebelumnya saya mencontohkan manajemen bandwidth dengan kecepatan yang tetap/fix, di bagian ini saya akan mencontohkan bagaimana manajemen bandwidth share di MikroTik

Contoh : Saya mempunyai bandwidth 2Mbps untuk dipakai 2 user. Jika 1 user aktif akan mendapatkan bandwidth full sebesar 2Mbps, dan ketika kedua user tersebut online akan terbagi otomatis menjadi masing-masing mendapatkan kecepatan 1Mbps.

Lanjut, kita akan menerapkan batasan per user menggunakan child-queue parent. Pada parameter limit per user kita tentukan Limit-at (CIR) dan Max Limit (MIR). Dan membuat queue parent dengan parameter Max-Limit (MIR) sebesar total bandwidth yang kita punya.

Pertama kita setting master queue-parent.

Simple Queue Master Parent


Kemudian set queue user pada child-queue yang diarahkan ke Parent "Total Bandwidth", dengan parameter Limit-at 1Mbps dan Max-limit 2Mbps.

Parameter pada opsi Limit-at bisa di artikan seperti garansi kapasitas bandwidth yang di dapat. Perhitungannya 2Mbps / 2 user = 1Mbps, jadi saat kecepatan total bandwidth memenuhi sebesar 2Mbps user tersebut akan dipastikan mendapatkan bandwitdh sebesar 1Mbps. Di contoh ini saya menggunakan "Simple Queue"


Simple Queue User Client

Simple Queue User Parent

Buat lagi untuk user lainnya. Hasilnya akan seperti ini :

Pembagian Bandwidth Shared / Up To
Hasil 1 - Saat hanya 1 user yang online, user tersebut mendapatkan semua total bandwidth

Pembagian Bandwidth Shared / Up To
Hasil 2 - Saat semua user online/download, masing-masing user mendapatkan rata 1Mbps
Tehnik diatas adalah pembagian bandwidth Shared / Up To, batasan bandwidth bertingkat (parent) dengan melakukan pembagian bandwidth secara merata.



Manajemen Bandwidth Berdasarkan Prioritas Trafik


Tehnik ke 4 ini adalah bagaimana menerapkan manajemen bandwidth berdasarkan prioritas trafik dengan identifikasi sebuah service/aplikasi jaringan.

Tuesday, October 2, 2018

Push Notifikasi Android

  1. CODE
  2. ANDROID
Code

Cara Memulai dengan Push Pengantar

Membuat pengguna memasang aplikasimu hanyalah setengah dari pertarunganmu. Membuat mereka menggunakannya secara reguler adalah setengahnya lagi. Ini cukup mungkin bahwa penggunamu sudah sepenuhnya lupa mengenai aplikasimu setelah memakainya sekali atau dua kali. Dengan semua aplikasi baru lainnya yang berkompetisi untuk mendapatkan perhatian.
Dengan menggunakan push notifications, kamu bisa mengingatkan pengguna mengenai aplikasimu tiap saat. Lalu, meningkatkan kesempatan aplikasimu tetap terpasang di perangkat mereka.
Google Cloud Messaging, disingkat GCM, adalah layanan gratis yang bisa kamu gunakan untuk mengirim push notifications ke penggunamu. di panduan ini, kamu akan belajar cara menggunakannya untuk membuat sebuah aplikasi Android yang bisa menerima push notifications, dan sebuah server-side Python sederhana yang bisa membuat dan mengirimnya.
Untuk kebanyakan komunikasi klien-server, klien-nya akan membuat permintaan untuk menerima dari dari server. Dengan kata lain, klien menarik data dari server. Pada kasus push notifications, server-nya yang membuat transfer data.
Ini biasanya diselesaikan dengan menjaga koneksi TCP/IP terus-menerus - koneksi yang tetap terbuka tanpa batas waktu - di antara server dan klien. Ini mungkin terdengar bagus, tapi jika kamu memiliki aplikasi populer, menjaga ribuan koneksi antara server dan perangkat penggunamu bisa jadi sangat mahal.
Google Cloud Messaging adalah sebuah jasa yang menyelesaikan masalah ini dengan berperan sebagai penengah antara server dan pengguna perangkat. Dengan GCM, Google's Cloud Connection Server, sering disebut CCS, mengatur koneksi terus-menerus untukmu. Dia juga memastikan bahwa push notification diantar dengan aman dan andal.
Untuk terus melanjutkan, kamu membutuhkan:
Nyalakan Android Studio dan buat sebuah proyek dengan sebuah Activity kosong. Jika kamu menggunakan yang bawaan, proyeknya seharusnya memiliki sebuah Java class di MainActivity.java.
Di proyek ini, kita akan menggunakan Google Services gradle plugin untuk mengonfigurasi GCM Masukkan dia ke proyek dengan menambahkan baris berikut di bagian dependencies dari build.gradle proyek:
1
classpath 'com.google.gms:google-services:1.5.0'
Selanjutnya, terapkan plugin-nya di modul app build.gradle:
1
apply plugin: 'com.google.gms.google-services'
Untuk bisa menggunakan GCM API, tambahkan com.google.android.gms:play-services Sebagai compiledependency di berkas yang sama:
1
compile "com.google.android.gms:play-services:8.3.0"
Jika kamu mengklik tombol Sync Now, kamu harusnya melihat error berikut:

Install Repository and sync project

Klik tautan Install Repository and sync project untuk memperbaiki error-nya.
Dalam berkan proyek AndroidManifest.xml, buat dan gunakan sebuah izin C2D_MESSAGE kostum berdasarkan nama paket proyekmu. Pastikan bahwa protectionLevel dari izin diatur ke signature.
1
2
3
4
5
<permission
    android:name="com.github.hathibelagal.pn.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission
  android:name="com.github.hathibelagal.pn.permission.C2D_MESSAGE" />
Notifikasi diterima dalam bentuk broadcasts. Untuk menangani broadcast tersebut, aplikasi kita membutuhkan sebuah BroadcastReceiver. Namun, kita tidak perlu membuatnya secara manual. Kita bisa menggunakan class GcmReceiver sebagai BroadcastReceiver.
BroadcastReceiver harus memiliki intent-filter yang merespon aksi com.google.android.c2dm.intent.RECEIVE dan nama category -nya harus sesuai dengan nama paket proyek. Tambahkan kode berikut ke manifest-nya:
1
2
3
4
5
6
7
8
9
<receiver
    android:name="com.google.android.gms.gcm.GcmReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.github.hathibelagal.pn" />
    </intent-filter>
</receiver>
Sementara berkomunikasi dengan Cloud Connection Server, kita harus mengidentifikasi diri kita sendiri menggunakan API key di sisi server dan sender ID di sisi klien. Untuk mendapat API key dan sender ID, buat sebuah proyek baru di dalam developers console.

Welcome screen

Mulai dengan mengklik tombol Pick a platform. Lalu, klik tombol Enable service for my Android App. Saat kamu melakukannya, kamu akan diminta untuk memasukkan sebuah nama dan nama paket untuk aplikasi Android-mu. Pastikan bahwa nama paket Android yang kamu sediakan cocok dengan nama paket yang kamu masukkan saat kamu membuat proyek Android Studio.

Project details

Selanjutnya, klik tombol Choose and configure services di bawah. Kamu sekarang bisa memilih layanan Google yang ingin kamu tambahkan ke aplikasi.

Available Google Services

Sekarang, klik tombol Cloud Messaging lalu klik Enable Google Cloud Messaging. Setelah beberapa detik, kamu akan ditampilkan dengan server API key dan sender ID. Buat sebuah catatan dari server API key dan tekan Close.

Server API key and sender ID

plugin Google Services yang kita tambahkan sebelumnya membutuhkan berkas konfigurasi agar bekerja dengan benar. Buat berkasnya dengan mengklik tombol Generate configuration files.
Setelah berkasnya dibuat, unduh dia dan letakkan di dalam direktori aplikasi proyek Android Studio.
GCM mengidentifikasi perangkat Android menggunakan token registrasi. Maka, aplikasi kita harus bisa mendaftarkan dirinya untuk tiap perangkat Android di mana dia terpasang.
Pendaftarannya harus diselesaikan di latarbelakang karena proses ini akan menghabiskan beberapa waktu tergantung dari konektivitas jaringan. Karena pendaftarannya tidak membutuhkan input apapun dari pengguna, IntentService cocok untuk tugas ini.
Buat sebuah class Java baru bernama RegistrationService.java, buat dia jadi ssubclass dari IntentServicedan timpa dengan metode onHandleIntent -nya.
01
02
03
04
05
06
07
08
09
10
public class RegistrationService extends IntentService {
    public RegistrationService() {
        super("RegistrationService");
    }
    @Override
    protected void onHandleIntent(Intent intent) {
    }
}
Di dalam metode onHandIntent, kita bisa menggunakan Instance ID API untuk menghasilkan atau mengambil token pendaftaran. Pertama, buat instance dari class InstanceID, menggunakan metode getInstance -nya.
1
InstanceID myID = InstanceID.getInstance(this);
Sekarang kita bisa menggunakan metode getToken dari objek InstanceID untuk mendapatkan token pendaftaran dalam bentuk sebuah StringgetToken mengharapkan sender ID sebagai argumen-nya. Karena kita telah menambahkan berkas google-services.json ke proyek kita, kita bisa melewatkan sender ID ke metode-nya menggunakan R.string.gcm_defaultSenderID.
1
2
3
4
5
String registrationToken = myID.getToken(
        getString(R.string.gcm_defaultSenderId),
        GoogleCloudMessaging.INSTANCE_ID_SCOPE,
        null
);
Jika kamu ingin melihat konten dari token pendaftaran untuk urusan debugging, kamu bisa log dia sebagai pesan debug menggunakan metode Log.d
1
Log.d("Registration Token", registrationToken);
Pada titik ini, kamu bisa mengirim token registrasi ke server situsmu dan menyimpannya ke database di sana. Namun, kamu tidak perlu melakukan ini jika kamu tidak berencana merujuk penggunamu satu persatu. Jika kamu ingin mengirm pesan yang sama ke setiap pengguna, kamu harus mengikuti pendekatan publish-subscribe.
Sekarang saya akan menunjukkanmu cara berlangganan topic bernama my_little_topic. Dia hanya membutuhkan dua baris kode. Pertama, buat sebuah instance baru dari class GcmPubSub menggunakan metode getInstance. Selanjtunya, panggil metode subscribe dan lewatkan token pedaftaran padanya bersama dengan nama dari topik.
1
2
GcmPubSub subscription = GcmPubSub.getInstance(this);
subscription.subscribe(registrationToken, "/topics/my_little_topic", null);
Aplikasi kita sekarang bisa menerima semua push notification yang dipublikasikabn ke my_little_topic.
Terakhir, definisikan layanan di AndroidManifest.xml.
1
2
<service android:name=".RegistrationService"
   android:exported="false" />
Layanan pendaftaran selesai.
Token pendaftaran disegarkan secara periodik. Karena itu, setiap aplikasi Android yang menggunakan GCM harus memiliki sebuah InstanceIDListenerService yang bisa menangani penyegaran tersebut. Maka, buat sebuah berkas Java bernama TokenRefreshListenerService.java dan buat dia jadi sebuah subclass dari InstanceIDListenerService. Di dalam metode onTokenRefresh dari class. Karena kita perlu memulai proses registrasi lagi dengan memulai layanan pendaftaran menggunakan meotde Intent dan startService.
tambahkan kode berikut ke TokenRefreshListenerService.java:
1
2
3
4
5
6
7
public class TokenRefreshListenerService extends InstanceIDListenerService {
    @Override
    public void onTokenRefresh() {
        Intent i = new Intent(this, RegistrationService.class);
        startService(i);
    }
}
Layanan ini juga harus bisa merespon aksi com.google.android.gms.iid.InstanceID. Maka, sementara mendefinisikan layanan di AndroidManifest.xml, tambahkan intent-filter yang tepat.
1
2
3
4
5
6
7
<service
    android:name=".TokenRefreshListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID" />
    </intent-filter>
</service>
Untuk memastikan proses registrasi-nya berlanjut sesaat setelah aplikasi dimulai. Kita harus memulai classs RegistrationService di alam metode onCreate dari MainActivity. Untuk melakukannya, buat sebuah Intent dan gunakan metode startService.
1
2
Intent i = new Intent(this, RegistrationService.class);
startService(i);
GCM secara otomatis akan menampilkan push notification ke tray sesaat setelah mereka diterima. Namun, itu hanya terjadi jika aplikasi yang terasosiasi memiliki GCMListenerService.
Buat sebuah class Java baru bernama NotificationsListenerService dan buat dia jadi subclass dari GCMListenerService. Kecuali kamu ingin menangani data yang didorong olehmu sendiri, kamu tidak perlu menulis kode apapun di dalam class ini. Kita bisa meninggalkan class-nya kosong sekarang.
1
2
3
public class NotificationsListenerService extends GcmListenerService {
}
Sementara mendefinisikan layanannya di AndroidManifest.xml, pastikan bahwa kamu menambahkan sebuah intent-filter yang mengizinkan dia untuk merespon ke aksi com.google.android.c2dm.intent.RECEIVE.
1
2
3
4
5
6
7
<service
    android:name=".NotificationsListenerService"
    android:exported="false" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</service>
Setiap push notification harus memiliki ikon yang terasosiasi dengannya. Jika kamu tidak memiliki satu yang bagus, kamu bisa mendapatkan satu dari Google's Material Design Icons Library.

Material design icons library

Setelah kamu mengunduh ikonnya, letakkan dia dia folder res dari proyekmu. Saya akan menggunakan ic_cloud_white_48dp sebagai ikonnya. 
Aplikasi Android kita sekarang selesai. Saat kamu mengompilasi dan menjalankannya pada perangkat Android, kamu akan bisa melihat token pendaftaran di logcat.

Registration token in logcat

Tekan tombol kembali di perangkatmu untuk keluar dari aplikasinya. Ini dibutuhkan karena GCM akan menampilkan push notifications secara otomatis hanya jika pengguna tidak menggunakan aplikasinya. Jika kamu ingin push notification-nya ditampilkan bahkan ketika aplikasinya berjalan. Kamu harus membuat notifikasinya di dalam NotificationsListenerService menggunakan Notification.Builder class.
Di bagian akhir dari panduan ini, kita akan membuat sebuah skrip Python sederhana yang bisa membuat dan mengirim push notification ke semua perangkat Android di mana aplikasi ktia terpasang.
Kamu bisa menjalankan skrip ini dari komputer lokal maupun server jauh di mana kamu memiliki akses SSH.
Buat sebuah berkas baru bernama send.py dan buka dengan editore teks favoritmu.
Pada bagian atar berkas, impor modul urllib2 dan urllib. Kita akan menggunakan modul ini untuk mengirim data ke Google's Cloud Connection Server. Impor modul json dengan benar karena data yang kita kirim harus dalam JSON yang valid Terakhir. untuk mengakses argumen baris perintah, impor modul sys.
1
2
3
4
from urllib2 import *
import urllib
import json
import sys
SElanjutnya, buat sebuah variabel yang menyimpan server API key yang kamu ambil dari catatan sebelumnya. Key-nya harus menjadi bagian dari setiap permintaan HTTP yang ktia buat ke CCS.
1
MY_API_KEY="ABCDEF123456789ABCDE--12A"
Setiap notifikasi harus memiliki judul dan badan. Ketimbang memogram mereka di skrip kita. Mari terima judul dan badan sebagai argumen baris perintah menggunakan array argv.
1
2
messageTitle = sys.argv[1]
messageBody = sys.argv[2]
Buat sebuah Python dictionary object baru untuk mewakili data yang harus dikirim ke CCS. Untuk aplikasi Android kita, agar bisa menerima notifikasi, dia harus dipublikasikan ke topik bernama my_litte_topic.  Maka, tambahkan sebuah key bernama to ke dictionary dan atur nilainya ke /topics/my_little_topic.
Untuk mewakili konten dari notifikasi, tambahkan sebuah key bernama notification ke dictionary dan atur nilainya ke objek dictionary lainnya yang mengadung tiga kunci:
  • body
  • title
  • icon
Pastikan bahwa nilai dari key icon sama dengan nama dari icon yang bisa diambil dari proyek Android-mu.
1
2
3
4
5
6
7
8
data={
    "to" : "/topics/my_little_topic",
    "notification" : {
        "body" : messageBody,
        "title" : messageTitle,
        "icon" : "ic_cloud_white_48dp"
    }
}
Konversi dictionary-nya ke JSON string menggunakan fungsi dumps dari modul json:
1
dataAsJSON = json.dumps(data)
Semua yang kita butuhkan sekarang adalah mengirim JSON string ke https://gcm-http.googleapis.com/gcm/send. Untuk melakukannya, buat sebuah objek Request baru dan atur dataAsJSON sebagai datanya. Selanjutnya, atur header Authorization ke MY_API_KEY dan header Content-type ke application/json.
1
2
3
4
5
6
7
request = Request(
    dataAsJSON,
    { "Authorization" : "key="+MY_API_KEY,
      "Content-type" : "application/json"
    }
)
Terakhir, untuk mengeksekusi permintaan dan mengambil responnya, lewatkan permintaan objek ke fungsi urlopen dan panggil metode read -nya.
1
print urlopen(request).read()
Skrip Python-nya sekarang selesai dan siap dipakai.

Pada titik ini, kita siap untuk mengirim push notification ke semua perangkat di mana aplikasi kita terpasang. Buka terminal dan masuk ke direktori di mana kamu membuat send.py
Lewatkan nama dari skrip ke executable python bersama dengan sebuah string untuk judul notifikasi dan satu lagi untuk badan notifikasi-nya. Berikut adalah contoh yang bisa kamu gunakan:
1
python send.py "My first push notification" "GCM API is wonderful!"
Jika tidak ada error, kamu harusnya melihat respon seperti ini:
1
{"message_id":12345676892321}
Jika kamu mengecek perangkat Androidmu, kamu harusnya meliaht sebuah notifikasi baru di notification tray.

Push notification in notification tray

Sekarang kamu tahu cara mengirim push notifications ke penggunamu. PAda pelajaran ini, kamu belajar cara membuat aplikasi Android yang bisa mendaftarkan dirinya sendiri, dan menerima notifikasi yang dipublikasikan ke sebuah topik tertentu. Kamu juga belajar cara membuat skrip Python yang bisa mempublikasikan notifikasi.
Bahkan push notification bisa jadi cara bagus untuk berkomunikasi dengan penggunamu. Saya sarankan kamu menggunakan mereka di waktu luang  dan hanya jika ada hal berguna untuk dikatakan. Karena mengirm terlalu banyak bisa jadi cara tercepat untuk membuat aplikasimu dihapus.
Untuk memperlajari lebih banyak mengenai Google Cloud Messaging, mengaculah ke Cloud Messaging Guide.