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);

    }

}

        
此代码块在浮窗中显示
在文档中心打开
icon
联系销售