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){//在长连接成功一次后进行调用,该接口用于开启 MA 功能,请务必注意
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){//在长连接成功一次后进行调用,该接口用于开启 MA 功能,请务必注意
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);
// 初始化 AppPush 推送
// 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);
// 初始化 AppPush 推送
// MTPushPrivatesApi.init(this);
}
}
此代码块在浮窗中显示