logoDokumen
Cari

Panduan Integrasi Channel Engagelab

Mendapatkan Informasi Aplikasi

Buat aplikasi di konsol. Setelah aplikasi dibuat, AppKey akan otomatis dihasilkan untuk identifikasi aplikasi. Untuk detail lebih lanjut, lihat Pengaturan Aplikasi.

Mengimpor Library

  • Metode Manual
Impor mt-sdk-x.x.x.aar dari folder libs ke direktori libs. Impor th-xxx-x.x.x.aar yang ada di dalam paket libs ke direktori libs.
              
              Impor mt-sdk-x.x.x.aar dari folder libs ke direktori libs.
Impor th-xxx-x.x.x.aar yang ada di dalam paket libs ke direktori libs.

            
Tampilkan blok kode ini di jendela mengambang
  • Metode Otomatis
dependencies { // Wajib: Paket utama implementation 'com.engagelab:engagelab:4.3.9' // Contoh versi 4.3.9 // Opsional: Google implementation 'com.engagelab.plugin:google:4.3.9' // Opsional: Honor implementation 'com.engagelab.plugin:honor:4.3.9' implementation 'com.engagelab.plugin:honor_th_push:4.3.9' // Opsional: Huawei implementation 'com.engagelab.plugin:huawei:4.3.9' // Opsional: Xiaomi (China) implementation 'com.engagelab.plugin:mi:4.3.9' // Opsional: Meizu implementation 'com.engagelab.plugin:meizu:4.3.9' // Opsional: Oppo implementation 'com.engagelab.plugin:oppo:4.3.9' implementation 'com.engagelab.plugin:oppo_th_push:4.3.9' // Opsional: Vivo implementation 'com.engagelab.plugin:vivo:4.3.9' // Opsional: Fungsi siaran suara implementation 'com.engagelab.plugin:oth_sound:4.3.9' }
              
              dependencies {
  // Wajib: Paket utama
  implementation 'com.engagelab:engagelab:4.3.9' // Contoh versi 4.3.9
  // Opsional: Google
  implementation 'com.engagelab.plugin:google:4.3.9'
  // Opsional: Honor
  implementation 'com.engagelab.plugin:honor:4.3.9'
  implementation 'com.engagelab.plugin:honor_th_push:4.3.9'
  // Opsional: Huawei
  implementation 'com.engagelab.plugin:huawei:4.3.9'
  // Opsional: Xiaomi (China)
  implementation 'com.engagelab.plugin:mi:4.3.9'
  // Opsional: Meizu
  implementation 'com.engagelab.plugin:meizu:4.3.9'
  // Opsional: Oppo
  implementation 'com.engagelab.plugin:oppo:4.3.9'
  implementation 'com.engagelab.plugin:oppo_th_push:4.3.9'
  // Opsional: Vivo
  implementation 'com.engagelab.plugin:vivo:4.3.9'
  // Opsional: Fungsi siaran suara
  implementation 'com.engagelab.plugin:oth_sound:4.3.9'
}

            
Tampilkan blok kode ini di jendela mengambang

2. Konfigurasi build.gradle

plugins { id 'com.android.application' } android { ... defaultConfig { // Nama paket aplikasi, harus sama dengan yang ada di konsol applicationId "com.engagelab.app" ... manifestPlaceholders = [ // AppKey, harus sama dengan di konsol; satu-satu dengan packageName ENGAGELAB_PRIVATES_APPKEY : "YourAppKey", // appChannel Engagelab, untuk statistik channel ENGAGELAB_PRIVATES_CHANNEL: "developer", // Proses Engagelab, proses tempat SDK berjalan; diawali dengan : ENGAGELAB_PRIVATES_PROCESS: ":remote", ] } } dependencies { implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') }
              
              plugins {
    id 'com.android.application'
}

android {
    ...

    defaultConfig {
        // Nama paket aplikasi, harus sama dengan yang ada di konsol
        applicationId "com.engagelab.app"
        ...
        manifestPlaceholders = [
            // AppKey, harus sama dengan di konsol; satu-satu dengan packageName
            ENGAGELAB_PRIVATES_APPKEY : "YourAppKey",
            // appChannel Engagelab, untuk statistik channel
            ENGAGELAB_PRIVATES_CHANNEL: "developer",
            // Proses Engagelab, proses tempat SDK berjalan; diawali dengan :
            ENGAGELAB_PRIVATES_PROCESS: ":remote",
        ]
    }
}

dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}

            
Tampilkan blok kode ini di jendela mengambang

Membuat Komponen yang Dibutuhkan

UserService

package com.engagelab.app.component; import com.engagelab.privates.common.component.MTCommonService; /** * Pengembang dapat mewarisi MTCommonService untuk memperpanjang masa hidup koneksi panjang. * Implementasi kosong sudah cukup. */ public class UserService extends MTCommonService {}
              
              package com.engagelab.app.component;

import com.engagelab.privates.common.component.MTCommonService;

/**
 * Pengembang dapat mewarisi MTCommonService untuk memperpanjang masa hidup koneksi panjang.
 * Implementasi kosong sudah cukup.
 */
public class UserService extends MTCommonService {}

            
Tampilkan blok kode ini di jendela mengambang

UserReceiver

package com.engagelab.app.component; import android.content.Context; import android.widget.Toast; import com.engagelab.app.common.ExampleGlobal; import com.engagelab.app.listener.StatusObserver; import com.engagelab.app.log.ExampleLogger; import com.engagelab.privates.common.component.MTCommonReceiver; import com.engagelab.privates.core.api.MTCorePrivatesApi; import com.engagelab.privates.push.api.CustomMessage; import com.engagelab.privates.push.api.NotificationMessage; import com.engagelab.privates.push.api.PlatformTokenMessage; public class UserReceiver extends MTCommonReceiver { private static final String TAG = "UserReceiver"; @Override public void onNotificationStatus(Context context, boolean enable) { ExampleLogger.i(TAG, "onNotificationStatus:" + enable); Toast.makeText(context.getApplicationContext(), "onNotificationStatus " + enable, Toast.LENGTH_SHORT).show(); ExampleGlobal.isNotificationEnable = enable; if (StatusObserver.getInstance().getListener() != null) { StatusObserver.getInstance().getListener().onNotificationStatus(enable); } } @Override public void onConnectStatus(Context context, boolean enable) { ExampleLogger.i(TAG, "onConnectState:" + enable); Toast.makeText(context.getApplicationContext(), "onConnectStatus " + enable, Toast.LENGTH_SHORT).show(); ExampleGlobal.isConnectEnable = enable; if (StatusObserver.getInstance().getListener() != null) { StatusObserver.getInstance().getListener().onConnectStatus(enable); } if (enable) { String registrationId = MTCorePrivatesApi.getRegistrationId(context); ExampleLogger.i(TAG, "registrationId:" + registrationId); } } @Override public void onNotificationArrived(Context context, NotificationMessage notificationMessage) { ExampleLogger.i(TAG, "onNotificationArrived:" + notificationMessage.toString()); } @Override public void onNotificationUnShow(Context context, NotificationMessage notificationMessage) { ExampleLogger.i(TAG, "onNotificationUnShow:" + notificationMessage.toString()); } @Override public void onNotificationClicked(Context context, NotificationMessage notificationMessage) { ExampleLogger.i(TAG, "onNotificationClicked:" + notificationMessage.toString()); } @Override public void onNotificationDeleted(Context context, NotificationMessage notificationMessage) { ExampleLogger.i(TAG, "onNotificationDeleted:" + notificationMessage.toString()); } @Override public void onCustomMessage(Context context, CustomMessage customMessage) { ExampleLogger.i(TAG, "onCustomMessage:" + customMessage.toString()); } @Override public void onPlatformToken(Context context, PlatformTokenMessage platformTokenMessage) { ExampleLogger.i(TAG, "onPlatformToken:" + platformTokenMessage.toString()); } }
              
              package com.engagelab.app.component;

import android.content.Context;
import android.widget.Toast;

import com.engagelab.app.common.ExampleGlobal;
import com.engagelab.app.listener.StatusObserver;
import com.engagelab.app.log.ExampleLogger;
import com.engagelab.privates.common.component.MTCommonReceiver;
import com.engagelab.privates.core.api.MTCorePrivatesApi;
import com.engagelab.privates.push.api.CustomMessage;
import com.engagelab.privates.push.api.NotificationMessage;
import com.engagelab.privates.push.api.PlatformTokenMessage;

public class UserReceiver extends MTCommonReceiver {
    private static final String TAG = "UserReceiver";

    @Override
    public void onNotificationStatus(Context context, boolean enable) {
        ExampleLogger.i(TAG, "onNotificationStatus:" + enable);
        Toast.makeText(context.getApplicationContext(), "onNotificationStatus " + enable, Toast.LENGTH_SHORT).show();
        ExampleGlobal.isNotificationEnable = enable;
        if (StatusObserver.getInstance().getListener() != null) {
            StatusObserver.getInstance().getListener().onNotificationStatus(enable);
        }
    }

    @Override
    public void onConnectStatus(Context context, boolean enable) {
        ExampleLogger.i(TAG, "onConnectState:" + enable);
        Toast.makeText(context.getApplicationContext(), "onConnectStatus " + enable, Toast.LENGTH_SHORT).show();
        ExampleGlobal.isConnectEnable = enable;
        if (StatusObserver.getInstance().getListener() != null) {
            StatusObserver.getInstance().getListener().onConnectStatus(enable);
        }
        if (enable) {
            String registrationId = MTCorePrivatesApi.getRegistrationId(context);
            ExampleLogger.i(TAG, "registrationId:" + registrationId);
        }
    }

    @Override
    public void onNotificationArrived(Context context, NotificationMessage notificationMessage) {
        ExampleLogger.i(TAG, "onNotificationArrived:" + notificationMessage.toString());
    }

    @Override
    public void onNotificationUnShow(Context context, NotificationMessage notificationMessage) {
        ExampleLogger.i(TAG, "onNotificationUnShow:" + notificationMessage.toString());
    }

    @Override
    public void onNotificationClicked(Context context, NotificationMessage notificationMessage) {
        ExampleLogger.i(TAG, "onNotificationClicked:" + notificationMessage.toString());
    }

    @Override
    public void onNotificationDeleted(Context context, NotificationMessage notificationMessage) {
        ExampleLogger.i(TAG, "onNotificationDeleted:" + notificationMessage.toString());
    }

    @Override
    public void onCustomMessage(Context context, CustomMessage customMessage) {
        ExampleLogger.i(TAG, "onCustomMessage:" + customMessage.toString());
    }

    @Override
    public void onPlatformToken(Context context, PlatformTokenMessage platformTokenMessage) {
        ExampleLogger.i(TAG, "onPlatformToken:" + platformTokenMessage.toString());
    }
}

            
Tampilkan blok kode ini di jendela mengambang

4. Konfigurasi AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.engagelab.app"> <!-- Wajib: Izin internet --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Opsional: Getar untuk notifikasi --> <uses-permission android:name="android.permission.VIBRATE" /> <application android:name="com.engagelab.app.MainApplication" android:allowBackup="false" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.MT" android:usesCleartextTraffic="true" tools:targetApi="m"> <!-- Service untuk koneksi panjang --> <service android:name="com.engagelab.app.component.UserService" android:exported="false" android:process="${ENGAGELAB_PRIVATES_PROCESS}"> <intent-filter> <action android:name="com.engagelab.privates.intent.USER_SERVICE" /> </intent-filter> </service> <!-- Receiver untuk callback bisnis Engagelab --> <receiver android:name="com.engagelab.app.component.UserReceiver" android:exported="false"> <intent-filter> <action android:name="com.engagelab.privates.intent.USER_RECEIVER" /> </intent-filter> </receiver> </application> </manifest>
              
              <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.engagelab.app">
        
    <!-- Wajib: Izin internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Opsional: Getar untuk notifikasi -->
    <uses-permission android:name="android.permission.VIBRATE" /> 
        
    <application
        android:name="com.engagelab.app.MainApplication"
        android:allowBackup="false"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.MT"
        android:usesCleartextTraffic="true"
        tools:targetApi="m">

        <!-- Service untuk koneksi panjang -->
        <service
            android:name="com.engagelab.app.component.UserService"
            android:exported="false"
            android:process="${ENGAGELAB_PRIVATES_PROCESS}">
            <intent-filter>
                <action android:name="com.engagelab.privates.intent.USER_SERVICE" />
            </intent-filter>
        </service>

        <!-- Receiver untuk callback bisnis Engagelab -->
        <receiver
            android:name="com.engagelab.app.component.UserReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.engagelab.privates.intent.USER_RECEIVER" />
            </intent-filter>
        </receiver>

    </application>
</manifest>

            
Tampilkan blok kode ini di jendela mengambang

5. Konfigurasi Lingkungan

package com.engagelab.app; import android.app.Application; import com.engagelab.privates.core.api.MTCorePrivatesApi; public class MainApplication extends Application { private static final String TAG = "MainApplication"; @Override public void onCreate() { super.onCreate(); // Konfigurasi di application.onCreate, tidak perlu cek proses, SDK sudah otomatis. MTCorePrivatesApi.configDebugMode(this, true); // Untuk versi lama, panggil jika dibutuhkan: // MTPushPrivatesApi.configOldPushVersion(context.getApplicationContext()); // Inisialisasi push: // MTPushPrivatesApi.init(this); } }
              
              package com.engagelab.app;

import android.app.Application;
import com.engagelab.privates.core.api.MTCorePrivatesApi;

public class MainApplication extends Application {
    private static final String TAG = "MainApplication";

    @Override
    public void onCreate() {
        super.onCreate();
        // Konfigurasi di application.onCreate, tidak perlu cek proses, SDK sudah otomatis.
        MTCorePrivatesApi.configDebugMode(this, true);
        // Untuk versi lama, panggil jika dibutuhkan:
        // MTPushPrivatesApi.configOldPushVersion(context.getApplicationContext());
        // Inisialisasi push:
        // MTPushPrivatesApi.init(this);
    }
}

            
Tampilkan blok kode ini di jendela mengambang

6. Membuat Komponen Loncatan Klik Notifikasi

package com.engagelab.app.component; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import com.engagelab.app.R; import com.engagelab.app.log.ExampleLogger; public class UserActivity400 extends Activity { private static final String TAG = "UserActivity400"; private TextView tvMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_intent); tvMessage = findViewById(R.id.tv_message); onIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); onIntent(intent); } private void onIntent(Intent intent) { try { Toast.makeText(this, TAG, Toast.LENGTH_SHORT).show(); if (intent == null) return; String notificationMessage = intent.getStringExtra("message_json"); if (notificationMessage == null) return; ExampleLogger.d(TAG, "notificationMessage:" + notificationMessage); tvMessage.setText(notificationMessage); } catch (Throwable throwable) { throwable.printStackTrace(); } } }
              
              package com.engagelab.app.component;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.engagelab.app.R;
import com.engagelab.app.log.ExampleLogger;

public class UserActivity400 extends Activity {
    private static final String TAG = "UserActivity400";
    private TextView tvMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent);
        tvMessage = findViewById(R.id.tv_message);
        onIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        onIntent(intent);
    }

    private void onIntent(Intent intent) {
        try {
            Toast.makeText(this, TAG, Toast.LENGTH_SHORT).show();
            if (intent == null) return;
            String notificationMessage = intent.getStringExtra("message_json");
            if (notificationMessage == null) return;
            ExampleLogger.d(TAG, "notificationMessage:" + notificationMessage);
            tvMessage.setText(notificationMessage);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}

            
Tampilkan blok kode ini di jendela mengambang

7. Konfigurasi AndroidManifest.xml untuk Loncatan Klik

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.engagelab.app"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <application android:name="com.engagelab.app.MainApplication" android:allowBackup="false" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.MT" android:usesCleartextTraffic="true" tools:targetApi="m"> <!-- Activity untuk loncatan klik notifikasi --> <activity android:name="com.engagelab.app.component.UserActivity400" android:exported="false" android:launchMode="singleTask" /> <!-- Contoh intent-filter untuk deep link (opsional) --> <!-- <activity android:name="com.engagelab.app.component.UserActivity400" android:exported="false" > <intent-filter> <data android:scheme="YourScheme"/> <data android:host="YourHost"/> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity> --> <!-- Whitelist transfer lokal --> <meta-data android:name="ENGAGELAB_PRIVATES_TRANSFER" android:value="com.engagelab.app.component.UserActivity400" /> <!-- Diperlukan untuk push Google --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/mtpush_notification_icon" /> <!-- Diperlukan untuk push Huawei --> <meta-data android:name="com.huawei.messaging.default_notification_icon" android:resource="@drawable/mtpush_notification_icon" /> </application> </manifest>
              
              <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.engagelab.app">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:name="com.engagelab.app.MainApplication"
        android:allowBackup="false"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.MT"
        android:usesCleartextTraffic="true"
        tools:targetApi="m">

        <!-- Activity untuk loncatan klik notifikasi -->
        <activity
            android:name="com.engagelab.app.component.UserActivity400"
            android:exported="false"
            android:launchMode="singleTask" />

        <!-- Contoh intent-filter untuk deep link (opsional) -->
        <!--
        <activity
            android:name="com.engagelab.app.component.UserActivity400"
            android:exported="false" >
            <intent-filter>
                <data android:scheme="YourScheme"/>
                <data android:host="YourHost"/>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity>
        -->

        <!-- Whitelist transfer lokal -->
        <meta-data
            android:name="ENGAGELAB_PRIVATES_TRANSFER"
            android:value="com.engagelab.app.component.UserActivity400" />
                
        <!-- Diperlukan untuk push Google -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/mtpush_notification_icon" />

        <!-- Diperlukan untuk push Huawei -->
        <meta-data
            android:name="com.huawei.messaging.default_notification_icon"
            android:resource="@drawable/mtpush_notification_icon" />

    </application>
</manifest>

            
Tampilkan blok kode ini di jendela mengambang
icon
Hubungi Sales