Android MA-Funktionsintegrationsleitfaden
Anwendungstipps
Um die MA-Funktion des EngageLab SDK zu nutzen, müssen Sie gleichzeitig das AppPush-Modul integrieren, und zunächst eine Anwendung auf der AppPush-Plattform erstellen, um den AppKey zu erhalten.
Pakete in libs importieren
- Manueller Weg
Importieren Sie mt-sdk-x.x.x-engagelab.aar aus dem libs-Paket in das libs-Verzeichnis
Importieren Sie mt-sdk-ma-x.x.x.aar aus dem libs-Paket in das libs-Verzeichnis
Importieren Sie mt-sdk-x.x.x-engagelab.aar aus dem libs-Paket in das libs-Verzeichnis
Importieren Sie mt-sdk-ma-x.x.x.aar aus dem libs-Paket in das libs-Verzeichnis
Diesen Codeblock im schwebenden Fenster anzeigen
- Automatischer Weg
dependencies {
// Notwendig, Hauptpaket
implementation 'com.engagelab:engagelab:5.0.0' // Beispiel: Version 5.0.0.
// Optional, MA-Funktion
implementation 'com.engagelab.plugin:oth_ma:5.0.0' // Beispiel: Version 5.0.0.
}
dependencies {
// Notwendig, Hauptpaket
implementation 'com.engagelab:engagelab:5.0.0' // Beispiel: Version 5.0.0.
// Optional, MA-Funktion
implementation 'com.engagelab.plugin:oth_ma:5.0.0' // Beispiel: Version 5.0.0.
}
Diesen Codeblock im schwebenden Fenster anzeigen
1. build.gradle-Konfiguration
plugins {
id 'com.android.application'
}
android {
...
defaultConfig {
// App-PackageName, der mit dem in der Konsole übereinstimmen muss
applicationId "com.engagelab.app"
...
manifestPlaceholders = [
// AppKey, muss mit dem auf der Konsole übereinstimmen und steht in 1:1-Beziehung zum PackageName
ENGAGELAB_PRIVATES_APPKEY : "Ihr AppKey",
// Engagelab appChannel, dient der Kanalstatistik
ENGAGELAB_PRIVATES_CHANNEL: "developer",
// Engagelab-Prozess, der Prozess, in dem das EngageLab SDK läuft. Hinweis: beginnt mit ':remote'
ENGAGELAB_PRIVATES_PROCESS: ":remote"
]
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
plugins {
id 'com.android.application'
}
android {
...
defaultConfig {
// App-PackageName, der mit dem in der Konsole übereinstimmen muss
applicationId "com.engagelab.app"
...
manifestPlaceholders = [
// AppKey, muss mit dem auf der Konsole übereinstimmen und steht in 1:1-Beziehung zum PackageName
ENGAGELAB_PRIVATES_APPKEY : "Ihr AppKey",
// Engagelab appChannel, dient der Kanalstatistik
ENGAGELAB_PRIVATES_CHANNEL: "developer",
// Engagelab-Prozess, der Prozess, in dem das EngageLab SDK läuft. Hinweis: beginnt mit ':remote'
ENGAGELAB_PRIVATES_PROCESS: ":remote"
]
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
Diesen Codeblock im schwebenden Fenster anzeigen
2. Notwendige Komponenten erstellen
package com.engagelab.app.component;
import com.engagelab.privates.common.component.MTCommonService;
/**
* Entwickler:innen erben von MTCommonService, um die Langzeitverbindung länger aufrechtzuerhalten.
* <p>
* Eine leere Implementierung ist ausreichend.
*/
public class UserService extends MTCommonService {
}
package com.engagelab.app.component;
import com.engagelab.privates.common.component.MTCommonService;
/**
* Entwickler:innen erben von MTCommonService, um die Langzeitverbindung länger aufrechtzuerhalten.
* <p>
* Eine leere Implementierung ist ausreichend.
*/
public class UserService extends MTCommonService {
}
Diesen Codeblock im schwebenden Fenster anzeigen
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;
/**
* Entwickler:innen erben von MTCommonReceiver und können die Methoden-Callbacks des SDK erhalten.
* <p>
* Alle Callbacks laufen im Hauptthread.
*/
public class UserReceiver extends MTCommonReceiver {
private static final String TAG = "UserReceiver";
/**
* Langzeitverbindungsstatus-Callback
*
* @param context Nicht null
* @param enable Gibt an, ob eine Verbindung besteht
*/
@Override
public void onConnectStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onConnectState:" + enable);
if (enable) { // Sobald die Langzeitverbindung einmal erfolgreich hergestellt wurde, kann sie später überall aufgerufen werden
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;
/**
* Entwickler:innen erben von MTCommonReceiver und können die Methoden-Callbacks des SDK erhalten.
* <p>
* Alle Callbacks laufen im Hauptthread.
*/
public class UserReceiver extends MTCommonReceiver {
private static final String TAG = "UserReceiver";
/**
* Langzeitverbindungsstatus-Callback
*
* @param context Nicht null
* @param enable Gibt an, ob eine Verbindung besteht
*/
@Override
public void onConnectStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onConnectState:" + enable);
if (enable) { // Sobald die Langzeitverbindung einmal erfolgreich hergestellt wurde, kann sie später überall aufgerufen werden
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);
}
});
}
}
}
Diesen Codeblock im schwebenden Fenster anzeigen
3. AndroidManifest.xml-Konfiguration
<?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">
<!-- Notwendig, Netzwerkberechtigung -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optional, Benachrichtigungsvibration -->
<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"> <!-- Wenn HTTP-Anfragen verwendet werden, muss die Nutzung von HTTP erlaubt sein -->
.....................................................................................................
<!-- Da diese Klasse die Langzeitverbindungsfunktion besitzt, kann der Service mit dem Namensteil Engagelab im Paketnamen durch die Energiesparoptimierung des Geräteherstellers direkt beendet werden -->
<!-- Daher sollten Entwickler:innen von com.engagelab.app.component.MTCommonService erben, um die Überlebensrate der Langzeitverbindung zu erhöhen und so die Nachrichten-Zustellrate zu verbessern -->
<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>
<!-- Dient zum Empfangen der Callback-Methoden der Engagelab-Services, einschließlich Langzeitverbindungsstatus/Benachrichtigungsschalterstatus/Benachrichtigungsnachricht empfangen/Benachrichtigungsnachricht geklickt/Benachrichtigungsnachricht gelöscht/Custom Message/Vendor Token Callback -->
<!-- Es ist keine Konfiguration eines Subprozesses notwendig. Dieser Callback läuft im Hauptprozess und ist somit für Geschäftslogik geeignet -->
<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">
<!-- Notwendig, Netzwerkberechtigung -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optional, Benachrichtigungsvibration -->
<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"> <!-- Wenn HTTP-Anfragen verwendet werden, muss die Nutzung von HTTP erlaubt sein -->
.....................................................................................................
<!-- Da diese Klasse die Langzeitverbindungsfunktion besitzt, kann der Service mit dem Namensteil Engagelab im Paketnamen durch die Energiesparoptimierung des Geräteherstellers direkt beendet werden -->
<!-- Daher sollten Entwickler:innen von com.engagelab.app.component.MTCommonService erben, um die Überlebensrate der Langzeitverbindung zu erhöhen und so die Nachrichten-Zustellrate zu verbessern -->
<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>
<!-- Dient zum Empfangen der Callback-Methoden der Engagelab-Services, einschließlich Langzeitverbindungsstatus/Benachrichtigungsschalterstatus/Benachrichtigungsnachricht empfangen/Benachrichtigungsnachricht geklickt/Benachrichtigungsnachricht gelöscht/Custom Message/Vendor Token Callback -->
<!-- Es ist keine Konfiguration eines Subprozesses notwendig. Dieser Callback läuft im Hauptprozess und ist somit für Geschäftslogik geeignet -->
<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>
Diesen Codeblock im schwebenden Fenster anzeigen
4. Initialisierung
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();
// Muss in application.onCreate konfiguriert werden; eine Prozessprüfung ist nicht notwendig, da das SDK dies intern übernimmt
MTCorePrivatesApi.configDebugMode(this, true);
// Initialisierung für Push-Benachrichtigungen
// 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();
// Muss in application.onCreate konfiguriert werden; eine Prozessprüfung ist nicht notwendig, da das SDK dies intern übernimmt
MTCorePrivatesApi.configDebugMode(this, true);
// Initialisierung für Push-Benachrichtigungen
// MTPushPrivatesApi.init(this);
}
}
Diesen Codeblock im schwebenden Fenster anzeigen

