คู่มือการรวมฟังก์ชัน MA สำหรับ Android
เคล็ดลับการใช้งาน
เพื่อใช้ฟังก์ชัน MA ของ EngageLab SDK คุณจำเป็นต้องรวมโมดูล AppPush พร้อมกัน โปรดสร้างแอปพลิเคชันบนแพลตฟอร์ม AppPush ก่อนเพื่อรับ AppKey
1. การนำเข้าแพ็คเกจใน libs
- วิธีการแบบ Manual
นำเข้า mt-sdk-x.x.x-engagelab.aar ภายใต้แพ็คเกจ libs ไปยังไดเรกทอรี libs
นำเข้า mt-sdk-ma-x.x.x.aar ภายใต้แพ็คเกจ libs ไปยังไดเรกทอรี libs
นำเข้า mt-sdk-x.x.x-engagelab.aar ภายใต้แพ็คเกจ libs ไปยังไดเรกทอรี libs
นำเข้า mt-sdk-ma-x.x.x.aar ภายใต้แพ็คเกจ libs ไปยังไดเรกทอรี libs
โค้ดนี้โชว์เป็นหน้าต่างลอย
- วิธีการแบบอัตโนมัติ
dependencies {
// จำเป็น, แพ็คเกจหลัก
implementation 'com.engagelab:engagelab:5.0.0' // ใช้เวอร์ชัน 5.0.0 เป็นตัวอย่าง
// ตัวเลือก, ฟังก์ชัน ma
implementation 'com.engagelab.plugin:oth_ma:5.0.0' // ใช้เวอร์ชัน 5.0.0 เป็นตัวอย่าง
}
dependencies {
// จำเป็น, แพ็คเกจหลัก
implementation 'com.engagelab:engagelab:5.0.0' // ใช้เวอร์ชัน 5.0.0 เป็นตัวอย่าง
// ตัวเลือก, ฟังก์ชัน ma
implementation 'com.engagelab.plugin:oth_ma:5.0.0' // ใช้เวอร์ชัน 5.0.0 เป็นตัวอย่าง
}
โค้ดนี้โชว์เป็นหน้าต่างลอย
2. การตั้งค่า build.gradle
plugins {
id 'com.android.application'
}
android {
...
defaultConfig {
// app packageName, ต้องเหมือนกับที่อยู่บนคอนโซล
applicationId "com.engagelab.app"
...
manifestPlaceholders = [
// appKey, ต้องเหมือนกับที่อยู่บนคอนโซลและมีความสัมพันธ์แบบหนึ่งต่อหนึ่งกับ packageName
ENGAGELAB_PRIVATES_APPKEY : "Your appkey",
// Engagelab appChannel, ใช้สำหรับสถิติช่องทาง
ENGAGELAB_PRIVATES_CHANNEL: "developer",
// Engagelab process, กระบวนการที่ Engagelabsdk ทำงาน หมายเหตุ: จุดเริ่มต้น
ENGAGELAB_PRIVATES_PROCESS: ":remote"
]
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
plugins {
id 'com.android.application'
}
android {
...
defaultConfig {
// app packageName, ต้องเหมือนกับที่อยู่บนคอนโซล
applicationId "com.engagelab.app"
...
manifestPlaceholders = [
// appKey, ต้องเหมือนกับที่อยู่บนคอนโซลและมีความสัมพันธ์แบบหนึ่งต่อหนึ่งกับ packageName
ENGAGELAB_PRIVATES_APPKEY : "Your appkey",
// Engagelab appChannel, ใช้สำหรับสถิติช่องทาง
ENGAGELAB_PRIVATES_CHANNEL: "developer",
// Engagelab process, กระบวนการที่ Engagelabsdk ทำงาน หมายเหตุ: จุดเริ่มต้น
ENGAGELAB_PRIVATES_PROCESS: ":remote"
]
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
โค้ดนี้โชว์เป็นหน้าต่างลอย
3. การสร้างคอมโพเนนต์ที่จำเป็น
package com.engagelab.app.component;
import com.engagelab.privates.common.component.MTCommonService;
/**
* นักพัฒนาสืบทอดจาก MTCommonService ซึ่งสามารถรักษาการเชื่อมต่อแบบยาวให้อยู่ได้นานขึ้น
* <p>
* การใช้งานแบบว่างเปล่าก็เพียงพอแล้ว
*/
public class UserService extends MTCommonService {
}
package com.engagelab.app.component;
import com.engagelab.privates.common.component.MTCommonService;
/**
* นักพัฒนาสืบทอดจาก MTCommonService ซึ่งสามารถรักษาการเชื่อมต่อแบบยาวให้อยู่ได้นานขึ้น
* <p>
* การใช้งานแบบว่างเปล่าก็เพียงพอแล้ว
*/
public class UserService extends MTCommonService {
}
โค้ดนี้โชว์เป็นหน้าต่างลอย
package com.engagelab.app.component;
import android.content.Context;
import android.widget.Toast;
import java.util.Arrays;
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.core.api.WakeMessage;
import com.engagelab.privates.push.api.CustomMessage;
import com.engagelab.privates.push.api.MobileNumberMessage;
import com.engagelab.privates.push.api.NotificationMessage;
import com.engagelab.privates.push.api.PlatformTokenMessage;
/**
* นักพัฒนาสืบทอดจาก MTCommonReceiver และสามารถรับการเรียกกลับของวิธีการของ SDK
* <p>
* การเรียกกลับทั้งหมดอยู่ในเธรดหลัก
*/
public class UserReceiver extends MTCommonReceiver {
private static final String TAG = "UserReceiver";
/**
* การเรียกกลับสถานะการเชื่อมต่อแบบยาว
*
* @param context ไม่เป็น null
* @param enable เชื่อมต่อหรือไม่
*/
@Override
public void onConnectStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onConnectState:" + enable);
if (enable) { // ตราบใดที่การเชื่อมต่อแบบยาวสำเร็จครั้งหนึ่ง สามารถเรียกได้ทุกที่ในภายหลัง
MTMAApi.getInstance(this).start(new CallBack() {
@Override
public void onCallBack(int code, String msg) {
Log.e(TAG, "start code:" + code);
Log.e(TAG, "startmsg:" + msg);
}
});
}
}
}
package com.engagelab.app.component;
import android.content.Context;
import android.widget.Toast;
import java.util.Arrays;
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.core.api.WakeMessage;
import com.engagelab.privates.push.api.CustomMessage;
import com.engagelab.privates.push.api.MobileNumberMessage;
import com.engagelab.privates.push.api.NotificationMessage;
import com.engagelab.privates.push.api.PlatformTokenMessage;
/**
* นักพัฒนาสืบทอดจาก MTCommonReceiver และสามารถรับการเรียกกลับของวิธีการของ SDK
* <p>
* การเรียกกลับทั้งหมดอยู่ในเธรดหลัก
*/
public class UserReceiver extends MTCommonReceiver {
private static final String TAG = "UserReceiver";
/**
* การเรียกกลับสถานะการเชื่อมต่อแบบยาว
*
* @param context ไม่เป็น null
* @param enable เชื่อมต่อหรือไม่
*/
@Override
public void onConnectStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onConnectState:" + enable);
if (enable) { // ตราบใดที่การเชื่อมต่อแบบยาวสำเร็จครั้งหนึ่ง สามารถเรียกได้ทุกที่ในภายหลัง
MTMAApi.getInstance(this).start(new CallBack() {
@Override
public void onCallBack(int code, String msg) {
Log.e(TAG, "start code:" + code);
Log.e(TAG, "startmsg:" + msg);
}
});
}
}
}
โค้ดนี้โชว์เป็นหน้าต่างลอย
4. การตั้งค่า 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">
<!-- จำเป็น, สิทธิ์เครือข่าย -->
<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"> <!-- หากใช้คำขอ http ต้องอนุญาตให้ใช้ http -->
.....................................................................................................
<!-- เนื่องจากคลาสนี้มีฟังก์ชันการเชื่อมต่อแบบยาว บริการที่มีคำว่า Engagelab ในชื่อแพ็คเกจอาจถูกฆ่าโดยตรงระหว่างการประหยัดพลังงานโดยผู้ผลิตโทรศัพท์ -->
<!-- ดังนั้นนักพัฒนาจำเป็นต้องสืบทอดจาก com.engagelab.app.component.MTCommonService เพื่อเพิ่มอัตราการอยู่รอดของการเชื่อมต่อแบบยาว เพื่อให้บรรลุวัตถุประสงค์ในการเพิ่มอัตราการมาถึงของข้อความ -->
<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>
<!-- ใช้เพื่อรับการเรียกกลับของบริการ 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">
<!-- จำเป็น, สิทธิ์เครือข่าย -->
<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"> <!-- หากใช้คำขอ http ต้องอนุญาตให้ใช้ http -->
.....................................................................................................
<!-- เนื่องจากคลาสนี้มีฟังก์ชันการเชื่อมต่อแบบยาว บริการที่มีคำว่า Engagelab ในชื่อแพ็คเกจอาจถูกฆ่าโดยตรงระหว่างการประหยัดพลังงานโดยผู้ผลิตโทรศัพท์ -->
<!-- ดังนั้นนักพัฒนาจำเป็นต้องสืบทอดจาก com.engagelab.app.component.MTCommonService เพื่อเพิ่มอัตราการอยู่รอดของการเชื่อมต่อแบบยาว เพื่อให้บรรลุวัตถุประสงค์ในการเพิ่มอัตราการมาถึงของข้อความ -->
<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>
<!-- ใช้เพื่อรับการเรียกกลับของบริการ 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>
โค้ดนี้โชว์เป็นหน้าต่างลอย
5. การเริ่มต้น
package com.engagelab.app;
import android.app.Application;
import com.engagelab.privates.core.api.Address;
import com.engagelab.privates.core.api.MTCorePrivatesApi;
import com.engagelab.privates.push.api.MTPushPrivatesApi;
public class MainApplication extends Application {
private static final String TAG = "MainApplication";
@Override
public void onCreate() {
super.onCreate();
// ต้องกำหนดค่าใน application.onCreate อย่าตัดสินกระบวนการ SDK มีการตัดสินของตัวเองภายใน
MTCorePrivatesApi.configDebugMode(this, true);
// เริ่มต้น push สำหรับการแจ้งเตือน
// MTPushPrivatesApi.init(this);
}
}
package com.engagelab.app;
import android.app.Application;
import com.engagelab.privates.core.api.Address;
import com.engagelab.privates.core.api.MTCorePrivatesApi;
import com.engagelab.privates.push.api.MTPushPrivatesApi;
public class MainApplication extends Application {
private static final String TAG = "MainApplication";
@Override
public void onCreate() {
super.onCreate();
// ต้องกำหนดค่าใน application.onCreate อย่าตัดสินกระบวนการ SDK มีการตัดสินของตัวเองภายใน
MTCorePrivatesApi.configDebugMode(this, true);
// เริ่มต้น push สำหรับการแจ้งเตือน
// MTPushPrivatesApi.init(this);
}
}
โค้ดนี้โชว์เป็นหน้าต่างลอย