alert
function untuk membuat notifikasi yang ditujukan untuk pengguna baik member maupun admin
includes/function/alert.php
mengirimkan notifikasi ke member/admin atau ke global baik di admin maupun public area
alert_add($title, $description, $params = array(), $user_id='none', $group_id=0, $module = '');
- $title: String judul dari notifikasi
- $description: String isi detail dari notifikasi
- $params: Array untuk menambahkan parameter tambahan dimana key 'url' harus tersedia
- $user_id: Integer ID dari database table `bbc_user` jika dikosongkan akan mengambil dari
$user->id
- $group_id: Integer ID dari database table `bbc_user_group`
- $module: Integer ID dari database table `bbc_module` atau String untuk nama module
Contoh penggunaan
$title = 'judul';
$message = 'message description';
$params = array(
'url' => 'string (public url if user opened from member area)',
'url_admin' => 'string (admin url for admin section)'
);
$user_id = number|array(numbers)|email|admin|member|public
$group_id = number|array
## MENGIRIM KE USER TERTENTU:
// ke user dgn user_id=1
alert_add($title, $message, $params, 1);
// ke banyak user dengan user_id= 1 atau 2 atau 3
alert_add($title, $message, $params, array(1,2,3));
// ke user yang punya email tertentu
alert_add($title, $message, $params, 'danang@fisip.net');
## MENGIRIM KE ADMIN (**)
// siapapun yang login ke admin
alert_add($title, $message, $params, 'admin');
// user_id=1/2/3 yang login ke admin
alert_add($title, $message, $params, array('admin', 1, 2, 3));
## MENGIRIM KE MEMBER (**)
// siapapun yang login ke member area
alert_add($title, $message, $params, 'member');
// user_id=1/2/3 yang login ke member area
alert_add($title, $message, $params, array('member', 1, 2, 3));
## MENGIRIM KE PUBLIC (PENGUNJUNG YANG BELUM LOGIN) (**)
// siapapun yang mengunjungi web (jika block notif di pasang di template public)
alert_add($title, $message, $params, 'public');
## MENGIRIM KE GROUP USER TERTENTU (**)
// ke user yang masuk ke dalam group_id=1
alert_add($title, $message, $params, 0, 1);
// ke user dengan group_id 1/2/3
alert_add($title, $message, $params, 0, array(1,2,3));
#Keterangan:
- (**) semua akan menerima alert jika salah satu user membuka maka notif dianggap `read` bagi semua user tersebut
- jika ingin mengirim ke tiap user secara personal maka kita harus memanggil alert_add satu persatu untuk setiap user sehingga jika ada satu user membuka notif, maka notif untuk user lain status nya masih `unread`
- function ini adalah hookable function dimana bisa anda tambahkan proses di dalam module anda
function untuk memanggil array yang ada di variable constant _FCM_SERVER_JSON jika function alert_push aktif
alert_fcm($key='');
- $key: String key dari array dan jika dikosongkan maka akan return array keseluruhan dari variable constant _FCM_SERVER_JSON
mensubscribe kan member ke dalam topic, jika function alert_push sudah diaktifkan
alert_fcm_subscribe($user_ids, $topic, $last_id = 0 );
- $user_ids: Array dari ID user
- $topic: String nama topic
- $last_id: Integer 0 yang akan dirutkan berdasarkan jumlah $user_ids yang dimasukkan
function ini dipanggil ketika kita membuat topic di menu admin "Control Panel / User Manager / Mobile Notification" atau menambahkan subscriber pada topic tertentu
mengenerate token atau mengambil token dari cache sebagai key untuk eksekusi API dari HTTP API V1 firebase messaging
alert_fcm_token();
function hanya dipanggil di dalam function yang akan men-curl JWT HTTP API V1 dari google
dipanggil oleh function alert_fcm_subscribe tidak untuk dipanggil secara langsung
alert_fcm_topic_subscribe($tokens, $topics, $i=0);
- $tokens: String / Array berisi token dari device member
- $topics: String / Array berisi topic yang akan di subscribe
- $i: Integer 0 untuk diurutkan berdasarkan jumlah $tokens/$topics yang diinputkan
jika $tokens berisi Array maka $topics harus berisi string begitu juga sebaliknya agar bisa di eksekusi secara berurutan
dipanggil oleh function alert_fcm_subscribe tidak untuk dipanggil secara langsung
alert_fcm_topic_unsubscribe($tokens, $topics, $i=0);
- $tokens: String / Array berisi token dari device member
- $topics: String / Array berisi topic yang akan di unsubscribe
- $i: Integer 0 untuk diurutkan berdasarkan jumlah $tokens/$topics yang diinputkan
jika $tokens berisi Array maka $topics harus berisi string begitu juga sebaliknya agar bisa di eksekusi secara berurutan
menghapus token yang sudah 3bulan tidak aktif dan sudah tidak valid, jika function alert_push aktif
alert_fcm_verify($limit=1000, $i=0);
- $limit: Integer jumlah maximal yang akan di check
- $i: Integer 0 yg akan dipanggil berututan sesuai jumlah $limit
function ini dipanggil setiap hari sekali jika ada member yang update pertama kali di hari itu di URL
user/push-token
untuk mengirimkan notifikasi kepada pengguna mobile app
alert_push($to, $title, $message, $module = 'content', $arguments = array(), $action = 'default', $sending_id=0);
- $to: penerima dari notifikasi yang bisa anda isi seperti:
- -1 jika diisi angka -1 (minus satu) maka semua pengguna aplikasi akan mendapat notifikasi atau bs juga dimasukkan '/topics/userAll'
- Integer dari field ID di table `bbc_user`
- Array yang berisi kumpulan dari field ID di table `bbc_user`
- String
- username dari user yang ingin di kirim
- prefix "group:" kemudian diikuti dengan Integer dari field ID di table `bbc_user_group`
- 'userID-groupID' jika ingin mengirim ke pengguna aplikasi yg khusus user group tertentu
- Contoh kasus: user_id 1 masuk kedalam group_id 3 dan 4. Semisal 3=Driver dan 4=Penumpang
- Sedangkan aplikasi Driver dan aplikasi penumpang itu berbeda dan ingin mengirim notif ke user tersebut untuk aplikasi Driver saja
- '/topics/topicName' maka akan mengirim ke semua member yg subscribe ke topic dengan nama 'topicName'
- $title: String judul notifikasi
- $message: String pesan notifikasi
- $module: String module yang dituju ketika notifikasi dibuka oleh pengguna aplikasi dengan format [namamodule]/[namatask] di mana namatask jika dikosongkan akan menuju ke index dari module tersebut
- $arguments: Array parameter yang akan dikirimkan ke $module di dalam aplikasi tersebut
- $action: String identifikasi jika ada penambahan action dimana notifikasi tersebut akan diperlakukan secara berbeda mengikuti script yang ada di mobile app nya
- $sending_id: id dr table bbc_user_push_sending hanya digunakan di modules/_cpanel/admin/user/fcm_send.php untuk mengupdate progress pengiriman
function ini hanya menyimpan data message yang akan dikirimkan, sedangkan pengiriman nya akan di lakukan secara background pada function
alert_push_send untuk menjaga performa system dan stabilitas server. Sedangkan setiap notifikasi ketika di baca oleh user maka anda HARUS mengkonfirmasi kembali bahwa message atau notif tersebut telah terbaca ke URL dari domain yang mengirim notif semisal domain nya adalah aku.com maka url yang perlu anda akses adalah url
aku.com/user/push-read
dengan parameter POST notif_id dan secretkey.
sedangkan untuk mengkases daftar notifikasi bisa diambil dari url
aku.com/user/push-notif
menggunakan method POST dengan parameter:
$user_id = [opsional]
$group_id = [opsional] comma separated or Array
$username = [opsional]
$token = [wajib]
$push_id = [optional] ID dari hasil return push-token sebelumnya untuk diupdate (biasanya krn update token krn tolen ada umurnya)
$old_id = [optional] ID dari hasil return push-token sebelumnya untuk dihapus
$device = [optional] nama atau jenis device yang digunakan untuk membuka app
$secretkey = _class('crypt')->encode(_SALT.'|'.date()'Y-m-d H:i:s');
$group_id jika dikosongkan atau tidak ada maka daftar notifikasi yang di listkan adalah semua notifikasi untuk user tersebut, tidak perduli dia berada di group user apapun
untuk key 'secretkey' sendiri adalah hasil encode dari format
_SALT.'|'.yyyy-mm-dd HH:ii:ss
AKTIFASI FITUR PUSH NOTIF
function ini hanya bisa digunakan apabila table bbc_user_push sudah di aktifkan, untuk mengaktifkan silahkan ke admin "control panel / user manager" dibagian bawah table akan muncul tombol untuk mengaktifkan fitur push notif jika belum aktif. Tetapi sebelumnya anda harus menambahkan variable constant
_FCM_SENDER_ID
dan
_FCM_SERVER_JSON
pada config.php.
Berikut keterangan untuk tiap const variable yang bisa di pakai
_FCM_ICON_BG
- berisi warna background yang akan digunakan ketika device (android) menampilan notification contoh: #f68c29
_FCM_SENDER_ID
- masuk ke firebase console
- pilih project yang ingin di pilih
- masuk ke project setting
- click tab "Cloud Messaging"

