Guide d'intégration du canal EngageLab
Obtenir les informations de l'application
Créez une application dans la console. Après la création de l'application, une AppKey est automatiquement générée pour identifier l'application. Pour plus d'informations, consultez Paramètres de l'application.
Importation des bibliothèques
- Méthode manuelle
Importez le fichier mt-sdk-x.x.x.aar du dossier libs dans le répertoire libs.
Importez th-xxx-x.x.x.aar sous le package libs dans le répertoire libs.
Importez le fichier mt-sdk-x.x.x.aar du dossier libs dans le répertoire libs.
Importez th-xxx-x.x.x.aar sous le package libs dans le répertoire libs.
Afficher ce bloc de code dans la fenêtre flottante
- Méthode automatique
dependencies {
// Obligatoire : package principal
implementation 'com.engagelab:engagelab:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Google
implementation 'com.engagelab.plugin:google:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Honor
implementation 'com.engagelab.plugin:honor:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
implementation 'com.engagelab.plugin:honor_th_push:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Huawei
implementation 'com.engagelab.plugin:huawei:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Xiaomi, version chinoise
implementation 'com.engagelab.plugin:mi:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Meizu
implementation 'com.engagelab.plugin:meizu:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Oppo
implementation 'com.engagelab.plugin:oppo:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
implementation 'com.engagelab.plugin:oppo_th_push:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Vivo
implementation 'com.engagelab.plugin:vivo:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fonction de diffusion vocale
implementation 'com.engagelab.plugin:oth_sound:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
}
dependencies {
// Obligatoire : package principal
implementation 'com.engagelab:engagelab:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Google
implementation 'com.engagelab.plugin:google:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Honor
implementation 'com.engagelab.plugin:honor:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
implementation 'com.engagelab.plugin:honor_th_push:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Huawei
implementation 'com.engagelab.plugin:huawei:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Xiaomi, version chinoise
implementation 'com.engagelab.plugin:mi:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Meizu
implementation 'com.engagelab.plugin:meizu:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Oppo
implementation 'com.engagelab.plugin:oppo:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
implementation 'com.engagelab.plugin:oppo_th_push:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fournisseur Vivo
implementation 'com.engagelab.plugin:vivo:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
// Optionnel : fonction de diffusion vocale
implementation 'com.engagelab.plugin:oth_sound:4.3.9' // Ici, nous utilisons la version 4.3.9 à titre d'exemple.
}
Afficher ce bloc de code dans la fenêtre flottante
2. Configurer build.gradle
plugins {
id 'com.android.application'
}
android {
...
defaultConfig {
// Nom du package de l'application, doit être identique à celui de la console
applicationId "com.engagelab.app"
...
manifestPlaceholders = [
// AppKey, doit être identique à celui de la console ; relation un-à-un avec packageName
ENGAGELAB_PRIVATES_APPKEY : "YourAppKey",
// appChannel EngageLab, utilisé pour les statistiques de canal
ENGAGELAB_PRIVATES_CHANNEL: "developer",
// Processus EngageLab, le processus où le SDK EngageLab fonctionne ; note : commence par
ENGAGELAB_PRIVATES_PROCESS: ":remote",
]
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
plugins {
id 'com.android.application'
}
android {
...
defaultConfig {
// Nom du package de l'application, doit être identique à celui de la console
applicationId "com.engagelab.app"
...
manifestPlaceholders = [
// AppKey, doit être identique à celui de la console ; relation un-à-un avec packageName
ENGAGELAB_PRIVATES_APPKEY : "YourAppKey",
// appChannel EngageLab, utilisé pour les statistiques de canal
ENGAGELAB_PRIVATES_CHANNEL: "developer",
// Processus EngageLab, le processus où le SDK EngageLab fonctionne ; note : commence par
ENGAGELAB_PRIVATES_PROCESS: ":remote",
]
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
Afficher ce bloc de code dans la fenêtre flottante
Créer les composants requis
package com.engagelab.app.component;
import com.engagelab.privates.common.component.MTCommonService;
/**
* Les développeurs peuvent étendre MTCommonService pour prolonger la longévité de la connexion longue.
*
* Une implémentation vide suffit.
*/
public class UserService extends MTCommonService {
}
package com.engagelab.app.component;
import com.engagelab.privates.common.component.MTCommonService;
/**
* Les développeurs peuvent étendre MTCommonService pour prolonger la longévité de la connexion longue.
*
* Une implémentation vide suffit.
*/
public class UserService extends MTCommonService {
}
Afficher ce bloc de code dans la fenêtre flottante
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;
/**
* Les développeurs peuvent étendre MTCommonReceiver pour recevoir les callbacks de méthodes du SDK.
*
* Tous les callbacks sont dans le thread principal.
*/
public class UserReceiver extends MTCommonReceiver {
private static final String TAG = "UserReceiver";
/**
* Callback pour l'état de l'interrupteur de notification de l'application.
*
* @param context Non nul
* @param enable État de l'interrupteur de notification, true pour activé, false pour désactivé
*/
@Override
public void onNotificationStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onNotificationStatus:" + enable);
Toast.makeText(context.getApplicationContext(), "onNotificationStatus " + enable, Toast.LENGTH_SHORT).show();
ExampleGlobal.isNotificationEnable = enable;
if (StatusObserver.getInstance().getListener() != null) {
StatusObserver.getInstance().getListener().onNotificationStatus(enable);
}
}
/**
* Callback de l'état de la connexion longue.
*
* @param context Non nul
* @param enable Si la connexion est établie
*/
@Override
public void onConnectStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onConnectState:" + enable);
Toast.makeText(context.getApplicationContext(), "onConnectStatus " + enable, Toast.LENGTH_SHORT).show();
ExampleGlobal.isConnectEnable = enable;
if (StatusObserver.getInstance().getListener() != null) {
StatusObserver.getInstance().getListener().onConnectStatus(enable);
}
// Obtenir le registrationId lorsque la connexion longue est établie
if (enable) {
String registrationId = MTCorePrivatesApi.getRegistrationId(context);
ExampleLogger.i(TAG, "registrationId:" + registrationId);
}
}
/**
* Callback lors de l'arrivée d'un message de notification.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationArrived(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationArrived:" + notificationMessage.toString());
}
/**
* Callback pour les messages de notification non affichés au premier plan.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationUnShow(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationUnShow:" + notificationMessage.toString());
}
/**
* Callback lors du clic sur un message de notification.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationClicked(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationClicked:" + notificationMessage.toString());
}
/**
* Callback lors de la suppression d'un message de notification.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationDeleted(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationDeleted:" + notificationMessage.toString());
}
/**
* Callback pour les messages personnalisés.
*
* @param context Non nul
* @param customMessage Message personnalisé
*/
@Override
public void onCustomMessage(Context context, CustomMessage customMessage) {
ExampleLogger.i(TAG, "onCustomMessage:" + customMessage.toString());
}
/**
* Callback pour le message de token du fournisseur.
*
* @param context Non nul
* @param platformTokenMessage Message de token du fournisseur
*/
@Override
public void onPlatformToken(Context context, PlatformTokenMessage platformTokenMessage) {
ExampleLogger.i(TAG, "onPlatformToken:" + platformTokenMessage.toString());
}
}
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;
/**
* Les développeurs peuvent étendre MTCommonReceiver pour recevoir les callbacks de méthodes du SDK.
*
* Tous les callbacks sont dans le thread principal.
*/
public class UserReceiver extends MTCommonReceiver {
private static final String TAG = "UserReceiver";
/**
* Callback pour l'état de l'interrupteur de notification de l'application.
*
* @param context Non nul
* @param enable État de l'interrupteur de notification, true pour activé, false pour désactivé
*/
@Override
public void onNotificationStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onNotificationStatus:" + enable);
Toast.makeText(context.getApplicationContext(), "onNotificationStatus " + enable, Toast.LENGTH_SHORT).show();
ExampleGlobal.isNotificationEnable = enable;
if (StatusObserver.getInstance().getListener() != null) {
StatusObserver.getInstance().getListener().onNotificationStatus(enable);
}
}
/**
* Callback de l'état de la connexion longue.
*
* @param context Non nul
* @param enable Si la connexion est établie
*/
@Override
public void onConnectStatus(Context context, boolean enable) {
ExampleLogger.i(TAG, "onConnectState:" + enable);
Toast.makeText(context.getApplicationContext(), "onConnectStatus " + enable, Toast.LENGTH_SHORT).show();
ExampleGlobal.isConnectEnable = enable;
if (StatusObserver.getInstance().getListener() != null) {
StatusObserver.getInstance().getListener().onConnectStatus(enable);
}
// Obtenir le registrationId lorsque la connexion longue est établie
if (enable) {
String registrationId = MTCorePrivatesApi.getRegistrationId(context);
ExampleLogger.i(TAG, "registrationId:" + registrationId);
}
}
/**
* Callback lors de l'arrivée d'un message de notification.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationArrived(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationArrived:" + notificationMessage.toString());
}
/**
* Callback pour les messages de notification non affichés au premier plan.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationUnShow(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationUnShow:" + notificationMessage.toString());
}
/**
* Callback lors du clic sur un message de notification.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationClicked(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationClicked:" + notificationMessage.toString());
}
/**
* Callback lors de la suppression d'un message de notification.
*
* @param context Non nul
* @param notificationMessage Message de notification
*/
@Override
public void onNotificationDeleted(Context context, NotificationMessage notificationMessage) {
ExampleLogger.i(TAG, "onNotificationDeleted:" + notificationMessage.toString());
}
/**
* Callback pour les messages personnalisés.
*
* @param context Non nul
* @param customMessage Message personnalisé
*/
@Override
public void onCustomMessage(Context context, CustomMessage customMessage) {
ExampleLogger.i(TAG, "onCustomMessage:" + customMessage.toString());
}
/**
* Callback pour le message de token du fournisseur.
*
* @param context Non nul
* @param platformTokenMessage Message de token du fournisseur
*/
@Override
public void onPlatformToken(Context context, PlatformTokenMessage platformTokenMessage) {
ExampleLogger.i(TAG, "onPlatformToken:" + platformTokenMessage.toString());
}
}
Afficher ce bloc de code dans la fenêtre flottante
4. Configurer 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">
<!-- Obligatoire : permission Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optionnel : vibration pour les notifications -->
<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"> <!-- Si vous utilisez des requêtes HTTP, autorisez HTTP -->
.....................................................................................................
<!-- En raison de la fonctionnalité de connexion longue de cette classe, l'optimisation d'économie d'énergie du fabricant peut tuer directement le service avec un nom de package contenant "Engagelab". -->
<!-- Par conséquent, les développeurs doivent étendre com.engagelab.app.component.MTCommonService pour améliorer le taux de survie de la connexion longue et augmenter le taux d'arrivée des messages. -->
<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>
<!-- Utilisé pour recevoir les callbacks métier EngageLab, incluant état de la connexion longue/interrupteur de notification/arrivée de message de notification/clic sur message de notification/suppression de message de notification/message personnalisé/callback de token fournisseur -->
<!-- Pas besoin de configurer des sous-processus ; ce callback est dans le processus principal pour faciliter les opérations métier -->
<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">
<!-- Obligatoire : permission Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optionnel : vibration pour les notifications -->
<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"> <!-- Si vous utilisez des requêtes HTTP, autorisez HTTP -->
.....................................................................................................
<!-- En raison de la fonctionnalité de connexion longue de cette classe, l'optimisation d'économie d'énergie du fabricant peut tuer directement le service avec un nom de package contenant "Engagelab". -->
<!-- Par conséquent, les développeurs doivent étendre com.engagelab.app.component.MTCommonService pour améliorer le taux de survie de la connexion longue et augmenter le taux d'arrivée des messages. -->
<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>
<!-- Utilisé pour recevoir les callbacks métier EngageLab, incluant état de la connexion longue/interrupteur de notification/arrivée de message de notification/clic sur message de notification/suppression de message de notification/message personnalisé/callback de token fournisseur -->
<!-- Pas besoin de configurer des sous-processus ; ce callback est dans le processus principal pour faciliter les opérations métier -->
<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>
Afficher ce bloc de code dans la fenêtre flottante
5. Configuration de l'environnement
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;
/**
* Utilisé pour démontrer la configuration du SDK ENGAGELAB.
*/
public class MainApplication extends Application {
private static final String TAG = "MainApplication";
@Override
public void onCreate() {
super.onCreate();
// La configuration doit être effectuée dans application.onCreate, inutile de vérifier les processus, le SDK effectue une vérification interne.
MTCorePrivatesApi.configDebugMode(this, true);
// Pour les versions antérieures au tag : V3.5.4-newportal-20210823-gamma.57, cette méthode doit être appelée par les développeurs frontend ; sinon, il y aura des problèmes de redirection lors du clic sur la notification.
// MTPushPrivatesApi.configOldPushVersion(context.getApplicationContext());
// Initialiser le 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;
/**
* Utilisé pour démontrer la configuration du SDK ENGAGELAB.
*/
public class MainApplication extends Application {
private static final String TAG = "MainApplication";
@Override
public void onCreate() {
super.onCreate();
// La configuration doit être effectuée dans application.onCreate, inutile de vérifier les processus, le SDK effectue une vérification interne.
MTCorePrivatesApi.configDebugMode(this, true);
// Pour les versions antérieures au tag : V3.5.4-newportal-20210823-gamma.57, cette méthode doit être appelée par les développeurs frontend ; sinon, il y aura des problèmes de redirection lors du clic sur la notification.
// MTPushPrivatesApi.configOldPushVersion(context.getApplicationContext());
// Initialiser le push
// MTPushPrivatesApi.init(this);
}
}
Afficher ce bloc de code dans la fenêtre flottante
6. Créer un composant de redirection sur clic de notification
package com.engagelab.app.component;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.engagelab.app.R;
import com.engagelab.app.log.ExampleLogger;
import com.engagelab.privates.push.api.MTPushPrivatesApi;
import com.engagelab.privates.push.api.NotificationMessage;
import com.engagelab.privates.push.constants.MTPushConstants;
/**
* Utilisé pour démontrer le clic sur une notification pour rediriger vers une activité.
*
* Assurez-vous que MTPushPrivatesApi.configOldPushVersion(Context) n'est pas appelé, sinon la redirection sur clic de notification n'ira pas sur cette page.
* <p>
* Inutile d'appeler MTPushPrivatesApi.reportNotificationOpened(Context, String, byte, String) ; le SDK le gère en interne.
*/
public class UserActivity400 extends Activity {
private static final String TAG = "UserActivity400";
private TextView tvMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent);
tvMessage = findViewById(R.id.tv_message);
onIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
onIntent(intent);
}
private void onIntent(Intent intent) {
try {
Toast.makeText(this, TAG, Toast.LENGTH_SHORT).show();
if (intent == null) {
return;
}
// À partir de la version 3.4.0, les objets ne sont plus utilisés ; les données JSON sont utilisées à la place
String notificationMessage = intent.getStringExtra("message_json");
if (notificationMessage == null) {
return;
}
ExampleLogger.d(TAG, "notificationMessage:" + notificationMessage.toString());
tvMessage.setText(notificationMessage.toString());
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
package com.engagelab.app.component;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.engagelab.app.R;
import com.engagelab.app.log.ExampleLogger;
import com.engagelab.privates.push.api.MTPushPrivatesApi;
import com.engagelab.privates.push.api.NotificationMessage;
import com.engagelab.privates.push.constants.MTPushConstants;
/**
* Utilisé pour démontrer le clic sur une notification pour rediriger vers une activité.
*
* Assurez-vous que MTPushPrivatesApi.configOldPushVersion(Context) n'est pas appelé, sinon la redirection sur clic de notification n'ira pas sur cette page.
* <p>
* Inutile d'appeler MTPushPrivatesApi.reportNotificationOpened(Context, String, byte, String) ; le SDK le gère en interne.
*/
public class UserActivity400 extends Activity {
private static final String TAG = "UserActivity400";
private TextView tvMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent);
tvMessage = findViewById(R.id.tv_message);
onIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
onIntent(intent);
}
private void onIntent(Intent intent) {
try {
Toast.makeText(this, TAG, Toast.LENGTH_SHORT).show();
if (intent == null) {
return;
}
// À partir de la version 3.4.0, les objets ne sont plus utilisés ; les données JSON sont utilisées à la place
String notificationMessage = intent.getStringExtra("message_json");
if (notificationMessage == null) {
return;
}
ExampleLogger.d(TAG, "notificationMessage:" + notificationMessage.toString());
tvMessage.setText(notificationMessage.toString());
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
Afficher ce bloc de code dans la fenêtre flottante
7. Configurer l'AndroidManifest.xml pour la redirection sur clic
<?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">
<!-- Obligatoire : permission Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optionnel : vibration pour les notifications -->
<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"> <!-- Si vous utilisez des requêtes HTTP, autorisez HTTP -->
..............................................................
<!-- Utilisé pour démontrer la redirection sur clic de notification -->
<activity
android:name="com.engagelab.app.component.UserActivity400"
android:exported="false"
android:launchMode="singleTask" />
<!-- Utilisé pour démontrer la redirection sur clic de notification avec deep links -->
<!-- <activity-->
<!-- android:name="com.engagelab.app.component.UserActivity400"-->
<!-- android:exported="false" >-->
<!-- <intent-filter>-->
<!-- <data android:scheme="YourScheme"/>-->
<!-- <data android:host="YourHost"/>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<!-- Vérification de transfert local en liste blanche : À partir de MTPush 4.2.3, après configuration de ENGAGELAB_PRIVATES_TRANSFER, le SDK effectuera une vérification locale. Si la vérification locale est activée, veuillez configurer ici l'Activity cible à atteindre. S'il y a plusieurs Activities cibles, séparez-les par /. -->
<meta-data
android:name="ENGAGELAB_PRIVATES_TRANSFER"
android:value="com.engagelab.app.component.UserActivity400" />
<!-- Nécessaire pour le push Google : à retirer si le canal Google n'est pas nécessaire -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/mtpush_notification_icon" />
<!-- Nécessaire pour le push Huawei : à retirer si le canal Huawei n'est pas nécessaire -->
<meta-data
android:name="com.huawei.messaging.default_notification_icon"
android:resource="@drawable/mtpush_notification_icon" />
</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">
<!-- Obligatoire : permission Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Optionnel : vibration pour les notifications -->
<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"> <!-- Si vous utilisez des requêtes HTTP, autorisez HTTP -->
..............................................................
<!-- Utilisé pour démontrer la redirection sur clic de notification -->
<activity
android:name="com.engagelab.app.component.UserActivity400"
android:exported="false"
android:launchMode="singleTask" />
<!-- Utilisé pour démontrer la redirection sur clic de notification avec deep links -->
<!-- <activity-->
<!-- android:name="com.engagelab.app.component.UserActivity400"-->
<!-- android:exported="false" >-->
<!-- <intent-filter>-->
<!-- <data android:scheme="YourScheme"/>-->
<!-- <data android:host="YourHost"/>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<!-- Vérification de transfert local en liste blanche : À partir de MTPush 4.2.3, après configuration de ENGAGELAB_PRIVATES_TRANSFER, le SDK effectuera une vérification locale. Si la vérification locale est activée, veuillez configurer ici l'Activity cible à atteindre. S'il y a plusieurs Activities cibles, séparez-les par /. -->
<meta-data
android:name="ENGAGELAB_PRIVATES_TRANSFER"
android:value="com.engagelab.app.component.UserActivity400" />
<!-- Nécessaire pour le push Google : à retirer si le canal Google n'est pas nécessaire -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/mtpush_notification_icon" />
<!-- Nécessaire pour le push Huawei : à retirer si le canal Huawei n'est pas nécessaire -->
<meta-data
android:name="com.huawei.messaging.default_notification_icon"
android:resource="@drawable/mtpush_notification_icon" />
</application>
</manifest>
Afficher ce bloc de code dans la fenêtre flottante

