Android MA 功能集成指引
最新更新:2025-03-18
使用提示
如需使用 EngageLab SDK 的 MA 功能,需要同時集成 AppPush 模組。請先在 AppPush 平臺創建一個應用獲得 AppKey。
1.libs 導包
- 手動方式
將libs包下面的 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目錄
此代碼塊在浮窗中顯示
- 自動方式
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 : "您的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 : "您的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 不為空
* @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 不為空
* @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字樣的service -->
<!-- 所以需要開發者繼承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業務的回調,包含了長連接狀態/通知開關狀態/通知消息到達/通知消息點擊/通知消息刪除/自定義消息/廠商token回調 -->
<!-- 不需要配置子進程,此回調中在主進程中,方便業務操作 -->
<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字樣的service -->
<!-- 所以需要開發者繼承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業務的回調,包含了長連接狀態/通知開關狀態/通知消息到達/通知消息點擊/通知消息刪除/自定義消息/廠商token回調 -->
<!-- 不需要配置子進程,此回調中在主進程中,方便業務操作 -->
<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);
}
}
此代碼塊在浮窗中顯示