SDK API

API Pengaturan Mode Debug (setDebug)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Panggil di AbilityStage(#onCreate)
  • Panggil sebelum init
  • Opsional

Definisi API

/** * Pengaturan debug log, default false * @param debug true untuk debug, false untuk non-debug */ setDebug(debug: boolean)
              
              /**
 * Pengaturan debug log, default false
 * @param debug true untuk debug, false untuk non-debug
 */
setDebug(debug: boolean)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setDebug(true) // Aktifkan debug
              
              EPushInterface.setDebug(true) // Aktifkan debug

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • Jika debug bernilai true, log level debug akan dicetak. Jika false, hanya log level warning ke atas yang dicetak.

Konfigurasi EngageLab Appkey (setAppKey)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Panggil di AbilityStage(#onCreate)
  • Panggil sebelum init
  • Wajib

Definisi API

/** * Mengatur appkey * @param appKey appkey dari platform */ setAppKey(appKey: string)
              
              /**
 * Mengatur appkey
 * @param appKey appkey dari platform
 */
setAppKey(appKey: string)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setAppKey("appKey_anda")
              
              EPushInterface.setAppKey("appKey_anda")

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • appKey harus didapat dari konsol EngageLab.

Konfigurasi Channel Unduhan (setChannel)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Konfigurasi channel (saluran unduhan paket aplikasi) secara dinamis.

  • Channel menunjukkan saluran unduhan paket aplikasi, untuk statistik per channel, nilai spesifik dapat Anda tentukan sendiri, seperti Huawei App Market, dll.
  • Panggil di AbilityStage(#onCreate)
  • Panggil sebelum init
  • Wajib

Definisi API

/** * Konfigurasi channel * @param channel Nama channel */ setChannel(channel: string)
              
              /**
 * Konfigurasi channel
 * @param channel Nama channel
 */
setChannel(channel: string)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setChannel("Nama_Channel")
              
              EPushInterface.setChannel("Nama_Channel")

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • channel dapat dikustomisasi sesuai kebutuhan bisnis Anda.

Konfigurasi Jumlah Cache Pesan Kustom (setCustomMessageMaxCacheCount)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

API ini digunakan untuk push pesan kustom EngageLab (tidak berlaku untuk pesan notifikasi), untuk skenario bisnis aplikasi tertentu; misal: jika server Anda mengirimkan 100 pesan kustom ke pengguna tertentu, berdasarkan karakteristik atau performa bisnis Anda, Anda hanya ingin memproses dan menyimpan 10 pesan terbaru, maka Anda dapat menggunakan API ini.

  • Panggil di AbilityStage(#onCreate)
  • Panggil sebelum init

Definisi API

/** * Konfigurasi jumlah cache pesan backend kustom * @param maxCacheCount Jumlah cache */ setCustomMessageMaxCacheCount(maxCacheCount: number)
              
              /**
 * Konfigurasi jumlah cache pesan backend kustom
 * @param maxCacheCount Jumlah cache
 */
setCustomMessageMaxCacheCount(maxCacheCount: number)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setCustomMessageMaxCacheCount(2)
              
              EPushInterface.setCustomMessageMaxCacheCount(2)

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • maxCacheCount jumlah pesan yang akan disimpan di cache

Pengaturan Cara Permohonan Izin Notifikasi (setUserRequestNotificationPermission)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Mengatur apakah pengembang sendiri yang memanggil permohonan izin notifikasi. Jika diatur ke true, EngageLabSDK tidak akan otomatis meminta izin notifikasi, pengembang harus meminta izin notifikasi secara manual di kode mereka; jika diatur ke false, EngageLabSDK akan otomatis meminta izin notifikasi saat inisialisasi.

  • Panggil di AbilityStage(#onCreate)
  • Panggil sebelum init
  • Opsional

Definisi API

/** * Mengatur apakah pengguna sendiri yang memanggil permohonan izin notifikasi * @param applicationContext Konteks aplikasi * @param enable true: pengguna sendiri yang memanggil izin notifikasi, false: SDK yang memanggil izin notifikasi (default) */ setUserRequestNotificationPermission(applicationContext: common.ApplicationContext, enable: boolean)
              
              /**
 * Mengatur apakah pengguna sendiri yang memanggil permohonan izin notifikasi
 * @param applicationContext Konteks aplikasi
 * @param enable true: pengguna sendiri yang memanggil izin notifikasi, false: SDK yang memanggil izin notifikasi (default)
 */
setUserRequestNotificationPermission(applicationContext: common.ApplicationContext, enable: boolean)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

// Pengguna sendiri yang memanggil izin notifikasi EPushInterface.setUserRequestNotificationPermission(this.context.getApplicationContext(), true) // SDK yang memanggil izin notifikasi (default) EPushInterface.setUserRequestNotificationPermission(this.context.getApplicationContext(), false)
              
              // Pengguna sendiri yang memanggil izin notifikasi
EPushInterface.setUserRequestNotificationPermission(this.context.getApplicationContext(), true)

// SDK yang memanggil izin notifikasi (default)
EPushInterface.setUserRequestNotificationPermission(this.context.getApplicationContext(), false)

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • enable true berarti pengembang sendiri yang meminta izin notifikasi, false berarti EngageLabSDK yang meminta izin notifikasi (default)

API Mengaktifkan Fitur Push (init)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Layanan push EngageLab, setelah memanggil API ini, layanan push Engagelab akan diaktifkan dan mulai mengumpulkan serta melaporkan informasi pribadi pengguna yang diperlukan untuk fungsi bisnis SDK.

  • Panggil saat aplikasi dijalankan

Definisi API

/** * Mengaktifkan fitur push * @param context Konteks */ init(context: common.UIAbilityContext | common.AbilityStageContext)
              
              /**
 * Mengaktifkan fitur push
 * @param context Konteks
 */
init(context: common.UIAbilityContext | common.AbilityStageContext)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.init(this.context)
              
              EPushInterface.init(this.context)

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • context Pada AbilityStage gunakan common.AbilityStageContext, pada UIAbility gunakan common.UIAbilityContext

Penjelasan Penggunaan API

  • Jika pengembang secara aktif memanggil metode init, layanan push Engagelab akan diaktifkan.
  • Untuk kepatuhan aplikasi, pengembang wajib memanggil API ini setelah pengguna aplikasi menyetujui kebijakan privasi dan pengembang memastikan akan mulai menyediakan layanan push kepada pengguna aplikasi.
  • Untuk saran dan penjelasan kebijakan privasi aplikasi, silakan lihat Cara Menyusun Kebijakan Privasi yang Sesuai.

Mendapatkan RegistrationID (getRegistrationId)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Silakan init terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Mengembalikan rid yang terdaftar */ getRegistrationId(): string
              
              /**
 * Mengembalikan rid yang terdaftar
 */
getRegistrationId(): string

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

let rid = EPushInterface.getRegistrationId()
              
              let rid = EPushInterface.getRegistrationId()

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • Tidak ada

Menghapus Token (clearToken)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Menghapus token push perangkat saat ini, digunakan untuk mendaftar ulang dan mendapatkan token baru.

  • Silakan init terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Menghapus token */ clearToken()
              
              /**
 * Menghapus token
 */
clearToken()

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.clearToken()
              
              EPushInterface.clearToken()

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • Tidak ada

Mengatur Callback (setCallBackMsg)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

API ini digunakan untuk menerima data dari SDK, seperti: hasil registrasi, hasil login, hasil klik notifikasi, hasil operasi pengaturan tag/alias, dan lain-lain. Kelas penerima harus mengimplementasikan interface CallBackMsg, fungsi CallBackMsg dapat dilihat pada contoh kode.

  • Panggil di AbilityStage(#onCreate)
  • Panggil sebelum init
  • Wajib

Definisi API

/** * Memantau event callback dan data * @param callBackMsg */ setCallBackMsg(callBackMsg: CallBackMsg)
              
              /**
 * Memantau event callback dan data
 * @param callBackMsg 
 */
setCallBackMsg(callBackMsg: CallBackMsg)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

// ...lihat kode lengkap pada dokumen utama... EPushInterface.setCallBackMsg(new MyCallBackMsg(this.context))
              
              // ...lihat kode lengkap pada dokumen utama...
EPushInterface.setCallBackMsg(new MyCallBackMsg(this.context))

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • callBackMsg: Kelas penerima callback data SDK, harus mewarisi interface CallBackMsg

Detail Metode Callback

Lihat detail callback pada dokumen utama di atas.

Penerimaan Data Redirect Notifikasi (setClickWant)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Agar dapat menerima data callback yang sesuai setelah notifikasi diklik. Pada halaman redirect notifikasi UIAbility, panggil di onCreate atau onNewWant: masukkan want. Kemudian data akan dikembalikan melalui metode onClickMessage pada kelas CallBackMsg yang sudah diatur di atas.

  • Silakan setAppKey terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Pada halaman redirect notifikasi UIAbility, panggil di onCreate/onNewWant: masukkan want dan context, data kustom akan dikembalikan melalui interface onClickMessage di atas * @param want want pada UIAbility * @param context konteks aplikasi, pada UIAbility gunakan this.context, pada AbilityStage gunakan context */ setClickWant(want: Want, context: common.ApplicationContext | common.AbilityStageContext): Promise<EMessage | undefined>
              
              /**
 * Pada halaman redirect notifikasi UIAbility, panggil di onCreate/onNewWant: masukkan want dan context, data kustom akan dikembalikan melalui interface onClickMessage di atas
 * @param want want pada UIAbility
 * @param context konteks aplikasi, pada UIAbility gunakan this.context, pada AbilityStage gunakan context
 */
setClickWant(want: Want, context: common.ApplicationContext | common.AbilityStageContext): Promise<EMessage | undefined>

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.setClickWant(want) } onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void { super.onNewWant(want, launchParam) this.setClickWant(want) } private async setClickWant(want: Want) { let j:EMessage|undefined = await EPushInterface.setClickWant(want, this.context); hilog.info(0x0000, TAG, '%{public}s', 'setClickWant: '+JSON.stringify(j)); }
              
              onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.setClickWant(want)
}

onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  super.onNewWant(want, launchParam)
  this.setClickWant(want)
}

private async setClickWant(want: Want) {
    let j:EMessage|undefined = await EPushInterface.setClickWant(want, this.context);
    hilog.info(0x0000, TAG, '%{public}s', 'setClickWant: '+JSON.stringify(j));
}

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • want: want pada UIAbility
  • context: konteks aplikasi, pada UIAbility gunakan this.context, pada AbilityStage gunakan context
  • return: EMessage jika sukses, undefined jika tidak ada data atau terjadi error

Menghentikan Notifikasi (stopPush)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Silakan init terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Menghentikan notifikasi */ stopPush()
              
              /**
 * Menghentikan notifikasi
 */
stopPush()

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.stopPush()
              
              EPushInterface.stopPush()

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • Tidak ada

Melanjutkan Notifikasi (resumePush)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Silakan init terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Melanjutkan notifikasi */ resumePush()
              
              /**
 * Melanjutkan notifikasi
 */
resumePush()

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.resumePush()
              
              EPushInterface.resumePush()

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • Tidak ada

Cek Status Notifikasi (isPushStopped)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Silakan init terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Cek status notifikasi */ isPushStopped(): boolean | undefined
              
              /**
 * Cek status notifikasi
 */
isPushStopped(): boolean | undefined

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

let isPushStopped = EPushInterface.isPushStopped()
              
              let isPushStopped = EPushInterface.isPushStopped()

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • Nilai kembali: true berarti notifikasi dihentikan, false berarti normal, undefined berarti belum inisialisasi atau terjadi error

Menonaktifkan layanan push (turnOffPush)

Versi yang Didukung

Didukung mulai EPush HarmonyOS SDK v1.0.1.

Deskripsi

API ini menonaktifkan layanan push dan berbeda dari sakelar push sisi server stopPush. API menghapus Push Token sistem, mencegah koneksi ulang otomatis, menutup koneksi persisten, serta menghentikan pengumpulan dan pelaporan informasi klien. Data laporan baru saat push nonaktif akan dibuang dan tidak dikirim setelah pemulihan.

  • Pemanggilan berulang saat tugas penonaktifan berjalan akan menggunakan kembali tugas yang sama.
  • Pemanggilan setelah push sepenuhnya nonaktif langsung mengembalikan berhasil dan tidak menghapus Push Token sistem lagi.
  • turnOffPush dan turnOnPush dijadwalkan secara saling eksklusif. Jika dipanggil cepat bergantian, permintaan terakhir menentukan status akhir.

Definisi API

turnOffPush(context: common.UIAbilityContext | common.AbilityStageContext): Promise<EPushResult>
              
              turnOffPush(context: common.UIAbilityContext | common.AbilityStageContext): Promise<EPushResult>

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

const result = await EPushInterface.turnOffPush(this.context) console.info(`turnOffPush code: ${result.code}, message: ${result.msg}`)
              
              const result = await EPushInterface.turnOffPush(this.context)
console.info(`turnOffPush code: ${result.code}, message: ${result.msg}`)

            
Tampilkan blok kode ini di jendela mengambang

Parameter

  • context: Context AbilityStage atau UIAbility.

Nilai Kembali

code Keterangan
0 Berhasil
1 Gagal menghapus Push Token sistem setelah semua percobaan ulang. SDK kembali ke status aktif, tetapi koneksi persisten tidak dibuat ulang secara otomatis. Panggil turnOnPush atau init kembali untuk memulihkannya
2 Operasi kehabisan waktu. Alur penonaktifan internal tetap dilanjutkan; panggil API ini kembali untuk mengonfirmasi hasil akhir
3 Gagal menyimpan status nonaktif lokal SDK setelah semua percobaan ulang. Panggil turnOffPush kembali
4 Permintaan nonaktif dalam antrean dibatalkan oleh turnOnPush yang lebih baru; tidak ada tindakan penghentian. Panggil kembali untuk mengonfirmasi
5 AppKey belum diatur atau context tidak valid; tidak ada tindakan penghentian. Perbaiki prasyarat lalu panggil kembali

Mengaktifkan kembali layanan push (turnOnPush)

Versi yang Didukung

Didukung mulai EPush HarmonyOS SDK v1.0.1.

Deskripsi

API ini memulihkan SDK, koneksi persisten, pengumpulan dan pelaporan informasi dengan AppKey yang ditentukan, lalu memperoleh dan mengunggah Push Token sistem baru. API langsung kembali tanpa callback hasil. Pantau hasil koneksi dan registrasi melalui callback onConnected, onRegister, dan log yang ada. Memanggil init kembali juga memulihkan layanan.

  • Operasi ini dijadwalkan secara saling eksklusif dengan turnOffPush. Jika dipanggil saat alur penonaktifan berjalan, operasi aktivasi akan masuk antrean dan tidak berjalan paralel dengan penghapusan Push Token sistem.
  • Permintaan berlawanan yang datang kemudian menggantikan operasi dalam antrean yang belum dijalankan.
  • RegistrationID tetap tidak berubah.

Definisi API

turnOnPush( context: common.UIAbilityContext | common.AbilityStageContext, appKey: string ): void
              
              turnOnPush(
  context: common.UIAbilityContext | common.AbilityStageContext,
  appKey: string
): void

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.turnOnPush(this.context, "your_app_key")
              
              EPushInterface.turnOnPush(this.context, "your_app_key")

            
Tampilkan blok kode ini di jendela mengambang

Parameter

  • context: Context AbilityStage atau UIAbility.
  • appKey: EngageLab AppKey yang akan diaktifkan, tidak boleh kosong.

Catatan Penggunaan

  • Selalu tersedia: turnOffPush, turnOnPush, init, konfigurasi lokal, callback, dan pengaturan log.
  • Tidak tersedia sementara: API RegistrationID, token, tag dan alias, badge, kueri status notifikasi (isPushStopped), serta pelaporan status pesan yang bergantung pada inisialisasi, jaringan push, atau identitas registrasi. Pemanggilan mengembalikan It must be init first.
  • API tersebut tersedia kembali setelah turnOnPush atau pemanggilan ulang init.

API Tag dan Alias

Menambah Tag (addTags)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Menghapus Tag (deleteTags)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Mengatur Tag (setTags)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Cek Status Binding Tag Tertentu (checkTagBindState)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Menghapus Semua Tag (cleanTags)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Mendapatkan Semua Tag (getTags)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Mengatur Alias (setAlias)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Mendapatkan Alias (getAlias)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Menghapus Alias (deleteAlias)

  • Lihat dokumen utama di atas untuk detail API Tag dan Alias serta contoh kode.

Pengaturan TCP SSL (setTcpSSl)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Mengatur apakah menggunakan koneksi TCP SSL terenkripsi.

  • Panggil sebelum init
  • Opsional

Definisi API

/** * Mengatur TCP SSL * @param b true: gunakan SSL, false: tidak gunakan SSL */ setTcpSSl(b: boolean)
              
              /**
 * Mengatur TCP SSL
 * @param b true: gunakan SSL, false: tidak gunakan SSL
 */
setTcpSSl(b: boolean)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setTcpSSl(true) // Aktifkan SSL
              
              EPushInterface.setTcpSSl(true) // Aktifkan SSL

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • b true berarti menggunakan koneksi TCP SSL terenkripsi, false berarti tidak menggunakan SSL

Pengaturan Interval Heartbeat (setHeartbeatTime)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

Mengatur interval heartbeat koneksi panjang, untuk menjaga koneksi tetap aktif.

  • Opsional

Definisi API

/** * Mengatur interval heartbeat koneksi panjang * @param heartbeatTime dalam detik, rentang [30,290] */ setHeartbeatTime(heartbeatTime: number)
              
              /**
 * Mengatur interval heartbeat koneksi panjang
 * @param heartbeatTime dalam detik, rentang [30,290]
 */
setHeartbeatTime(heartbeatTime: number)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setHeartbeatTime(60) // Atur heartbeat ke 60 detik
              
              EPushInterface.setHeartbeatTime(60) // Atur heartbeat ke 60 detik

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • heartbeatTime interval heartbeat, dalam detik, rentang nilai 30 hingga 290 detik

Pengaturan Badge (setBadgeNumber)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Silakan init terlebih dahulu, jika tidak panggilan tidak berlaku

Definisi API

/** * Mengatur badge * @param badgeNumber Nilai badge */ setBadgeNumber(badgeNumber: number)
              
              /**
 * Mengatur badge
 * @param badgeNumber Nilai badge
 */
setBadgeNumber(badgeNumber: number)

            
Tampilkan blok kode ini di jendela mengambang

Contoh Kode

EPushInterface.setBadgeNumber(0)
              
              EPushInterface.setBadgeNumber(0)

            
Tampilkan blok kode ini di jendela mengambang

Penjelasan Parameter

  • badgeNumber: Nilai badge

Penerimaan Pesan Kustom (customMessageBackgroundData)

Versi didukung: EPush HarmonyOS SDK v1.0.0

Penjelasan Fitur

  • Fungsi ini hanya menangani pesan kustom yang dikirim melalui channel HarmonyOS. Jika Anda menggunakan pesan kustom, pastikan mengikuti panduan integrasi: Konfigurasi Pesan Kustom

Definisi API

/** * Untuk integrasi pesan kustom * Penerimaan pesan kustom dari backend * @param data */
              
              /**
 * Untuk integrasi pesan kustom
 * Penerimaan pesan kustom dari backend
 * @param data
 */

            
Tampilkan blok kode ini di jendela mengambang
Icon Solid Transparent White Qiyu
Hubungi Sales