Push Notification Android — Part 2

Norma Puspitasari
pie-o
Published in
3 min readMay 4, 2017

Unfortunately, Sibujang has stopped!

Apa yang sudah dilakukan:

  • Memperbaiki bug
  • Membuat database device pada mongoDB
  • Membuat program backend untuk menghubungkan database dan android
  • Membuat test backend dan android notification

1. Memperbaiki bug

Setelah diperhatikan pada logcat android monitor dengan filter error, akhirnya saya melihat bahwa error diatas karena hal-hal tentang google play service.

Could not find class ‘android.os.UserManager’, referenced from method com.google.android.gms.common.GooglePlayServicesUtilLight.zzaRCould not find class ‘android.app.AppOpsManager’, referenced from method com.google.android.gms.internal.zzabz.zzg

Ternyata, error tersebut dikarenakan saya langsung mengcompile google play service secara keseluruhan padahal tidak disarankan untuk mengcompile seluruh google play service dan kita harus memilih service yang hanya benar-benar dipakai.

if you use google play services, instead of compiling the whole APIs, selectively compile may help.

Kalimat diatas dikutip dari orang-orang baik disini. Adapun, untuk melihat jenis-jenis google service APIs dapat dilihat disini.

Selain force stop, pada build.gradle app juga mengalami error version GCM (disuruh rollback oleh Android Studio padahal sudah versi terbaru). Ternyata hal ini dikarenakan kesalahan letak dari apply plugin-_- yg benar adalah urutannya google terlebih dahulu, baru android.application seperti dibawah ini.

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'

Sebelumnya saya meletakkan gms dibawah android.application (yang salah).

2. Membuat database device pada mongoDB

3. Membuat program backend untuk menghubungkan database dan android

Pada post Push Notification Android pertama, saya sudah membuat class-class Notifikasi di Android namun belum menghubungkan ke backend. Untuk yang backend, saya mencari inspirasi dari sini. Dan tentunya dikustomisasi sesuai aplikasi sibujang, untuk hasilnya dapat dilihat di https://sibujang-app-staging/devices :)

Object device pada backend:

var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;

var deviceSchema = new Schema({
registrationId : String,
kodeStaff: String
});

module.exports = mongoose.model(‘device’, deviceSchema);

Kemudian routes:

app.post(‘/devices’,function(req,res) {
var registrationId = req.body.registrationId;
var kodeStaff = req.body.kodeStaff;
if ( typeof registrationId == ‘undefined’ ) {

console.log(constants.error.msg_invalid_param.message);

res.json(constants.error.msg_invalid_param);

} else if (!registrationId.trim() ) {

console.log(constants.error.msg_empty_param.message);

res.json(constants.error.msg_empty_param);

} else {

registerFunction.register(registrationId, kodeStaff, function(result) {

res.json(result);

if (result.result != ‘error’){

io.emit(‘update’, { message: ‘New Device Added’,update:true});

}
});
}
});

app.get(‘/devices’,function(req,res) {

devicesFunction.listDevices(function(result) {

res.json(result);

});
});

Function register:

exports.register = function(registrationId,kodeStaff,callback){

var newDevice = new device({
registrationId : registrationId,
kodeStaff : kodeStaff
});

device.find({registrationId : registrationId}, function(err,devices){

var totalDevices = devices.length;

if (totalDevices == 0) {

newDevice.save(function(err){

if (!err) {

callback(constants.success.msg_reg_success);

} else {

callback(constants.error.msg_reg_failure);

}
});
} else {

callback(constants.error.msg_reg_exists);

}

});

}

Setiap device staff yang memasang aplikasi sibujang pun sudah bisa mendapatkan notifikasi sesuai registrationId dan kode staff mereka.

4. Membuat test backend dan android notification

Test untuk notification:

Test untuk backend:

Next, saya akan mengerjakan user story selanjutnya!

--

--