MTPush-API
MTCorePrivatesApi
- Digunakan terutama untuk konfigurasi informasi.
- Semua metode harus dipanggil di proses utama. Jangan melakukan pengecekan proses sebelum memanggil metode ini atau menempatkannya di proses anak, jika tidak akan terjadi kesalahan pemanggilan.
configAppKey
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Mengonfigurasi application key tanpa perlu konfigurasi di AndroidManifest.xml
* Panggil di Application.onCreate()
* Panggil sebelum [init](#init)
*
* @param context tidak boleh null
* @param appKey tidak boleh null
*/
public static void configAppKey(Context context, String appKey)
Contoh kode: Java:
MTCorePrivatesApi.configAppKey(this, "appkey_anda");
Kotlin:
MTCorePrivatesApi.configAppKey(this, "your appkey")
configAppChannel
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Mengonfigurasi channel aplikasi tanpa perlu konfigurasi di AndroidManifest.xml
* Panggil di Application.onCreate()
* Panggil sebelum init
*
* @param context Tidak boleh null
* @param appChannel Tidak boleh null
*/
public static void configAppChannel(Context context, String appChannel)
Contoh kode: Java:
MTCorePrivatesApi.configAppChannel(this, "nama_channel_anda");
Kotlin:
MTCorePrivatesApi.configAppChannel(this, "your_appChannel")
configAppSiteName
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Mengonfigurasi nama site data center tanpa perlu konfigurasi di AndroidManifest.xml
* Node yang tersedia: Singapore, USA_Virginia, DEU_Frankfurt, HongKong.
* Panggil di Application.onCreate()
* Panggil sebelum [init](#init)
*
* @param context tidak boleh null
* @param appSiteName tidak boleh null
*/
public static void configAppSiteName(Context context, String appSiteName)
Contoh kode: Java:
MTCorePrivatesApi.configAppSiteName(this, "NamaSiteDataCenter");
Kotlin:
MTCorePrivatesApi.configAppSiteName(this, "Your Platform Data Center Site Name")
configHeartbeatInterval
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Mengatur interval heartbeat
* Panggil di Application.onCreate()
*
* @param context tidak boleh null
* @param heartbeatInterval Dalam milidetik, >0, default 4 menit 50 detik
*/
public static void configHeartbeatInterval(Context context, long heartbeatInterval)
Contoh kode (interval 3 menit): Java:
MTCorePrivatesApi.configHeartbeatInterval(this, 3*60*1000);
Kotlin:
MTCorePrivatesApi.configHeartbeatInterval(this, 3 * 60 * 1000)
configConnectRetryCount
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Mengatur jumlah retry koneksi panjang
* Panggil di Application.onCreate()
*
* @param context tidak boleh null
* @param connectRetryCount Default 3, minimal 3
*/
public static void configConnectRetryCount(Context context, int connectRetryCount)
Contoh kode (retry 10 kali): Java:
MTCorePrivatesApi.configConnectRetryCount(this, 10);
Kotlin:
MTCorePrivatesApi.configConnectRetryCount(this, 10)
setTcpSSl
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Mengatur apakah koneksi panjang dienkripsi, default tidak
* Panggil di Application.onCreate()
*
* @param isSSL true untuk enkripsi, false untuk tidak
*/
public static void setTcpSSl(boolean isSSL)
Contoh kode (aktifkan enkripsi): Java:
MTCorePrivatesApi.setTcpSSl(true);
Kotlin:
MTCorePrivatesApi.setTcpSSl(context, true)
configDebugMode
- Panggil di Application.onCreate()
- Panggil sebelum init
- Format log EngageLab, cari "ENGAGELAB-PRIVATES"
- Log dipisah antara proses utama dan proses anak
/**
* Mengatur mode debug, akan mencetak log lebih detail
* Panggil di Application.onCreate()
*
* @param context tidak boleh null
* @param enable true untuk debug, false untuk tidak
*/
public static void configDebugMode(Context context, boolean enable)
Contoh kode: Java:
// Disarankan true saat pengembangan
MTCorePrivatesApi.configDebugMode(context.getApplicationContext(), true);
// Disarankan false saat rilis
MTCorePrivatesApi.configDebugMode(context.getApplicationContext(), false);
Kotlin:
// It is recommended to set it to true when the application is not online, which is convenient for integration
MTCorePrivatesApi.configDebugMode(context.applicationContext, true)
// It is recommended to set it to false after the application is launched
MTCorePrivatesApi.configDebugMode(context.applicationContext, false)
configSM4
- Panggil di Application.onCreate()
- Panggil sebelum init
/**
* Konfigurasi enkripsi standar nasional
* @param context tidak boleh null
*/
public static void configSM4(Context context)
Contoh kode: Java:
MTCorePrivatesApi.configSM4(context.getApplicationContext());
Kotlin:
// Enable national secret encryption, if not called, use the default encryption method
MTCorePrivatesApi.configSM4(context.applicationContext)
getUserId
Jika hasil kosong, cek apakah sudah konfigurasi dan inisialisasi Jika sudah benar, mungkin masih proses koneksi, cek saat onConnectStatus true
/**
* Mendapatkan userId perangkat saat ini, pengenal unik EngageLab
* @param context tidak boleh null
* @return userId
*/
public static String getUserId(Context context)
Contoh kode: Java:
String userId = MTCorePrivatesApi.getUserId(context);
Kotlin:
val userId = MTCorePrivatesApi.getUserId(context)
getRegistrationId
Jika hasil kosong, cek apakah sudah konfigurasi dan inisialisasi Jika sudah benar, mungkin masih proses koneksi, cek saat onConnectStatus true
/**
* Mendapatkan registrationId perangkat saat ini, pengenal unik EngageLab
* @param context tidak boleh null
* @return registrationId
*/
public static String getRegistrationId(Context context)
Contoh kode: Java:
String registrationId = MTCorePrivatesApi.getRegistrationId(context);
Kotlin:
val registrationId = MTCorePrivatesApi.getRegistrationId(context)
setEnableResetOnDeviceChange
- Panggil di Application.onCreate()
- Panggil sebelum init
- Default false (nonaktif)
/**
* Konfigurasi migrasi perangkat
* Jika aktif, saat model perangkat berubah, registration ID dan UID lokal akan dihapus & didaftarkan ulang
* Default false
*
* @param context Tidak boleh null
* @param enable true aktif, false nonaktif
*/
public static void setEnableResetOnDeviceChange(Context context, boolean enable)
Contoh kode: Java:
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, true); // aktifkan
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, false); // nonaktif (default)
Kotlin:
// Enable device migration functionality
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, true)
// Disable device migration functionality (default state)
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, false)
MTPushPrivatesApi
- Digunakan untuk fungsi push
- Semua metode harus dipanggil di proses utama, jangan cek proses sebelum memanggil atau menempatkan di proses anak, jika tidak akan error
configUserLanguage
/**
* Konfigurasi bahasa notifikasi push, gunakan setelah MTPushPrivatesApi.init
* @param context Tidak boleh null
* @param pushLanguage Saat string kosong, kembalikan ke bahasa perangkat
*/
public static void configUserLanguage(Context context, String pushLanguage)
Contoh kode:
Java:
MTPushPrivatesApi.configUserLanguage(context,"zh-Hans");
Kotlin:
MTPushPrivatesApi.configUserLanguage(context, "zh-Hans")
Kode bahasa yang didukung lihat Push API
setEnablePushTextToSpeech
/**
* Pengaturan fitur siaran suara, perlu impor paket suara (mt-sdk-sound-x.x.x.aar)
* @param context Tidak boleh null
* @param enable true aktif, false nonaktif, default false
*/
public static void setEnablePushTextToSpeech(Context context, boolean enable)
Contoh kode: Java:
MTPushPrivatesApi.setEnablePushTextToSpeech(context, true);
Kotlin:
MTPushPrivatesApi.setEnablePushTextToSpeech(context, true)
init
- Disarankan dipanggil di Application.onCreate()
/**
* Inisialisasi MTPush
* Disarankan di Application.onCreate()
* @param context tidak boleh null, gunakan applicationContext
*/
public static void init(Context context)
Contoh kode: Java:
MTPushPrivatesApi.init(context.getApplicationContext());
Kotlin:
class ExampleApplication : Application() {
override fun onCreate() {
super.onCreate()
// turn on debug mode
MTCorePrivatesApi.configDebugMode(applicationContext, true)
// initialization
MTPushPrivatesApi.init(applicationContext)
}
}
setCollectControl
- Atur kontrol pengumpulan data
- Disarankan dipanggil di Application.onCreate(), sebelum init
/**
* Atur kontrol pengumpulan data
* Kontrol apakah data tertentu dikumpulkan dari perangkat
* Disarankan di Application.onCreate(), sebelum init
* @param control Objek kontrol, tidak boleh null
*/
public static void setCollectControl(MTPushCollectControl control)
Contoh kode: Java:
MTPushCollectControl collectControl = new MTPushCollectControl();
collectControl.setGaid(true); // true aktif, false nonaktif. Default aktif.
MTPushPrivatesApi.setCollectControl(collectControl);
Kotlin:
class ExampleApplication : Application() {
override fun onCreate() {
super.onCreate()
// Configure data collection control
val collectControl = MTPushCollectControl()
collectControl.setGaid(true) // Enable GAID collection, false to disable. Enabled by default.
MTPushPrivatesApi.setCollectControl(collectControl)
// Initialization
MTPushPrivatesApi.init(applicationContext)
}
}
goToAppNotificationSettings
- Setelah SDK berjalan, Anda bisa menerima callback hasil pada onNotificationStatus, lalu putuskan perlu/tidaknya memanggil metode ini
/**
* Masuk ke pengaturan notifikasi aplikasi
* @param context tidak boleh null
*/
public static void goToAppNotificationSettings(Context context)
Contoh kode: Java:
MTPushPrivatesApi.goToAppNotificationSettings(this);
Kotlin:
// Go to the notification switch setting page, the customer needs to manually turn on the notification switch
MTPushPrivatesApi.goToAppNotificationSettings(this)
// After inheriting MTCommonReceiver, rewrite the onNotificationStatus method to obtain the status of the notification switch. If enable is true, it means that it has been successfully enabled
override fun onNotificationStatus(context: Context, enable: Boolean) {
if (enable) {
// The notification switch has been set to open
}
}
turnOnPush
- Umumnya untuk mengaktifkan push setelah turnOffPush
- Pemanggilan berulang hanya berlaku sekali
- Jika lingkungan tidak bermasalah, onConnectStatus akan mengembalikan hasil
- Channel didukung: Engagelab/Huawei/Xiaomi/Meizu/oppo/vivo
/**
* Aktifkan Push, status disimpan persisten true, default true
* @param context tidak boleh null
*/
public static void turnOnPush(Context context)
Contoh kode: Java:
MTPushPrivatesApi.turnOnPush(context);
Kotlin:
// Turn on the push, which is turned on by default
MTPushPrivatesApi.turnOnPush(context)
// After inheriting MTCommonReceiver, rewrite the onConnectStatus method to obtain the connection status of the long connection. If enable is true, it means that it has been successfully opened
override fun onConnectStatus(context: Context, enable: Boolean) {
if (enable) {
// enable push push successfully
}
}
turnOffPush
- Umumnya untuk menonaktifkan push
- Setelah dinonaktifkan, panggilan init tidak akan mengaktifkan push
- Pemanggilan berulang hanya berlaku sekali
- Jika lingkungan tidak bermasalah, onConnectStatus akan mengembalikan hasil
- Channel didukung: Engagelab/Huawei/Xiaomi/Meizu/oppo/vivo
/**
* Nonaktifkan push, status disimpan persisten false, default true
* @param context tidak boleh null
*/
public static void turnOffPush(Context context)
Contoh kode: Java:
MTPushPrivatesApi.turnOffPush(context);
Kotlin:
// Turn off the push, you need to call turnOnPush again to turn on the push
MTPushPrivatesApi.turnOffPush(context)
// After inheriting MTCommonReceiver, rewrite the onConnectStatus method to get the long connection status. If enable is false, it means that it has been closed successfully
override fun onConnectStatus(context: Context, enable: Boolean) {
if (!enable) {
// close push push successfully
}
}
addTag
- Panggil init terlebih dahulu, jika tidak pemanggilan tidak valid
- Jika lingkungan tidak bermasalah, onTagMessage akan mengembalikan hasil
/**
* Tambah tag yang ditentukan (logika akumulasi, tag yang diatur sebelumnya tetap ada)
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna, dikembalikan bersama hasil operasi
* @param tags array tag, panjang setiap nama tag maks 40 byte, maks 1000 tag, panjang total satu operasi tidak boleh melebihi 5000 byte
*/
public static void addTag(Context context, int sequence, String... tags)
Contoh kode:
Java:
private static final int SEQUENCE_TAG_ADD = 1;
MTPushPrivatesApi.addTag(context, SEQUENCE_TAG_ADD, "china", "guangdong", "shenzhen");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_ADD) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_ADD = 1
}
MTPushPrivatesApi.addTag(context, SEQUENCE_TAG_ADD, "china", "guangdong", "shenzhen")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_ADD) {
val tags = tagMessage.tags
}
}
deleteTag
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onTagMessage akan mengembalikan hasil
/**
* Hapus tag yang ditentukan
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
* @param tags array tag
*/
public static void deleteTag(Context context, int sequence, String... tags)
Contoh kode:
Java:
private static final int SEQUENCE_TAG_DELETE = 2;
MTPushPrivatesApi.deleteTag(context, SEQUENCE_TAG_DELETE, "china", "guangdong", "shenzhen");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_DELETE) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_DELETE = 2
}
MTPushPrivatesApi.deleteTag(context, SEQUENCE_TAG_DELETE, "china", "guangdong", "shenzhen")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_DELETE) {
val tags = tagMessage.tags
}
}
updateTag
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onTagMessage akan mengembalikan hasil
/**
* Perbarui tag yang ditentukan (logika timpa, tag yang ditambah sebelumnya akan dibersihkan)
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
* @param tags array tag
*/
public static void updateTag(Context context, int sequence, String... tags)
Contoh kode:
Java:
private static final int SEQUENCE_TAG_UPDATE = 3;
MTPushPrivatesApi.updateTag(context, SEQUENCE_TAG_UPDATE, "beijing", "shanghai", "guangzhou", "shenzhen");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_UPDATE) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_UPDATE = 3
}
MTPushPrivatesApi.updateTag(context, SEQUENCE_TAG_UPDATE, "beijing", "shanghai", "guangzhou", "shenzhen")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_UPDATE) {
val tags = tagMessage.tags
}
}
queryTag
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onTagMessage akan mengembalikan hasil
/**
* Kueri tag yang ditentukan
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
* @param tag panjang nama tag maks 40 byte
*/
public static void queryTag(Context context, int sequence, String tag)
Contoh kode:
Java:
private static final int SEQUENCE_TAG_QUERY = 4;
MTPushPrivatesApi.queryTag(context, SEQUENCE_TAG_QUERY, "china");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_QUERY) {
String tag = tagMessage.getQueryTag();
boolean valid = tagMessage.isQueryTagValid();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_QUERY = 4
}
MTPushPrivatesApi.queryTag(context, SEQUENCE_TAG_QUERY, "china")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_QUERY) {
val tag = tagMessage.queryTag
val valid = tagMessage.isQueryTagValid
}
}
deleteAllTag
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onTagMessage akan mengembalikan hasil
/**
* Hapus semua tag
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
*/
public static void deleteAllTag(Context context, int sequence, String... tags)
Contoh kode:
Java:
private static final int SEQUENCE_TAG_DELETE_ALL = 5;
MTPushPrivatesApi.deleteAllTag(context, SEQUENCE_TAG_DELETE_ALL);
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_DELETE_ALL) {
// Semua tag berhasil dihapus
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_DELETE_ALL = 5
}
MTPushPrivatesApi.deleteAllTag(context, SEQUENCE_TAG_DELETE_ALL)
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_DELETE_ALL) {
// Semua tag berhasil dihapus
}
}
queryAllTag
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onTagMessage akan mengembalikan hasil
/**
* Kueri semua tag
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
*/
public static void queryAllTag(Context context, int sequence, String... tags)
Contoh kode:
Java:
private static final int SEQUENCE_TAG_QUERY_ALL = 6;
MTPushPrivatesApi.queryAllTag(context, SEQUENCE_TAG_QUERY_ALL);
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_QUERY_ALL) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_QUERY_ALL = 6
}
MTPushPrivatesApi.queryAllTag(context, SEQUENCE_TAG_QUERY_ALL)
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_QUERY_ALL) {
val tags = tagMessage.tags
}
}
setAlias
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onAliasMessage akan mengembalikan hasil
/**
* Atur alias
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
* @param alias Alias valid: huruf, angka, garis bawah, karakter @!#$&*+=.|. Panjang maks 40 byte (UTF-8)
*/
public static void setAlias(Context context, int sequence, String alias)
Contoh kode:
Java:
private static final int SEQUENCE_ALIAS_SET = 7;
MTPushPrivatesApi.setAlias(context, SEQUENCE_ALIAS_SET, "young");
@Override
public void onAliasMessage(Context context, AliasMessage aliasMessage) {
if (aliasMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (aliasMessage.getSequence() == SEQUENCE_ALIAS_SET) {
String alias = aliasMessage.getAlias();
}
}
Kotlin:
companion object {
private const val SEQUENCE_ALIAS_SET = 7
}
MTPushPrivatesApi.setAlias(context, SEQUENCE_ALIAS_SET, "young")
override fun onAliasMessage(context: Context, aliasMessage: AliasMessage) {
if (aliasMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (aliasMessage.sequence == SEQUENCE_ALIAS_SET) {
val alias = aliasMessage.alias
}
}
getAlias
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onAliasMessage akan mengembalikan hasil
/**
* Dapatkan alias
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
*/
public static void getAlias(Context context, int sequence)
Contoh kode:
Java:
private static final int SEQUENCE_ALIAS_GET = 8;
MTPushPrivatesApi.getAlias(context, SEQUENCE_ALIAS_GET);
@Override
public void onAliasMessage(Context context, AliasMessage aliasMessage) {
if (aliasMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (aliasMessage.getSequence() == SEQUENCE_ALIAS_GET) {
String alias = aliasMessage.getAlias();
}
}
Kotlin:
companion object {
private const val SEQUENCE_ALIAS_GET = 8
}
MTPushPrivatesApi.getAlias(context, SEQUENCE_ALIAS_GET)
override fun onAliasMessage(context: Context, aliasMessage: AliasMessage) {
if (aliasMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (aliasMessage.sequence == SEQUENCE_ALIAS_GET) {
val alias = aliasMessage.alias
}
}
clearAlias
- Panggil init terlebih dahulu
- Jika lingkungan tidak bermasalah, onAliasMessage akan mengembalikan hasil
/**
* Hapus alias
*
* @param context tidak boleh kosong
* @param sequence Nomor urut operasi yang ditentukan pengguna
*/
public static void clearAlias(Context context, int sequence)
Contoh kode:
Java:
private static final int SEQUENCE_ALIAS_CLEAR = 9;
MTPushPrivatesApi.clearAlias(context, SEQUENCE_ALIAS_CLEAR);
@Override
public void onAliasMessage(Context context, AliasMessage aliasMessage) {
if (aliasMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (aliasMessage.getSequence() == SEQUENCE_ALIAS_CLEAR) {
// Alias berhasil dihapus
}
}
Kotlin:
companion object {
private const val SEQUENCE_ALIAS_CLEAR = 9
}
MTPushPrivatesApi.clearAlias(context, SEQUENCE_ALIAS_CLEAR)
override fun onAliasMessage(context: Context, aliasMessage: AliasMessage) {
if (aliasMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (aliasMessage.sequence == SEQUENCE_ALIAS_CLEAR) {
// Alias berhasil dihapus
}
}
setNotificationShowTime
- Panggil init terlebih dahulu
- Channel yang didukung: channel Engagelab / channel Google saat app di foreground
/**
* Atur waktu tampil notifikasi; default tampil kapan saja
*
* @param context tidak boleh kosong
* @param beginHour Waktu mulai (format 24 jam, 0-23)
* @param endHour Waktu selesai (format 24 jam, 0-23); beginHour tidak boleh >= endHour
* @param weekDays Array hari dalam seminggu (1-7); array kosong = tidak tampil
*/
public static void setNotificationShowTime(Context context, int beginHour, int endHour, int... weekDays)
Contoh kode:
Java:
MTPushPrivatesApi.setNotificationShowTime(context, 9, 21, 1, 3, 5, 7);
Kotlin:
MTPushPrivatesApi.setNotificationShowTime(context, 9, 21, 1, 3, 5, 7)
resetNotificationShowTime
- Panggil init terlebih dahulu
/**
* Atur ulang waktu tampil notifikasi; default tampil kapan saja
*
* @param context tidak boleh kosong
*/
public static void resetNotificationShowTime(Context context)
Contoh kode:
Java:
MTPushPrivatesApi.resetNotificationShowTime(context);
Kotlin:
MTPushPrivatesApi.resetNotificationShowTime(context)
setNotificationSilenceTime
- Panggil init terlebih dahulu
/**
* Atur waktu hening notifikasi; default tidak hening
*
* @param context tidak boleh kosong
* @param beginHour, beginMinute, endHour, endMinute Waktu hening (format 24 jam)
*/
public static void setNotificationSilenceTime(Context context, int beginHour, int beginMinute, int endHour, int endMinute)
Contoh kode:
Java:
MTPushPrivatesApi.setNotificationSilenceTime(context, 21, 30, 9, 30);
Kotlin:
MTPushPrivatesApi.setNotificationSilenceTime(context, 21, 30, 9, 30)
resetNotificationSilenceTime
- Panggil init terlebih dahulu
/**
* Atur ulang waktu hening notifikasi
*
* @param context tidak boleh kosong
*/
public static void resetNotificationSilenceTime(Context context)
Contoh kode:
Java:
MTPushPrivatesApi.resetNotificationSilenceTime(context);
Kotlin:
MTPushPrivatesApi.resetNotificationSilenceTime(context)
setNotificationLayout
- Panggil init terlebih dahulu
- Channel yang didukung: Engagelab
/**
* Atur layout notifikasi kustom; default pakai layout sistem
*
* @param context tidak boleh kosong
* @param builderId id build
* @param notificationLayout Objek layout kustom, tidak boleh kosong
*/
public static void setNotificationLayout(Context context, int builderId, NotificationLayout notificationLayout)
Contoh kode:
Java:
private static final int BUILDER_ID = 11;
NotificationLayout notificationLayout = new NotificationLayout()
.setLayoutId(R.layout.custom_notification_layout)
.setIconViewId(R.id.iv_notification_icon)
.setIconResourceId(R.drawable.mtpush_notification_icon)
.setTitleViewId(R.id.tv_notification_title)
.setContentViewId(R.id.tv_notification_content)
.setTimeViewId(R.id.tv_notification_time);
MTPushPrivatesApi.setNotificationLayout(this.getApplicationContext(), BUILDER_ID, notificationLayout);
Kotlin:
companion object {
private const val BUILDER_ID = 11
}
val notificationLayout = NotificationLayout()
.setLayoutId(R.layout.custom_notification_layout)
.setIconViewId(R.id.iv_notification_icon)
.setIconResourceId(R.drawable.mtpush_notification_icon)
.setTitleViewId(R.id.tv_notification_title)
.setContentViewId(R.id.tv_notification_content)
.setTimeViewId(R.id.tv_notification_time)
MTPushPrivatesApi.setNotificationLayout(applicationContext, BUILDER_ID, notificationLayout)
resetNotificationLayout
- Panggil init terlebih dahulu
/**
* Atur ulang layout notifikasi kustom; default pakai layout sistem
*
* @param context tidak boleh kosong
* @param builderId id layout kustom
*/
public static void resetNotificationLayout(Context context, int builderId)
Contoh kode:
Java:
private static final int BUILDER_ID = 11;
MTPushPrivatesApi.resetNotificationLayout(context, BUILDER_ID);
Kotlin:
companion object {
private const val BUILDER_ID = 11
}
MTPushPrivatesApi.resetNotificationLayout(context, BUILDER_ID)
setNotificationCount
- Panggil init terlebih dahulu
/**
* Atur jumlah notifikasi di bar notifikasi; default 5
*
* @param context tidak boleh kosong
* @param count Batas jumlah notifikasi; jika terlampaui, notifikasi terlama dihapus. Tidak boleh <= 0
*/
public static void setNotificationCount(Context context, int count)
Contoh kode:
Java:
MTPushPrivatesApi.setNotificationCount(context, 50);
Kotlin:
MTPushPrivatesApi.setNotificationCount(context, 50)
resetNotificationCount
- Panggil init terlebih dahulu
/**
* Atur ulang jumlah notifikasi di bar; default 5
*
* @param context tidak boleh kosong
*/
public static void resetNotificationCount(Context context)
Contoh kode:
Java:
MTPushPrivatesApi.resetNotificationCount(context);
Kotlin:
MTPushPrivatesApi.resetNotificationCount(context)
setNotificationBadge
- Panggil init terlebih dahulu
- Hanya berlaku untuk Huawei/Honor
/**
* Atur jumlah badge aplikasi; default 0
*
* @param context tidak boleh kosong
* @param badge Jumlah badge
*/
public static void setNotificationBadge(Context context, int badge)
Contoh kode:
Java:
MTPushPrivatesApi.setNotificationBadge(context, 1);
Kotlin:
MTPushPrivatesApi.setNotificationBadge(context, 1)
resetNotificationBadge
- Panggil init terlebih dahulu
/**
* Atur ulang jumlah badge aplikasi; default 0
*
* @param context tidak boleh kosong
*/
public static void resetNotificationBadge(Context context)
Contoh kode:
Java:
MTPushPrivatesApi.resetNotificationBadge(context);
Kotlin:
MTPushPrivatesApi.resetNotificationBadge(context)
showNotification
- Panggil init terlebih dahulu
/**
* Tampilkan notifikasi
*
* @param context tidak boleh kosong
* @param notificationMessage Objek notifikasi yang dibangun, tidak boleh kosong
*/
public static void showNotification(Context context, NotificationMessage notificationMessage)
Contoh kode:
Java:
NotificationMessage notificationMessage = new NotificationMessage()
.setMessageId("12345")
.setNotificationId(12345)
.setTitle("custom_notification_title")
.setContent("custom_notification_content");
MTPushPrivatesApi.showNotification(context, notificationMessage);
Kotlin:
val notificationMessage = NotificationMessage()
.setMessageId("12345")
.setNotificationId(12345)
.setTitle("custom_notification_title")
.setContent("custom_notification_content")
MTPushPrivatesApi.showNotification(context, notificationMessage)
clearNotification
- Panggil init terlebih dahulu
/**
* Hapus notifikasi dengan notifyId yang ditentukan
*
* @param context tidak boleh kosong
* @param notifyId id notifikasi
*/
public static void clearNotification(Context context, int notifyId)
Contoh kode:
Java:
MTPushPrivatesApi.clearNotification(context, 12345);
Kotlin:
MTPushPrivatesApi.clearNotification(context, 12345)
reportNotificationArrived
- Panggil init terlebih dahulu
- Jika tidak mengintegrasikan paket vendor EngageLab tetapi perlu EngageLab menghitung tingkat pengiriman, panggil antarmuka ini
/**
* Laporkan kedatangan notifikasi channel vendor (via http/https)
*
* @param context tidak boleh kosong
* @param messageId ID pesan Engagelab, tidak boleh kosong
* @param platform vendor (1:mi, 2:huawei, 3:meizu, 4:oppo, 5:vivo, 7:honor, 8:google)
* @param platformMessageId ID pesan vendor, boleh kosong
*/
public static void reportNotificationArrived(Context context, String messageId, byte platform, String platformMessageId)
Contoh kode:
Java:
MTPushPrivatesApi.reportNotificationArrived(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25");
Kotlin:
MTPushPrivatesApi.reportNotificationArrived(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25")
reportNotificationClicked
- Panggil init terlebih dahulu
- Jika tidak mengintegrasikan paket vendor tetapi perlu EngageLab menghitung tingkat klik, panggil antarmuka ini
/**
* Laporkan klik notifikasi channel vendor (via http/https)
*
* @param context tidak boleh kosong
* @param messageId ID pesan Engagelab, tidak boleh kosong
* @param platform vendor
* @param platformMessageId ID pesan vendor, boleh kosong
*/
public static void reportNotificationClicked(Context context, String messageId, byte platform, String platformMessageId)
Contoh kode:
Java:
MTPushPrivatesApi.reportNotificationClicked(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25");
Kotlin:
MTPushPrivatesApi.reportNotificationClicked(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25")
reportNotificationDeleted
- Panggil init terlebih dahulu
- Jika tidak mengintegrasikan paket vendor tetapi perlu EngageLab menghitung tingkat penghapusan, panggil antarmuka ini
/**
* Laporkan penghapusan notifikasi channel vendor (via http/https)
*
* @param context tidak boleh kosong
* @param messageId ID pesan Engagelab, tidak boleh kosong
* @param platform vendor
* @param platformMessageId ID pesan vendor, boleh kosong
*/
public static void reportNotificationDeleted(Context context, String messageId, byte platform, String platformMessageId)
Contoh kode:
Java:
MTPushPrivatesApi.reportNotificationDeleted(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25");
Kotlin:
MTPushPrivatesApi.reportNotificationDeleted(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25")
reportNotificationOpened
- Panggil init terlebih dahulu
- Jika tidak mengintegrasikan paket vendor EngageLab tetapi perlu EngageLab menghitung tingkat pembukaan notifikasi, panggil antarmuka ini
- Beberapa vendor (mis: huawei/oppo/vivo) tidak punya callback kedatangan dan klik. Setelah mengatur Activity tujuan saat notifikasi diklik, parameter bisa didapat di Activity tujuan. Disarankan mengatur Activity lompatan klik untuk semua vendor.
- Tidak diperlukan untuk MTPush 4.0.0 ke atas
/**
* Laporkan pembukaan notifikasi channel vendor
*
* Dilaporkan via http/https
*
* @param context tidak boleh kosong
* @param messageId ID pesan Engagelab, tidak boleh kosong
* @param platform vendor (1:mi, 2:huawei, 3:meizu, 4:oppo, 5:vivo, 7:honor, 8:google)
* @param platformMessageId ID pesan vendor, boleh kosong
*/
public static void reportNotificationOpened(Context context, String messageId, byte platform, String platformMessageId)
Contoh kode:
Java:
Bundle bundle = intent.getExtras();
String platformMessage = "";
if (intent.getData() != null) {
platformMessage = intent.getData().toString();
}
if (TextUtils.isEmpty(platformMessage) && intent.getExtras() != null) {
if (bundle.containsKey("JMessageExtra")) {
platformMessage = bundle.getString("JMessageExtra");
} else {
platformMessage = bundle.getString("MTMessageExtra");
}
}
if (TextUtils.isEmpty(platformMessage)) {
return;
}
JSONObject messageJson = new JSONObject(platformMessage);
tvMessage.setText(toLogString(messageJson));
String messageId = messageJson.optString("msg_id");
byte platform = (byte) messageJson.optInt("rom_type");
String title = messageJson.optString("n_title");
String content = messageJson.optString("n_content");
MTPushPrivatesApi.reportNotificationOpened(this, messageId, platform, "");
Kotlin:
val bundle = intent.extras
var platformMessage = ""
if (intent.data != null) {
platformMessage = intent.data!!.toString()
}
if (TextUtils.isEmpty(platformMessage) && intent.extras != null) {
bundle?.let {
if (it.containsKey("JMessageExtra")) {
platformMessage = it.getString("JMessageExtra", "")
} else {
platformMessage = it.getString("MTMessageExtra", "")
}
}
}
if (TextUtils.isEmpty(platformMessage)) {
return
}
val messageJson = JSONObject(platformMessage)
tvMessage.setText(toLogString(messageJson))
val messageId = messageJson.optString("msg_id")
val platform = messageJson.optInt("rom_type").toByte()
val title = messageJson.optString("n_title")
val content = messageJson.optString("n_content")
MTPushPrivatesApi.reportNotificationOpened(this, messageId, platform, "")
uploadPlatformToken
- Panggil init terlebih dahulu
- Upload via TCP; koneksi panjang harus berhasil, yaitu onConnectStatus mengembalikan true sebelum memanggil
- Tidak mengintegrasikan paket vendor EngageLab, tetapi EngageLab diperlukan untuk mengirim pesan vendor
/**
* Unggah token vendor (via TCP)
*
* @param context tidak boleh kosong
* @param platform vendor (1:mi, 2:huawei, 3:meizu, 4:oppo, 5:vivo, 7:honor, 8:google)
* @param token Token yang dikembalikan vendor, tidak boleh kosong
* @param region Versi luar negeri Xiaomi dan Oppo: "GLOBAL"; bukan luar negeri: "NULL"
*/
public static void uploadPlatformToken(Context context, byte platform, String token, String region)
Contoh kode:
Java:
MTPushPrivatesApi.uploadPlatformToken(context, MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476s-afs-afs-afaR-HT25", "NULL");
Kotlin:
MTPushPrivatesApi.uploadPlatformToken(context, MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476s-afs-afs-afaR-HT25", "NULL")
clearPlatformToken
- Panggil init terlebih dahulu
- Upload via TCP; panggil antarmuka ini setelah koneksi panjang berhasil (onConnectStatus mengembalikan true)
- Tidak mengintegrasikan paket vendor EngageLab, tetapi EngageLab diperlukan untuk mengirim pesan vendor
/**
* Hapus token. Setelah memanggil antarmuka ini, token hanya dapat dilaporkan melalui uploadPlatformToken; SDK tidak lagi mengambil atau melaporkan token secara aktif; direset setelah cold start.
* Dengar melalui callback onPlatformToken. Jika platform callback -128, berarti penghapusan berhasil.
*
* Diperlukan koneksi TCP.
* @param context tidak boleh kosong
*/
public static void clearPlatformToken(Context context)
Contoh kode:
Java:
MTPushPrivatesApi.clearPlatformToken(context);
Kotlin:
MTPushPrivatesApi.clearPlatformToken(context)
onFragmentResume
- Panggil init terlebih dahulu; jika tidak pemanggilan tidak valid.
/**
* @param context Tidak null
* @param fragmentName Nama kelas lengkap Fragment (this.getClass().getCanonicalName())
*/
public static void onFragmentResume(Context context, String fragmentName)
onFragmentPause
- Panggil init terlebih dahulu; jika tidak pemanggilan tidak valid.
/**
* @param context Tidak null
* @param fragmentName Nama kelas lengkap Fragment (this.getClass().getCanonicalName())
*/
public static void onFragmentPause(Context context, String fragmentName)
Petunjuk penggunaan: Ada empat cara menambahkan Fragment di Android; setiap metode memerlukan penanganan berbeda. Di bawah ini penjelasan kontrol tampilan in-app untuk Fragment yang ditentukan.
| Metode penggunaan Fragment | Dapat mendengarkan siklus hidup Fragment? | Metode pemanggilan antarmuka halaman tampilan dinamis JPush |
|---|---|---|
| Metode 1: add/show/hide | Tidak dapat mendengarkan siklus hidup | Panggil onFragmentResume dan onHiddenChanged di Fragment |
| Metode 2: ViewPager | Tidak dapat mendengarkan siklus hidup | Panggil setUserVisibleHint di Fragment |
| Metode 3: replace | Dapat mendengarkan siklus hidup | Panggil onResume dan onPause di Fragment |
| Metode 4: attach/detach | Dapat mendengarkan siklus hidup | Panggil onResume dan onPause di Fragment |
Metode 1: add/show/hide
1) Panggil antarmuka kontrol dinamis di callback onCreateView Fragment. @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); return inflater.inflate(R.layout.black_fragment, container, false); } 2) Panggil antarmuka di callback onHiddenChanged Fragment. @Override public void onHiddenChanged(boolean hidden) { String classname = this.getClass().getCanonicalName(); if (!hidden) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.onHiddenChanged(hidden); }1) Panggil antarmuka kontrol dinamis di callback onCreateView Fragment. @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); return inflater.inflate(R.layout.black_fragment, container, false); } 2) Panggil antarmuka di callback onHiddenChanged Fragment. @Override public void onHiddenChanged(boolean hidden) { String classname = this.getClass().getCanonicalName(); if (!hidden) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.onHiddenChanged(hidden); }Tampilkan blok kode ini di jendela mengambangMetode ViewPager
1) Panggil antarmuka di callback setUserVisibleHint Fragment. @Override public void setUserVisibleHint(boolean isVisibleToUser) { String classname = this.getClass().getCanonicalName(); if (isVisibleToUser) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.setUserVisibleHint(isVisibleToUser); }1) Panggil antarmuka di callback setUserVisibleHint Fragment. @Override public void setUserVisibleHint(boolean isVisibleToUser) { String classname = this.getClass().getCanonicalName(); if (isVisibleToUser) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.setUserVisibleHint(isVisibleToUser); }Tampilkan blok kode ini di jendela mengambangMetode replace atau attach/detach
Panggil antarmuka di callback siklus hidup Fragment (onResume/onPause). @Override public void onResume() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); super.onResume(); } @Override public void onPause() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); super.onPause(); }Panggil antarmuka di callback siklus hidup Fragment (onResume/onPause). @Override public void onResume() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); super.onResume(); } @Override public void onPause() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); super.onPause(); }Tampilkan blok kode ini di jendela mengambang
MTCommonReceiver
- Digunakan terutama untuk callback metode
- Semua callback di kelas ini berjalan di proses utama
onNotificationStatus
- Setiap kali SDK dijalankan, status sakelar notifikasi saat ini akan dikembalikan
- Hanya dipanggil saat status sakelar notifikasi berubah
/**
* Callback status sakelar notifikasi aplikasi
*
* @param context tidak boleh kosong
* @param enable Sakelar notifikasi aktif atau tidak, true = aktif, false = nonaktif
*/
@Override
public void onNotificationStatus(Context context, boolean enable)
onConnectStatus
/**
* Apakah koneksi panjang berhasil terhubung
*
* Setelah inisialisasi akan membuat koneksi panjang; metode ini dipanggil saat koneksi berhasil atau gagal
*
* @param context tidak boleh kosong
* @param enable true = berhasil; false = gagal
*/
public void onConnectStatus(Context context, boolean enable)
onNotificationArrived
- Channel Engagelab/Xiaomi/Meizu memiliki callback metode ini (channel Google harus di foreground)
- notificationMessage lihat NotificationMessage
/**
* Pesan notifikasi terkirim
*
* Dipanggil saat pesan notifikasi push terkirim
*
* @param context tidak boleh kosong
* @param notificationMessage pesan notifikasi
*/
public void onNotificationArrived(Context context, NotificationMessage notificationMessage)
onNotificationUnShow
- Notifikasi tidak ditampilkan di foreground saat dikirim di background; app memanggil metode ini saat di foreground.
/**
* Pesan notifikasi tidak ditampilkan di foreground
*
* @param context tidak boleh kosong
* @param notificationMessage pesan notifikasi
*/
@Override
public void onNotificationUnShow(Context context, NotificationMessage notificationMessage)
onNotificationClicked
- notificationMessage lihat NotificationMessage
/**
* Klik pesan notifikasi
*
* Dipanggil saat pengguna mengklik notifikasi push
*
* @param context tidak boleh kosong
* @param notificationMessage pesan notifikasi
*/
public void onNotificationClicked(Context context, NotificationMessage notificationMessage)
onNotificationDeleted
- Hanya penghapusan pesan notifikasi channel Engagelab yang memicu callback ini
- notificationMessage lihat NotificationMessage
- Tidak dipanggil saat aplikasi dalam keadaan mati
/**
* Penghapusan pesan notifikasi
*
* Dipanggil saat notifikasi push dihapus
*
* @param context tidak boleh kosong
* @param notificationMessage pesan notifikasi
*/
public void onNotificationDeleted(Context context, NotificationMessage notificationMessage)
onCustomMessage
- Pesan kustom tidak ditampilkan di bar notifikasi
- customMessage lihat CustomMessage
/**
* Pengiriman pesan kustom
*
* Dipanggil saat pesan kustom terkirim
*
* @param context tidak boleh kosong
* @param customMessage pesan kustom
*/
public void onCustomMessage(Context context, CustomMessage customMessage)
onTagMessage
- tagMessage lihat TagMessage
/**
* Pesan operasi tag
*
* @param context tidak boleh kosong
* @param tagMessage informasi tag
*/
public void onTagMessage(Context context, TagMessage tagMessage)
onAliasMessage
- aliasMessage lihat AliasMessage
/**
* Pesan operasi alias
*
* @param context objek ApplicationContext
* @param aliasMessage pesan alias
*/
public void onAliasMessage(Context context, AliasMessage aliasMessage)
onPlatformToken
- Callback token vendor
/**
* Pesan operasi vendor
*
* @param context objek ApplicationContext
* @param platformMessage pesan token vendor
*/
public void onPlatformToken(Context context, PlatformTokenMessage platformMessage)
onInAppMessageShow
- Callback tampilan pesan in-app
/**
* @param context objek ApplicationContext
* @param inAppMessage pesan in-app
*/
public void onInAppMessageShow(Context context, InAppMessage inAppMessage)
onInAppMessageClick
- Callback klik pesan in-app
/**
* @param context objek ApplicationContext
* @param inAppMessage pesan in-app
*/
public void onInAppMessageClick(Context context, InAppMessage inAppMessage)
Konfigurasi NotificationChannel
Versi yang didukung
Didukung mulai versi: MTPush SDK v3.3.0
Deskripsi fitur
Sejak Android 8.0, notifikasi dikelola melalui NotificationChannels. Pengembang dapat mendefinisikan NotificationChannel sendiri dan menentukan channelId saat push via API. Di perangkat Android 8.0 ke atas, notifikasi akan mencari channel yang sesuai channelId; tingkat penting, suara, getar, dan LED mengikuti channel. Jika channelId tidak ditemukan atau dalam periode hening, default menggunakan channel engagelab.
Contoh NotificationChannel kustom
private void initChannel(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (nm != null){ NotificationChannelGroup notificationChannelGroup = new NotificationChannelGroup("MyGroupId", "Custom Notification Group");
nm.createNotificationChannelGroup(notificationChannelGroup);
NotificationChannel notificationChannel = new NotificationChannel("MyChannelId", "Custom Notification", NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setGroup("MyGroupId");
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);
notificationChannel.setSound("android.resource:// package_name /raw/ ringtone_file", null);
nm.createNotificationChannel(notificationChannel);
}
}
}
NotificationMessage
- Pesan notifikasi
| Atribut | Tipe | Deskripsi |
|---|---|---|
| messageId | String | Wajib. messageId Engagelab untuk pelacakan. Tidak boleh kosong. |
| overrideMessageId | String | overrideMessageId Engagelab untuk statistik. |
| platform | byte | Vendor. DEFAULT: 0, Xiaomi: 1, Huawei: 2, Meizu: 3, Oppo: 4, Vivo: 5, Honor: 7, Google: 8 |
| platformMessageId | String | messageId vendor. |
| notificationId | int | ID notifikasi; dapat dipakai dengan clearNotification. |
| smallIcon | String | Ikon kecil. Default: drawable/mtpush_notification_icon.png. |
| largeIcon | String | Ikon besar. |
| title | String | Judul. Jika kosong, dipakai nama app. |
| content | String | Wajib. Konten. Tidak boleh kosong. |
| extras | Bundle | Bidang tambahan kunci/nilai (String). |
| builderId | int | ID gaya; lihat setNotificationLayout. |
| style | int | Gaya: 0 default, 1 Big text, 2 Inbox, 3 Big picture. |
| bigText | String | Teks panjang (gaya 1). |
| inbox | String[] | Inbox (gaya 2). |
| bigPicture | String | Gambar besar (gaya 3). |
| priority | int | Prioritas. |
| defaults | int | Nilai default suara, getar, LED. |
| category | String | Kategori notifikasi. |
| sound | String | File suara di res/raw. |
| channelId | String | Wajib sejak Android 8.0. |
| intentUri | String | URI Intent saat diklik. |
| badge | int | Jumlah badge (Huawei/Xiaomi). |
CustomMessage
- Pesan kustom
| Atribut | Tipe | Deskripsi |
|---|---|---|
| messageId | String | Wajib. messageId Engagelab. Tidak boleh kosong. |
| platform | byte | Vendor. |
| platformMessageId | String | messageId vendor. |
| title | String | Judul. |
| content | String | Konten. |
| contentType | String | Tipe pesan. |
| extras | Bundle | Bidang tambahan. |
TagMessage
- Pesan tag
| Atribut | Tipe | Deskripsi |
|---|---|---|
| sequence | int | Nomor urut operasi yang ditentukan pengguna. |
| code | int | Hasil; lihat code. |
| tags | String[] | Array tag (addTag, deleteTag, updateTag, queryAllTag). |
| queryTag | String | Tag (queryTag). |
| queryTagValid | boolean | Status tag (queryTag). |
AliasMessage
- Pesan alias
| Atribut | Tipe | Deskripsi |
|---|---|---|
| sequence | int | Nomor urut operasi. |
| code | int | Hasil; lihat code. |
| alias | String | Alias (setAlias, getAlias). |
PlatformTokenMessage
- Pesan token vendor
| Atribut | Tipe | Deskripsi |
|---|---|---|
| platform | byte | Vendor. |
| token | String | Token yang dikembalikan vendor. |
InAppMessage
- Pesan in-app
| Atribut | Tipe | Deskripsi |
|---|---|---|
| messageId | String | Wajib. messageId Engagelab. Tidak boleh kosong. |
| overrideMessageId | String | overrideMessageId Engagelab. |
| target | String | Jalur halaman target. |
| imageUrl | String | URL gambar. |
| extras | String | Informasi tambahan. |
| content | String | Konten. |
| expired | long | Waktu kedaluwarsa. |
| delay | long | Waktu tunda. |
| interval | long | Interval tampil. |
| duration | long | Durasi tampil. |
| msgTime | long | Waktu diterima. |
code
| code | Nilai int | Deskripsi |
|---|---|---|
| SUCCESS | 0 | Berhasil |
| NULL_TAG_AND_ALIAS | 6001 | Pengaturan tidak valid |
| TIMEOUT | 6002 | Waktu habis; disarankan coba lagi (jaringan buruk atau init belum selesai). |
| INVALID_ALIAS | 6003 | Alias tidak valid. Valid: huruf, angka, garis bawah, karakter @!#$&*+=.| |
| TOO_LONG_ALIAS | 6004 | Alias terlalu panjang. Maks 40 byte (UTF-8). |
| INVALID_TAGS | 6005 | Tag tidak valid. |
| TOO_LONG_TAG | 6006 | Tag terlalu panjang. Maks 40 byte. |
| TOO_MANY_TAGS | 6007 | Terlalu banyak tag dalam satu operasi. Maks 1000. |
| TOO_LONG_TAGS | 6008 | Panjang total tag dalam satu permintaan > 5000. |
| UNKNOWN_ERROR | 6009 | Error tidak dikenal |
| INVALID_JSON | 6010 | JSON tidak valid |
| INVOKE_TOO_SOON | 6012 | Operasi tag/alias terlalu sering |
| CONNECT_NOT_ENABLE | 6013 | CONNECT_NOT_ENABLE |
| INVALID_MOBILE_NUMBER | 6023 | Nomor ponsel tidak valid |