_FCM_SERVER_JSON
- masuk ke google console
- pilih project yang akan digunakan (bisa juga dr link "Manage Service Accounts" disamping Sender ID di gambar atas)
- pilih salah satu email dr service account yang tersedia
- masuk ke tab "KEYS"
- klik ADD KEY lalu Create new key dan pilih JSON
- file JSON akan otomatis terdownload dan copy isi dari file tsb. sebagai value dari constant variable _FCM_SERVER_JSON
function yang otomatis akan dipanggil ketika alert_push dieksekusi
alert_push_send($id, $last_id);
- $id: Integer dari field ID di table `bbc_user_push_notif` yang akan menentukan data apa yang akan dikirimkan oleh system
- $last_id: Integer dari field ID di table `bbc_user_push` yang akan menentukan user terakhir yang telah menerima notifikasi tersebut
function ini dipanggil otomatis oleh system, jadi anda tidak perlu menggunakan function ini ketika ingin mengirimkan notifikasi, yang perlu anda gunakan adalah function
alert_push dimana function tersebut secara otomatis akan mengeksekusi function ini satu per satu untuk tiap pengguna aplikasi mobile
meyimpan data token dari para pengguna aplikasi mobile yang terintegrasi dengan project yang anda buat
alert_push_signup($token, $user_id, $group_ids, $username, $device, $os, $push_id = 0);
- $token: String, token yang di dapatkan ketika pertama kali membuka aplikasi mobile
- $user_id: Integer, ID dari table `bbc_user` jika ada (bisa jadi satu user_id bs memiliki banya device)
- $group_ids: String, ID dari group user dan jika lebih dari satu group_id maka akan dipisahkan dengan koma
- $username: String, username untuk login ke website
- $device: String, nama device seperti iphoneX, nexus 6p atau yg lain
- $os: String, nama os yang digunakan seperti android/ios dll.
- $push_id: Integer, isikan 0, jika tidak maka data di atas akan mereplace data yang ada di dalam table `bbc_user_push` dengan ID dari $push_id ini
Fungsi ini adalah
hookable function, jadi anda bisa membuat function di dalam module yang anda buat sendiri untuk menambahkan proses penyimpanan token, semisal ingin mengkelompokkan user berdasarkan category, wilayah atau lainya,
adapun argument dari function anda sendiri sama persis seperti function ini, hanya saja pada $push_id akan terisi ID yang baru saja dimasukkan
Return dari function ini adalah $push_id yaitu ID dari table `bbc_user_push` yang barusan dimasukkan ke dalam table atau id yang diedit saat itu
Untuk mengakses function ini dari URL anda bisa mem-POST-kan parameter ke url
domainanda/user/push-token
lalu valriable POST nya adalah:
$user_id = [opsional]
$group_id = [opsional] comma separated or Array
$username = [opsional]
$token = [wajib]
$push_id = [optional] ID dari hasil return push-token sebelumnya untuk diupdate
$old_id = [optional] ID dari hasil return push-token sebelumnya untuk dihapus
$device = [optional] nama atau jenis device yang digunakan untuk membuka app
$os = [optional] nama atau jenis os yang digunakan untuk membuka app
$secretkey = _class('crypt')->encode(_SALT.'|'.date()'Y-m-d H:i:s');
dengan return nya berupa array:
{"ok": 1,
"message": "success",
"result": "integer ID dari table `bbc_user_push`"
}
sedangkan untuk mengirimkan notificationnya, anda bisa menggunakan function
alert_push
function ini dieksekusi oleh alert_push_signup untuk menampilkan topic-topic yang perlu di subscribe melalui device ketika login/logout ataupun ada perubahan data di member
alert_push_topic($push_id, $user_id, $is_subscribe=true, &$topics=array());
- $push_id: Integer ID dari table bbc_user_push
- $user_id: Integer ID dari user
- $is_subscribe: Boolean
- TRUE member login atau ada perubahan data member
- FALSE member logout
- $topics: Array berisi topic2 yang akan di return kan
ini adalah
hookable function tetapi agak sedikit berbeda cara penggunaan hookable nya. berikut dibawah adalah contoh apabila anda membuat function di module agenda:
function agenda_alert_push_topic($push_id, $user_id, $is_subscribe, &$topics)
{if ($is_subscribe)
{
$topics[] = 'percobaan';
$topics['info']['percobaan'] = 'ini hanya percobaan membuat topic saja';
}
}
perhatikan pada argument
&$topics
terdapat tambahan
&
untuk menjaga topic2 yang sudah ditambahkan oleh function yang lain
menghapus topic beserta member nya, jika function alert_push diaktifkan
alert_push_topic_delete($topic);
- $topic: Array data topic yang akan dihapus
function ini dipanggil di menu admin "Control Panel / User Manager / Mobile Notification" ketika admin menghapus topic dimana semua member akan di unsubscribe kan dr topic sebelum topic dihapus dari database
menampilkan pesan ke daftar notifikasi jika ada notifikasi baru
alert_view($data);
- $data: Array data row dari database table `bbc_alert`
function ini adalah
hookable function dimana bisa anda tambahkan proses di dalam module anda
function ini dipanggil oleh alert_push tidak untuk dipanggil secara langsung
_alert_push_insert($ids, $data, $tos, $group_id, $sending_id, $last_id = 0);
- $ids: 2 type input
- Integer: ID dr table bbc_user_push_topic akan mencari semua userID yg ada di table bbc_user_push_topic_list untuk mendapat notif
- Array: kumpulan userID yang akan mendapat notif
- $data: Array berisi data notifikasi yang akan dikirim ke user
- $tos: Array topic (jika ada) yg akan dikirim notif
- $group_id: Integer groupID dari user biasanya digunakan untuk membedakan applikasi mana yg dipakai jika ada multiple apps dalam satu system
- $sending_id: Integer berisi ID dr table bbc_user_push_sending jika data notif berasal dari admin "Control Panel / User Manager / Mobile Notification"
- $last_id: Integer berisi angka nol yang akan memanggil function ini kembali jika $ids berisi lebih dari satu
function ini tidak diperuntukan dipanggil secara langsung kecuali untuk keperluan testing, silahkan gunakan
alert_push jika ingin mengirim notifikasi
mengambil ID dari database table `bbc_menu` dipanggil oleh function alert_view
_alert_view_cpanel($link);
- $link: String link yang akan di proses
function ini sebenar nya hanya difungsikan untuk mencocok kan path yg ada di table db bbc_menu jika tidak ditemukan maka akan dipotong bagian terakhir lalu di cari lagi sampai ketemu menu yg sesuai di table bbc_menu