MTPush-API
MTCorePrivatesApi
- Se utiliza principalmente para la configuración de información.
- Todos los métodos deben llamarse en el proceso principal. No se debe evaluar si el proceso los ubicará en el proceso secundario antes de llamar al método; de lo contrario, se producirá un error en la llamada.
configAppKey
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
*Configure the application key without using the configuration in AndroidManifest.xml
*
*You need to call in the Application.onCreate() method
*Please call before [init](#init)
*
*@ param context is not empty
*@ param appKey is not empty
*/
Public static void configAppKey (Context context, String appKey)
El ejemplo de código es el siguiente Java:
MTCorePrivatesApi.configAppKey(this, "your appkey");
Kotlin:
MTCorePrivatesApi.configAppKey(this, "your appkey")
configAppChannel
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
* Configure the application channel, not using the configuration in AndroidManifest.xml
* Needs to be called in the Application.onCreate() method
* Needs to be used before init, and must be used within Application.onCreate
*
* @param context Not empty
* @param appChannel Not empty
*/
public static void configAppChannel(Context context, String appChannel)
Ejemplo de código:
Java:
MTCorePrivatesApi.configAppChannel(this,"your_appChannel");
Kotlin:
MTCorePrivatesApi.configAppChannel(this, "your_appChannel")
configAppSiteName
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
*Configure the data center site name without using the configuration in AndroidManifest.xml
*The currently available nodes are Singapore, USA_Virginia, DEU_Frankfurt, and HongKong.
*You need to call in the Application.onCreate() method
*Please call before [init](#init)
*
*@ param context is not empty
*@ param appSiteName is not empty
*/
Public static void configAppSiteName (Context context, String appSiteName)
El ejemplo de código es el siguiente Java:
MTCorePrivatesApi.configAppSiteName(this, "Your Platform Data Center Site Name");
Kotlin:
MTCorePrivatesApi.configAppSiteName(this, "Your Platform Data Center Site Name")
configHeartbeatInterval">configHeartbeatInterval
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
* Set the heartbeat interval
*
* Need to be called in the Application.onCreate() method
*
* @param context is not empty
* @param heartbeatInterval The unit of time is milliseconds, must be greater than 0, the default value is 4 minutes and 50 seconds\
*/
public static void configHeartbeatInterval(Context context, long heartbeatInterval)
El ejemplo de código es el siguiente
- La demo establece el intervalo de heartbeat en 3 minutos
Java:
MTCorePrivatesApi.configHeartbeatInterval(this,3*60*1000);
Kotlin:
MTCorePrivatesApi.configHeartbeatInterval(this, 3 * 60 * 1000)
configConnectRetryCount">configConnectRetryCount
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
* Set the number of long connection retries
*
* Need to be called in the Application.onCreate() method
*
* @param context is not empty
* @param connectRetryCount The number of retries, the default value is 3, at least 3 times
*/
public static void configConnectRetryCount(Context context, int connectRetryCount)
El ejemplo de código es el siguiente
- La demo establece el número de reconexiones en 10
Java:
MTCorePrivatesApi.configConnectRetryCount(this,10);
Kotlin:
MTCorePrivatesApi.configConnectRetryCount(this, 10)
setTcpSSl">setTcpSSl
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
* Set whether the long connection is encrypted, the default is not encrypted
*
* Need to be called in the Application.onCreate() method
*
* @param isSSL true encryption, false no encryption
*/
public static void setTcpSSl(boolean isSSL)
El ejemplo de código es el siguiente
- La demo configura el cifrado
Java:
MTCorePrivatesApi.setTcpSSl(true);
Kotlin:
MTCorePrivatesApi.setTcpSSl(context, true)
configDebugMode
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
- Formato de registro de EngageLab; buscar "ENGAGELAB-PRIVATES"
- EngageLab imprimirá registros en el proceso principal y en el proceso secundario, respectivamente
/**
* Set whether to debug mode, debug mode will print more detailed logs
*
* Need to be called in the Application.onCreate() method
*
* @param context is not empty
* @param enable Whether to debug mode, true is debug mode, false is not
*/
public static void configDebugMode(Context context, boolean enable)
El ejemplo de código es el siguiente
- El SDK funciona en dos procesos: el proceso principal y el proceso secundario. El nombre del proceso secundario es el nombre del atributo process del servicio de la subclase de MTCommonService.
- La etiqueta (tag) de registro del SDK es "ENGAGELAB-PRIVATES".
- Los registros de las operaciones relacionadas con udp/tcp/http se encuentran todos en el proceso secundario.
- Por lo tanto, si no se puede recibir el push, se recomienda habilitar primero el modo de depuración y, a continuación, obtener en el proceso secundario el registro con la etiqueta "ENGAGELAB-PRIVATES" y proporcionarlo al soporte técnico para su análisis.
Java:
// It is recommended to set it to true when the application is not online, which is convenient for integration
MTCorePrivatesApi.configDebugMode(context.getApplicationContext(), true);
// It is recommended to set it to false after the application is launched
MTCorePrivatesApi.configDebugMode(context.getApplicationContext(), false);
Kotlin:
// It is recommended to set it to true when the application is not online, which is convenient for integration
MTCorePrivatesApi.configDebugMode(context.applicationContext, true)
// It is recommended to set it to false after the application is launched
MTCorePrivatesApi.configDebugMode(context.applicationContext, false)
configSM4
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
/**
* Configurar el uso del cifrado nacional (SM4).
*
* @param context no debe estar vacío
*/
public static void configSM4(Context context)
El ejemplo de código es el siguiente
Java:
// Activar el cifrado nacional; si no se llama, se utiliza el método de cifrado predeterminado
MTCorePrivatesApi.configSM4(context.getApplicationContext());
Kotlin:
// Activar el cifrado nacional; si no se llama, se utiliza el método de cifrado predeterminado
MTCorePrivatesApi.configSM4(context.applicationContext)
getUserId">getUserId
Cuando el valor devuelto está vacío, se debe comprobar si el entorno está configurado y si se ha llamado a la inicialización.
Si se confirma que la configuración es correcta, puede que todavía se esté en el proceso de conexión; se podrá obtener cuando onConnectStatus devuelva true.
/**
* Get the userId of the current device, which is the unique identifier of EngageLab, which can be used to push
*
* @param context is not empty
* @return userId
*/
public static String getUserId(Context context)
El ejemplo de código es el siguiente
Java:
String userId = MTCorePrivatesApi.getUserId(context);
Kotlin:
val userId = MTCorePrivatesApi.getUserId(context)
getRegistrationId">getRegistrationId
/**
* Get the registrationId of the current device, the unique identifier of EngageLab, which can be used to push
*
* @param context is not empty
* @return registrationId
*/
public static String getRegistrationId(Context context)
El ejemplo de código es el siguiente
Java:
String registrationId = MTCorePrivatesApi.getRegistrationId(context);
Kotlin:
val registrationId = MTCorePrivatesApi.getRegistrationId(context)
setEnableResetOnDeviceChange
- Se debe llamar en el método Application.onCreate().
- Se debe llamar antes de init
- El valor predeterminado es false (desactivado)
/**
* Configurar la función de migración de dispositivos.
* Si se activa, cuando cambie el modelo del dispositivo, se borrarán el ID de registro local y la información UID y se volverá a registrar.
* El valor predeterminado es false.
*
* @param context no debe estar vacío
* @param enable true = activar migración de dispositivos, false = desactivar
*/
public static void setEnableResetOnDeviceChange(Context context, boolean enable)
El ejemplo de código es el siguiente
- Cuando cambie el modelo del dispositivo (p. ej. flashear el dispositivo, cambiar de dispositivo, etc.), la información de registro en caché local se borrará automáticamente.
Java:
// Activar la función de migración de dispositivos
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, true);
// Desactivar la función de migración de dispositivos (estado predeterminado)
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, false);
Kotlin:
// Activar la función de migración de dispositivos
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, true)
// Desactivar la función de migración de dispositivos (estado predeterminado)
MTCorePrivatesApi.setEnableResetOnDeviceChange(this, false)
MTPushPrivatesApi
- Se utiliza principalmente para la funcionalidad de push.
- Todos los métodos deben llamarse en el proceso principal; no se debe intentar determinar si el proceso lo ubicará en el proceso secundario antes de llamar al método; de lo contrario, se producirá un error en la llamada.
configUserLanguage
/**
* Configurar el idioma de las notificaciones push; usar después de MTPushPrivatesApi.init
*
* @param context No debe estar vacío
* @param pushLanguage Cuando es cadena vacía, restaura el uso del idioma del dispositivo
*/
public static void configUserLanguage(Context context, String pushLanguage)
El ejemplo de código es el siguiente:
Java:
MTPushPrivatesApi.configUserLanguage(context,"zh-Hans");
Kotlin:
MTPushPrivatesApi.configUserLanguage(context, "zh-Hans")
Para los códigos de idioma admitidos, consulte Push API
setEnablePushTextToSpeech
/**
* Configuración de lectura en voz alta de notificaciones push; requiere importar el paquete de voz (mt-sdk-sound-x.x.x.aar)
*
* @param context no debe estar vacío
* @param enable true = activar, false = desactivar, predeterminado false
*/
public static void setEnablePushTextToSpeech(Context context, boolean enable)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.setEnablePushTextToSpeech(context, true);
Kotlin:
MTPushPrivatesApi.setEnablePushTextToSpeech(context, true)
init
- Se recomienda llamar en el método Application.onCreate().
/**
* Inicialización de MTPush
*
* Se recomienda llamar en el método Application.onCreate().
*
* @param context no debe estar vacío; use el objeto applicationContext
*/
public static void init(Context context)
El ejemplo de código es el siguiente
Java:
public class ExampleApplication extends Application {
@Override
public void onCreate() {
// Activar modo depuración
MTCorePrivatesApi.configDebugMode(context.getApplicationContext(), true);
// Inicialización
MTPushPrivatesApi.init(context.getApplicationContext());
}
}
Kotlin:
class ExampleApplication : Application() {
override fun onCreate() {
super.onCreate()
// Activar modo depuración
MTCorePrivatesApi.configDebugMode(applicationContext, true)
// Inicialización
MTPushPrivatesApi.init(applicationContext)
}
}
setCollectControl
- Configuración del control de recopilación de datos
- Se recomienda llamar en Application.onCreate(), antes de init.
/**
* Configurar el control de recopilación de datos.
* Se utiliza para controlar si se recopilan ciertos datos del dispositivo.
*
* @param control Objeto de control de recopilación, no nulo
*/
public static void setCollectControl(MTPushCollectControl control)
El ejemplo de código es el siguiente
Java:
public class ExampleApplication extends Application {
@Override
public void onCreate() {
// Configurar control de recopilación de datos
MTPushCollectControl collectControl = new MTPushCollectControl();
collectControl.setGaid(true); // Activar recopilación GAID, false para desactivar. Activado por defecto.
MTPushPrivatesApi.setCollectControl(collectControl);
// Inicialización
MTPushPrivatesApi.init(context.getApplicationContext());
}
}
Kotlin:
class ExampleApplication : Application() {
override fun onCreate() {
super.onCreate()
// Configurar control de recopilación de datos
val collectControl = MTPushCollectControl()
collectControl.setGaid(true) // Activar recopilación GAID, false para desactivar. Activado por defecto.
MTPushPrivatesApi.setCollectControl(collectControl)
// Inicialización
MTPushPrivatesApi.init(applicationContext)
}
}
goToAppNotificationSettings
- Tras iniciar el SDK, puede decidir si debe llamar a esta interfaz según el resultado de onNotificationStatus.
/**
* Ir a la página de configuración del interruptor de notificaciones
*
* @param context no debe estar vacío
*/
public static void goToAppNotificationSettings(Context context)
El ejemplo de código es el siguiente
Java:
// Ir a la página de configuración del interruptor de notificaciones; el cliente debe activar manualmente el interruptor
MTPushPrivatesApi.goToAppNotificationSettings(this);
// Tras heredar MTCommonReceiver, reescribir onNotificationStatus para obtener el estado del interruptor; si enable es true, se ha activado correctamente
@Override
public void onNotificationStatus(Context context, boolean enable) {
if (enable) {
// El interruptor de notificaciones está activado
}
}
Kotlin:
// Ir a la página de configuración del interruptor de notificaciones; el cliente debe activar manualmente el interruptor
MTPushPrivatesApi.goToAppNotificationSettings(this)
// Tras heredar MTCommonReceiver, reescribir onNotificationStatus para obtener el estado del interruptor; si enable es true, se ha activado correctamente
override fun onNotificationStatus(context: Context, enable: Boolean) {
if (enable) {
// El interruptor de notificaciones está activado
}
}
turnOnPush
- Se utiliza generalmente para activar push tras llamar a turnOffPush.
- Llamar repetidamente solo surtirá efecto una vez; si ya está activado, no volverá a surtir efecto.
- Si no hay problemas con el entorno, onConnectStatus devolverá el resultado.
- Canales admitidos actualmente: Engagelab/Huawei/Xiaomi/Meizu/oppo/vivo
/**
* Activar push y almacenar el estado del interruptor como true; el predeterminado es true
*
* @param context no puede estar vacío
*/
public static void turnOnPush(Context context)
El ejemplo de código es el siguiente
Java:
// Activar push (está activado por defecto)
MTPushPrivatesApi.turnOnPush(context);
// Tras heredar MTCommonReceiver, reescribir onConnectStatus para obtener el estado de la conexión; si enable es true, se ha activado correctamente
@Override
public void onConnectStatus(Context context, boolean enable) {
if (enable) {
// Push activado correctamente
}
}
Kotlin:
// Activar push (está activado por defecto)
MTPushPrivatesApi.turnOnPush(context)
// Tras heredar MTCommonReceiver, reescribir onConnectStatus para obtener el estado de la conexión; si enable es true, se ha activado correctamente
override fun onConnectStatus(context: Context, enable: Boolean) {
if (enable) {
// Push activado correctamente
}
}
turnOffPush
- Se utiliza generalmente para desactivar push.
- Tras desactivar push, llamar a init no volverá a activarlo.
- Llamar repetidamente solo surtirá efecto una vez.
- Canales admitidos actualmente: Engagelab/Huawei/Xiaomi/Meizu/oppo/vivo
/**
* Desactivar push y almacenar el estado del interruptor como false; el predeterminado es true
*
* @param context no puede estar vacío
*/
public static void turnOffPush(Context context)
El ejemplo de código es el siguiente
Java:
// Desactivar push; hay que llamar de nuevo a turnOnPush para activarlo
MTPushPrivatesApi.turnOffPush(context);
// Tras heredar MTCommonReceiver, reescribir onConnectStatus; si enable es false, se ha desactivado correctamente
@Override
public void onConnectStatus(Context context, boolean enable) {
if (!enable) {
// Push desactivado correctamente
}
}
Kotlin:
// Desactivar push; hay que llamar de nuevo a turnOnPush para activarlo
MTPushPrivatesApi.turnOffPush(context)
// Tras heredar MTCommonReceiver, reescribir onConnectStatus; si enable es false, se ha desactivado correctamente
override fun onConnectStatus(context: Context, enable: Boolean) {
if (!enable) {
// Push desactivado correctamente
}
}
addTag
- Debe llamar primero a init; de lo contrario, la llamada no será válida
- Si no hay problema con el entorno, onTagMessage devolverá el resultado
/**
* Añadir el tag especificado (lógica acumulativa; el tag configurado anteriormente se mantiene)
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario, se devuelve con el resultado, para identificar la unicidad de la operación
* @param tags array de tags; longitud de cada nombre limitada a 40 bytes; máximo 1000 tags; longitud total de una operación no puede superar 5000 bytes
*/
public static void addTag(Context context, int sequence, String... tags)
El ejemplo de código es el siguiente
Java:
// Definir una constante que representa la operación de añadir el tag especificado
private static final int SEQUENCE_TAG_ADD = 1;
// Añadir tags: "china","guangdong","shenzhen"
MTPushPrivatesApi.addTag(context, SEQUENCE_TAG_ADD, "china", "guangdong", "shenzhen");
// Tras heredar MTCommonReceiver, reescribir onTagMessage para obtener el callback de la operación de tag
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_ADD) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_ADD = 1
}
MTPushPrivatesApi.addTag(context, SEQUENCE_TAG_ADD, "china", "guangdong", "shenzhen")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_ADD) {
val tags = tagMessage.tags
}
}
deleteTag
- Debe llamar primero a init; de lo contrario, la llamada no será válida
- Si no hay problema con el entorno, onTagMessage devolverá el resultado
/**
* Eliminar el tag especificado
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
* @param tags array de tags
*/
public static void deleteTag(Context context, int sequence, String... tags)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_TAG_DELETE = 2;
MTPushPrivatesApi.deleteTag(context, SEQUENCE_TAG_DELETE, "china", "guangdong", "shenzhen");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_DELETE) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_DELETE = 2
}
MTPushPrivatesApi.deleteTag(context, SEQUENCE_TAG_DELETE, "china", "guangdong", "shenzhen")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_DELETE) {
val tags = tagMessage.tags
}
}
updateTag
- Debe llamar primero a init
- Si no hay problema con el entorno, onTagMessage devolverá el resultado
/**
* Actualizar el tag especificado (lógica de sobrescritura; el tag añadido anteriormente se borrará)
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
* @param tags array de tags
*/
public static void updateTag(Context context, int sequence, String... tags)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_TAG_UPDATE = 3;
MTPushPrivatesApi.updateTag(context, SEQUENCE_TAG_UPDATE, "beijing", "shanghai", "guangzhou", "shenzhen");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_UPDATE) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_UPDATE = 3
}
MTPushPrivatesApi.updateTag(context, SEQUENCE_TAG_UPDATE, "beijing", "shanghai", "guangzhou", "shenzhen")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_UPDATE) {
val tags = tagMessage.tags
}
}
queryTag
- Debe llamar primero a init
- Si no hay problema con el entorno, onTagMessage devolverá el resultado
/**
* Consultar el tag especificado
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
* @param tag tag; longitud del nombre limitada a 40 bytes
*/
public static void queryTag(Context context, int sequence, String tag)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_TAG_QUERY = 4;
MTPushPrivatesApi.queryTag(context, SEQUENCE_TAG_QUERY, "china");
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_QUERY) {
String tag = tagMessage.getQueryTag();
boolean valid = tagMessage.isQueryTagValid();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_QUERY = 4
}
MTPushPrivatesApi.queryTag(context, SEQUENCE_TAG_QUERY, "china")
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_QUERY) {
val tag = tagMessage.queryTag
val valid = tagMessage.isQueryTagValid
}
}
deleteAllTag
- Debe llamar primero a init
- Si no hay problema con el entorno, onTagMessage devolverá el resultado
/**
* Eliminar todos los tags
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
*/
public static void deleteAllTag(Context context, int sequence, String... tags)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_TAG_DELETE_ALL = 5;
MTPushPrivatesApi.deleteAllTag(context, SEQUENCE_TAG_DELETE_ALL);
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_DELETE_ALL) {
// Eliminados todos los tags correctamente
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_DELETE_ALL = 5
}
MTPushPrivatesApi.deleteAllTag(context, SEQUENCE_TAG_DELETE_ALL)
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_DELETE_ALL) {
// Eliminados todos los tags correctamente
}
}
queryAllTag
- Debe llamar primero a init
- Si no hay problema con el entorno, onTagMessage devolverá el resultado
/**
* Consultar todos los tags
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
*/
public static void queryAllTag(Context context, int sequence, String... tags)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_TAG_QUERY_ALL = 6;
MTPushPrivatesApi.queryAllTag(context, SEQUENCE_TAG_QUERY_ALL);
@Override
public void onTagMessage(Context context, TagMessage tagMessage) {
if (tagMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (tagMessage.getSequence() == SEQUENCE_TAG_QUERY_ALL) {
String[] tags = tagMessage.getTags();
}
}
Kotlin:
companion object {
private const val SEQUENCE_TAG_QUERY_ALL = 6
}
MTPushPrivatesApi.queryAllTag(context, SEQUENCE_TAG_QUERY_ALL)
override fun onTagMessage(context: Context, tagMessage: TagMessage) {
if (tagMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (tagMessage.sequence == SEQUENCE_TAG_QUERY_ALL) {
val tags = tagMessage.tags
}
}
setAlias
- Debe llamar primero a init
- Si no hay problema con el entorno, onAliasMessage devolverá el resultado
/**
* Establecer alias
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
* @param alias Composición válida: letras (sensible a mayúsculas), números, guión bajo, caracteres especiales @!#$&*+=.|. Longitud limitada a 40 bytes (UTF-8)
*/
public static void setAlias(Context context, int sequence, String alias)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_ALIAS_SET = 7;
MTPushPrivatesApi.setAlias(context, SEQUENCE_ALIAS_SET, "young");
@Override
public void onAliasMessage(Context context, AliasMessage aliasMessage) {
if (aliasMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (aliasMessage.getSequence() == SEQUENCE_ALIAS_SET) {
String alias = aliasMessage.getAlias();
}
}
Kotlin:
companion object {
private const val SEQUENCE_ALIAS_SET = 7
}
MTPushPrivatesApi.setAlias(context, SEQUENCE_ALIAS_SET, "young")
override fun onAliasMessage(context: Context, aliasMessage: AliasMessage) {
if (aliasMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (aliasMessage.sequence == SEQUENCE_ALIAS_SET) {
val alias = aliasMessage.alias
}
}
getAlias
- Debe llamar primero a init
- Si no hay problema con el entorno, onAliasMessage devolverá el resultado
/**
* Obtener alias
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
*/
public static void getAlias(Context context, int sequence)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_ALIAS_GET = 8;
MTPushPrivatesApi.getAlias(context, SEQUENCE_ALIAS_GET);
@Override
public void onAliasMessage(Context context, AliasMessage aliasMessage) {
if (aliasMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (aliasMessage.getSequence() == SEQUENCE_ALIAS_GET) {
String alias = aliasMessage.getAlias();
}
}
Kotlin:
companion object {
private const val SEQUENCE_ALIAS_GET = 8
}
MTPushPrivatesApi.getAlias(context, SEQUENCE_ALIAS_GET)
override fun onAliasMessage(context: Context, aliasMessage: AliasMessage) {
if (aliasMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (aliasMessage.sequence == SEQUENCE_ALIAS_GET) {
val alias = aliasMessage.alias
}
}
clearAlias
- Debe llamar primero a init
- Si no hay problema con el entorno, onAliasMessage devolverá el resultado
/**
* Borrar alias
*
* @param context no puede estar vacío
* @param sequence Número de secuencia de operación definido por el usuario
*/
public static void clearAlias(Context context, int sequence)
El ejemplo de código es el siguiente
Java:
private static final int SEQUENCE_ALIAS_CLEAR = 9;
MTPushPrivatesApi.clearAlias(context, SEQUENCE_ALIAS_CLEAR);
@Override
public void onAliasMessage(Context context, AliasMessage aliasMessage) {
if (aliasMessage.getCode() != MTPushPrivatesApi.Code.SUCCESS) {
return;
}
if (aliasMessage.getSequence() == SEQUENCE_ALIAS_CLEAR) {
// Alias borrado correctamente
}
}
Kotlin:
companion object {
private const val SEQUENCE_ALIAS_CLEAR = 9
}
MTPushPrivatesApi.clearAlias(context, SEQUENCE_ALIAS_CLEAR)
override fun onAliasMessage(context: Context, aliasMessage: AliasMessage) {
if (aliasMessage.code != MTPushPrivatesApi.Code.SUCCESS) {
return
}
if (aliasMessage.sequence == SEQUENCE_ALIAS_CLEAR) {
// Alias borrado correctamente
}
}
setNotificationShowTime
- Debe llamar primero a init
- Canales admitidos: canal Engagelab / canal google cuando la app está en primer plano
/**
* Establecer el horario de visualización de notificaciones; por defecto se muestran en cualquier momento
*
* @param context no debe estar vacío
* @param beginHour Hora de inicio (formato 24h, 0-23) para permitir mostrar notificaciones
* @param endHour Hora de fin (formato 24h, 0-23); beginHour no puede ser mayor o igual que endHour
* @param weekDays Array de días de la semana (1-7); array vacío = no mostrar en ningún momento
*/
public static void setNotificationShowTime(Context context, int beginHour, int endHour, int... weekDays)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.setNotificationShowTime(context, 9, 21, 1, 3, 5, 7);
Kotlin:
MTPushPrivatesApi.setNotificationShowTime(context, 9, 21, 1, 3, 5, 7)
resetNotificationShowTime
- Debe llamar primero a init
/**
* Restablecer el horario de visualización de notificaciones; por defecto en cualquier momento
*
* @param context no debe estar vacío
*/
public static void resetNotificationShowTime(Context context)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.resetNotificationShowTime(context);
Kotlin:
MTPushPrivatesApi.resetNotificationShowTime(context)
setNotificationSilenceTime
- Debe llamar primero a init
/**
* Establecer el horario de silencio de notificaciones; por defecto sin silencio
*
* @param context no debe estar vacío
* @param beginHour, beginMinute, endHour, endMinute Horario de silencio (formato 24h)
*/
public static void setNotificationSilenceTime(Context context, int beginHour, int beginMinute, int endHour, int endMinute)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.setNotificationSilenceTime(context, 21, 30, 9, 30);
Kotlin:
MTPushPrivatesApi.setNotificationSilenceTime(context, 21, 30, 9, 30)
resetNotificationSilenceTime
- Debe llamar primero a init
/**
* Restablecer el horario de silencio de notificaciones
*
* @param context no debe estar vacío
*/
public static void resetNotificationSilenceTime(Context context)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.resetNotificationSilenceTime(context);
Kotlin:
MTPushPrivatesApi.resetNotificationSilenceTime(context)
setNotificationLayout
- Debe llamar primero a init
- Canal admitido: Engagelab
/**
* Establecer layout de notificación personalizado; por defecto se usa el del sistema
*
* @param context no debe estar vacío
* @param builderId id de construcción
* @param notificationLayout Objeto del layout personalizado, no vacío
*/
public static void setNotificationLayout(Context context, int builderId, NotificationLayout notificationLayout)
El ejemplo de código es el siguiente
Java:
private static final int BUILDER_ID = 11;
NotificationLayout notificationLayout = new NotificationLayout()
.setLayoutId(R.layout.custom_notification_layout)
.setIconViewId(R.id.iv_notification_icon)
.setIconResourceId(R.drawable.mtpush_notification_icon)
.setTitleViewId(R.id.tv_notification_title)
.setContentViewId(R.id.tv_notification_content)
.setTimeViewId(R.id.tv_notification_time);
MTPushPrivatesApi.setNotificationLayout(this.getApplicationContext(), BUILDER_ID, notificationLayout);
Kotlin:
companion object {
private const val BUILDER_ID = 11
}
val notificationLayout = NotificationLayout()
.setLayoutId(R.layout.custom_notification_layout)
.setIconViewId(R.id.iv_notification_icon)
.setIconResourceId(R.drawable.mtpush_notification_icon)
.setTitleViewId(R.id.tv_notification_title)
.setContentViewId(R.id.tv_notification_content)
.setTimeViewId(R.id.tv_notification_time)
MTPushPrivatesApi.setNotificationLayout(applicationContext, BUILDER_ID, notificationLayout)
resetNotificationLayout
- Debe llamar primero a init
/**
* Restablecer el layout de notificación personalizado; por defecto se usa el del sistema
*
* @param context no debe estar vacío
* @param builderId id del layout personalizado
*/
public static void resetNotificationLayout(Context context, int builderId)
El ejemplo de código es el siguiente
Java:
private static final int BUILDER_ID = 11;
MTPushPrivatesApi.resetNotificationLayout(context, BUILDER_ID);
Kotlin:
companion object {
private const val BUILDER_ID = 11
}
MTPushPrivatesApi.resetNotificationLayout(context, BUILDER_ID)
setNotificationCount
- Debe llamar primero a init
/**
* Establecer el número de notificaciones en la barra de notificaciones; por defecto 5
*
* @param context no debe estar vacío
* @param count Límite de notificaciones; si se supera, se elimina la más antigua. No puede ser <= 0
*/
public static void setNotificationCount(Context context, int count)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.setNotificationCount(context, 50);
Kotlin:
MTPushPrivatesApi.setNotificationCount(context, 50)
resetNotificationCount
- Debe llamar primero a init
/**
* Restablecer el número de notificaciones en la barra; por defecto 5
*
* @param context no debe estar vacío
*/
public static void resetNotificationCount(Context context)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.resetNotificationCount(context);
Kotlin:
MTPushPrivatesApi.resetNotificationCount(context)
setNotificationBadge
- Debe llamar primero a init
- Solo válido para Huawei/Honor
/**
* Establecer el número de insignias de la aplicación; por defecto 0
*
* @param context no debe estar vacío
* @param badge Número de insignias
*/
public static void setNotificationBadge(Context context, int badge)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.setNotificationBadge(context, 1);
Kotlin:
MTPushPrivatesApi.setNotificationBadge(context, 1)
resetNotificationBadge
- Debe llamar primero a init
/**
* Restablecer el número de insignias de la aplicación; por defecto 0
*
* @param context no debe estar vacío
*/
public static void resetNotificationBadge(Context context)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.resetNotificationBadge(context);
Kotlin:
MTPushPrivatesApi.resetNotificationBadge(context)
showNotification
- Debe llamar primero a init
/**
* Mostrar notificación
*
* @param context no debe estar vacío
* @param notificationMessage Objeto de notificación construido, no vacío
*/
public static void showNotification(Context context, NotificationMessage notificationMessage)
El ejemplo de código es el siguiente
Java:
NotificationMessage notificationMessage = new NotificationMessage()
.setMessageId("12345")
.setNotificationId(12345)
.setTitle("custom_notification_title")
.setContent("custom_notification_content");
MTPushPrivatesApi.showNotification(context, notificationMessage);
Kotlin:
val notificationMessage = NotificationMessage()
.setMessageId("12345")
.setNotificationId(12345)
.setTitle("custom_notification_title")
.setContent("custom_notification_content")
MTPushPrivatesApi.showNotification(context, notificationMessage)
clearNotification
- Debe llamar primero a init
/**
* Borrar la notificación con el notifyId especificado
*
* @param context no debe estar vacío
* @param notifyId id de notificación
*/
public static void clearNotification(Context context, int notifyId)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.clearNotification(context, 12345);
Kotlin:
MTPushPrivatesApi.clearNotification(context, 12345)
reportNotificationArrived
- Debe llamar primero a init
- Si no se integra el paquete de fabricante de EngageLab pero se necesita que EngageLab cuente la tasa de entrega, llamar a esta interfaz
/**
* Informar la llegada de la notificación del canal del fabricante (por http/https)
*
* @param context no debe estar vacío
* @param messageId ID de mensaje Engagelab, no vacío
* @param platform fabricante (1:mi, 2:huawei, 3:meizu, 4:oppo, 5:vivo, 7:honor, 8:google)
* @param platformMessageId ID de mensaje del fabricante, puede estar vacío
*/
public static void reportNotificationArrived(Context context, String messageId, byte platform, String platformMessageId)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.reportNotificationArrived(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25");
Kotlin:
MTPushPrivatesApi.reportNotificationArrived(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25")
reportNotificationClicked
- Debe llamar primero a init
- Si no se integra el paquete de fabricante pero se necesita que EngageLab cuente la tasa de clics, llamar a esta interfaz
/**
* Informar el clic en la notificación del canal del fabricante (por http/https)
*
* @param context no debe estar vacío
* @param messageId ID de mensaje Engagelab, no vacío
* @param platform fabricante
* @param platformMessageId ID de mensaje del fabricante, puede estar vacío
*/
public static void reportNotificationClicked(Context context, String messageId, byte platform, String platformMessageId)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.reportNotificationClicked(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25");
Kotlin:
MTPushPrivatesApi.reportNotificationClicked(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25")
reportNotificationDeleted
- Debe llamar primero a init
- Si no se integra el paquete de fabricante pero se necesita que EngageLab cuente la tasa de borrado, llamar a esta interfaz
/**
* Informar el borrado de la notificación del canal del fabricante (por http/https)
*
* @param context no debe estar vacío
* @param messageId ID de mensaje Engagelab, no vacío
* @param platform fabricante
* @param platformMessageId ID de mensaje del fabricante, puede estar vacío
*/
public static void reportNotificationDeleted(Context context, String messageId, byte platform, String platformMessageId)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.reportNotificationDeleted(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25");
Kotlin:
MTPushPrivatesApi.reportNotificationDeleted(context, "12345", MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476RHT25")
uploadPlatformToken
- Debe llamar primero a init
- La subida es por TCP; la conexión larga debe tener éxito, es decir, onConnectStatus debe devolver true antes de llamar
- No integrar el paquete de fabricante de EngageLab, pero se requiere EngageLab para enviar mensajes del fabricante
/**
* Subir el token del fabricante (por TCP)
*
* @param context no debe estar vacío
* @param platform fabricante (1:mi, 2:huawei, 3:meizu, 4:oppo, 5:vivo, 7:honor, 8:google)
* @param token Token devuelto por el fabricante, no vacío
* @param region Versiones internacionales de Xiaomi y Oppo: "GLOBAL"; no internacional: "NULL"
*/
public static void uploadPlatformToken(Context context, byte platform, String token, String region)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.uploadPlatformToken(context, MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476s-afs-afs-afaR-HT25", "NULL");
Kotlin:
MTPushPrivatesApi.uploadPlatformToken(context, MTPushPrivatesApi.PLATFORM_XIAOMI, "MI-6476s-afs-afs-afaR-HT25", "NULL")
clearPlatformToken
- Debe llamar primero a init
- La subida es por TCP; llamar a esta interfaz tras el éxito de la conexión larga (onConnectStatus devuelve true)
- No integrar el paquete de fabricante de EngageLab, pero se requiere EngageLab para enviar mensajes del fabricante
/**
* Borrar el token. Tras llamar a esta interfaz, el token solo se puede informar mediante uploadPlatformToken; el SDK ya no obtendrá ni informará el token de forma activa; se restablece tras un arranque en frío.
* Escuchar mediante el callback onPlatformToken. Cuando el platform del callback es -128, indica que el borrado fue correcto.
*
* Se requiere conexión TCP.
* @param context no debe estar vacío
*/
public static void clearPlatformToken(Context context)
El ejemplo de código es el siguiente
Java:
MTPushPrivatesApi.clearPlatformToken(context);
Kotlin:
MTPushPrivatesApi.clearPlatformToken(context)
reportNotificationOpened
- Se debe llamar primero a init; de lo contrario, la llamada no será válida
- Si no se integra el paquete de fabricante de EngageLab, pero se necesita que EngageLab contabilice la tasa de apertura de notificaciones, se debe llamar a esta interfaz
- Algunos fabricantes (por ejemplo: huawei/oppo/vivo) no disponen de callbacks de llegada y clic de notificación. Tras configurar la Activity a la que salta la notificación al hacer clic, se puede obtener el parámetro para el informe en la Activity de destino. Se recomienda configurar para todos los fabricantes la Activity de salto al hacer clic en la notificación.
- No es necesario para las versiones MTPush 4.0.0 y posteriores
/**
* Informar de la apertura de la notificación del canal del fabricante
*
* Se informa por http/https
*
* @param context no debe estar vacío
* @param messageId ID de mensaje de Engagelab, no vacío
* @param platform fabricante (1:mi, 2:huawei, 3:meizu, 4:oppo, 5:vivo, 7:honor, 8:google)
* @param platformMessageId ID de mensaje del fabricante, puede estar vacío
*/
public static void reportNotificationOpened(Context context, String messageId, byte platform, String platformMessageId)
El ejemplo de código es el siguiente
Java:
Bundle bundle = intent.getExtras();
String platformMessage = "";
// huawei
if (intent.getData() != null) {
platformMessage = intent.getData().toString();
}
// otros fabricantes
if (TextUtils.isEmpty(platformMessage) && intent.getExtras() != null) {
if (bundle.containsKey("JMessageExtra")) {
platformMessage = bundle.getString("JMessageExtra");
} else {
platformMessage = bundle.getString("MTMessageExtra");
}
}
if (TextUtils.isEmpty(platformMessage)) {
return;
}
JSONObject messageJson = new JSONObject(platformMessage);
tvMessage.setText(toLogString(messageJson));
// Parsear
String messageId = messageJson.optString("msg_id");
byte platform = (byte) messageJson.optInt("rom_type");
String title = messageJson.optString("n_title");
String content = messageJson.optString("n_content");
// Informar de la apertura de la Activity al hacer clic en la notificación; se recomienda añadir para todos los fabricantes; solo necesario para MTPush < 4.0.0
MTPushPrivatesApi.reportNotificationOpened(this, messageId, platform, "");
Kotlin:
val bundle = intent.extras
var platformMessage = ""
// huawei
if (intent.data != null) {
platformMessage = intent.data!!.toString()
}
// otros fabricantes
if (TextUtils.isEmpty(platformMessage) && intent.extras != null) {
bundle?.let {
if (it.containsKey("JMessageExtra")) {
platformMessage = it.getString("JMessageExtra", "")
} else {
platformMessage = it.getString("MTMessageExtra", "")
}
}
}
if (TextUtils.isEmpty(platformMessage)) {
return
}
val messageJson = JSONObject(platformMessage)
tvMessage.setText(toLogString(messageJson))
// Parsear
val messageId = messageJson.optString("msg_id")
val platform = messageJson.optInt("rom_type").toByte()
val title = messageJson.optString("n_title")
val content = messageJson.optString("n_content")
// Informar de la apertura de la Activity al hacer clic en la notificación; solo necesario para MTPush < 4.0.0
MTPushPrivatesApi.reportNotificationOpened(this, messageId, platform, "")
onFragmentResume
- Debe llamar primero a init; de lo contrario, la llamada no será válida.
/**
* @param context No nulo
* @param fragmentName Nombre de clase completo del Fragment (this.getClass().getCanonicalName())
*/
public static void onFragmentResume(Context context, String fragmentName)
onFragmentPause
- Debe llamar primero a init; de lo contrario, la llamada no será válida.
/**
* @param context No nulo
* @param fragmentName Nombre de clase completo del Fragment (this.getClass().getCanonicalName())
*/
public static void onFragmentPause(Context context, String fragmentName)
Instrucciones de uso: Dado que existen cuatro formas de añadir un Fragment en Android, cada método requiere un tratamiento distinto del Fragment. A continuación se explican los controles para la visualización en la aplicación del Fragment especificado en función de estos cuatro métodos.
| Método de uso de Fragment | ¿Puede escuchar el ciclo de vida del Fragment? | Método de llamada de la interfaz de página de visualización dinámica de JPush |
|---|---|---|
| Método 1: add/show/hide | No se puede escuchar el ciclo de vida | Llamar a onFragmentResume y onHiddenChanged en el Fragment |
| Método 2: ViewPager | No se puede escuchar el ciclo de vida | Llamar a setUserVisibleHint en el Fragment |
| Método 3: replace | Se puede escuchar el ciclo de vida | Llamar a onResume y onPause en el Fragment |
| Método 4: attach/detach | Se puede escuchar el ciclo de vida | Llamar a onResume y onPause en el Fragment |
Método 1: add/show/hide
1) Llamar a la interfaz de control dinámico en el callback onCreateView del Fragment. @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); return inflater.inflate(R.layout.black_fragment, container, false); } 2) Llamar a la interfaz en el callback onHiddenChanged del Fragment. @Override public void onHiddenChanged(boolean hidden) { String classname = this.getClass().getCanonicalName(); if (!hidden) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.onHiddenChanged(hidden); }1) Llamar a la interfaz de control dinámico en el callback onCreateView del Fragment. @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); return inflater.inflate(R.layout.black_fragment, container, false); } 2) Llamar a la interfaz en el callback onHiddenChanged del Fragment. @Override public void onHiddenChanged(boolean hidden) { String classname = this.getClass().getCanonicalName(); if (!hidden) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.onHiddenChanged(hidden); }Este bloque de código se muestra en una ventana flotanteMétodo ViewPager
1) Llamar a la interfaz en el callback setUserVisibleHint del Fragment. @Override public void setUserVisibleHint(boolean isVisibleToUser) { String classname = this.getClass().getCanonicalName(); if (isVisibleToUser) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.setUserVisibleHint(isVisibleToUser); }1) Llamar a la interfaz en el callback setUserVisibleHint del Fragment. @Override public void setUserVisibleHint(boolean isVisibleToUser) { String classname = this.getClass().getCanonicalName(); if (isVisibleToUser) { MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); } else { MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); } super.setUserVisibleHint(isVisibleToUser); }Este bloque de código se muestra en una ventana flotanteMétodos replace o attach/detach
Llamar a la interfaz en el callback de ciclo de vida del Fragment (onResume/onPause). @Override public void onResume() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); super.onResume(); } @Override public void onPause() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); super.onPause(); }Llamar a la interfaz en el callback de ciclo de vida del Fragment (onResume/onPause). @Override public void onResume() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentResume(MyApplication.gContext, classname); super.onResume(); } @Override public void onPause() { String classname = this.getClass().getCanonicalName(); MTPushPrivatesApi.onFragmentPause(MyApplication.gContext, classname); super.onPause(); }Este bloque de código se muestra en una ventana flotante
MTCommonReceiver
- Se utiliza principalmente para callbacks de métodos
- Todos los callbacks de este clase se ejecutan en el proceso principal
onNotificationStatus
- Cada vez que se inicia el SDK, se devolverá el estado actual del interruptor de notificaciones
- Solo se llama cuando cambia el estado del interruptor de notificaciones
/**
* Callback del estado del interruptor de notificaciones de la aplicación
*
* @param context no debe estar vacío
* @param enable Si el interruptor está activado, true = activado, false = desactivado
*/
@Override
public void onNotificationStatus(Context context, boolean enable)
onConnectStatus
/**
* Si la conexión larga se ha establecido correctamente
*
* Tras la inicialización se establece una conexión larga; este método se invoca cuando la conexión tiene éxito o falla
*
* @param context no debe estar vacío
* @param enable true = éxito; false = fallo
*/
public void onConnectStatus(Context context, boolean enable)
onNotificationArrived
- Los canales Engagelab/Xiaomi/Meizu tienen callback de este método (el canal Google debe estar en primer plano)
- notificationMessage ver NotificationMessage
/**
* Mensaje de notificación entregado
*
* Se invoca cuando se entrega el mensaje de notificación push
*
* @param context no debe estar vacío
* @param notificationMessage mensaje de notificación
*/
public void onNotificationArrived(Context context, NotificationMessage notificationMessage)
onNotificationUnShow
- La notificación no se muestra en primer plano cuando se envía en segundo plano; la app llama a este método cuando está en primer plano.
/**
* Los mensajes de notificación no se muestran en primer plano
*
* @param context no debe estar vacío
* @param notificationMessage mensaje de notificación
*/
@Override
public void onNotificationUnShow(Context context, NotificationMessage notificationMessage)
onNotificationClicked
- notificationMessage ver NotificationMessage
/**
* Clic en mensaje de notificación
*
* Se invoca cuando el usuario hace clic en la notificación push
*
* @param context no debe estar vacío
* @param notificationMessage mensaje de notificación
*/
public void onNotificationClicked(Context context, NotificationMessage notificationMessage)
onNotificationDeleted
- Solo la eliminación de notificaciones del canal Engagelab dispara este callback
- notificationMessage ver NotificationMessage
- No se invoca cuando la aplicación está cerrada
/**
* Eliminación de mensaje de notificación
*
* Se invoca cuando se elimina la notificación push
*
* @param context no debe estar vacío
* @param notificationMessage mensaje de notificación
*/
public void onNotificationDeleted(Context context, NotificationMessage notificationMessage)
onCustomMessage
- Los mensajes personalizados no se muestran en la barra de notificaciones
- customMessage ver CustomMessage
/**
* Entrega de mensaje personalizado
*
* Se invoca cuando se entrega el mensaje personalizado
*
* @param context no debe estar vacío
* @param customMessage mensaje personalizado
*/
public void onCustomMessage(Context context, CustomMessage customMessage)
onTagMessage
- tagMessage ver TagMessage
/**
* Mensaje de operación de tag
*
* @param context no debe estar vacío
* @param tagMessage información de tag
*/
public void onTagMessage(Context context, TagMessage tagMessage)
onAliasMessage
- aliasMessage ver AliasMessage
/**
* Mensaje de operación de alias
*
* @param context objeto ApplicationContext
* @param aliasMessage mensaje de alias
*/
public void onAliasMessage(Context context, AliasMessage aliasMessage)
onPlatformToken
- Callback del token del fabricante
/**
* Mensaje de operación del fabricante
*
* @param context objeto ApplicationContext
* @param platformMessage mensaje de token del fabricante
*/
public void onPlatformToken(Context context, PlatformTokenMessage platformMessage)
onInAppMessageShow
- Callback de visualización de mensaje en la app
/**
* @param context objeto ApplicationContext
* @param inAppMessage mensaje en la app
*/
public void onInAppMessageShow(Context context, InAppMessage inAppMessage)
onInAppMessageClick
- Callback de clic en mensaje en la app
/**
* @param context objeto ApplicationContext
* @param inAppMessage mensaje en la app
*/
public void onInAppMessageClick(Context context, InAppMessage inAppMessage)
Configuración de NotificationChannel
Versiones compatibles
A partir de la versión: MTPush SDK v3.3.0
Descripción de la función
A partir de Android 8.0, las notificaciones se gestionan mediante NotificationChannels. Los desarrolladores pueden definir sus propios NotificationChannels y especificar el channelId al enviar por API. En dispositivos Android 8.0 o superior, la notificación buscará el canal correspondiente al channelId; la importancia, sonido, vibración y LED dependen del canal. Si no se encuentra el channelId o está en periodo de silencio, se usará por defecto el canal engagelab.
Ejemplo de NotificationChannel personalizado
private void initChannel(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (nm != null){ NotificationChannelGroup notificationChannelGroup = new NotificationChannelGroup("MyGroupId", "Custom Notification Group");
nm.createNotificationChannelGroup(notificationChannelGroup);
NotificationChannel notificationChannel = new NotificationChannel("MyChannelId", "Custom Notification", NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setGroup("MyGroupId");
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);
notificationChannel.setSound("android.resource:// package_name /raw/ ringtone_file", null);
nm.createNotificationChannel(notificationChannel);
}
}
}
NotificationMessage
- Mensaje de notificación
| Atributo | Tipo | Descripción |
|---|---|---|
| messageId | String | Requerido. messageId de Engagelab para seguimiento. No vacío. |
| overrideMessageId | String | overrideMessageId de Engagelab para estadísticas. |
| platform | byte | Fabricante. DEFAULT: 0, Xiaomi: 1, Huawei: 2, Meizu: 3, Oppo: 4, Vivo: 5, Honor: 7, Google: 8 |
| platformMessageId | String | messageId del fabricante. |
| notificationId | int | ID de notificación; puede usarse con clearNotification. |
| smallIcon | String | Icono pequeño. Por defecto: drawable/mtpush_notification_icon.png. |
| largeIcon | String | Icono grande. |
| title | String | Título. Si vacío, se usa el nombre de la app. |
| content | String | Requerido. Contenido. No vacío. |
| extras | Bundle | Campos adicionales clave/valor (String). |
| builderId | int | ID de estilo; ver setNotificationLayout. |
| style | int | Estilo: 0 por defecto, 1 Big text, 2 Inbox, 3 Big picture. |
| bigText | String | Texto largo (estilo 1). |
| inbox | String[] | Inbox (estilo 2). |
| bigPicture | String | Imagen grande (estilo 3). |
| priority | int | Prioridad. |
| defaults | int | Valores por defecto de sonido, vibración, LED. |
| category | String | Categoría de notificación. |
| sound | String | Archivo de sonido en res/raw. |
| channelId | String | Requerido desde Android 8.0. |
| intentUri | String | URI del Intent al hacer clic. |
| badge | int | Número de insignias (Huawei/Xiaomi). |
CustomMessage
- Mensaje personalizado
| Atributo | Tipo | Descripción |
|---|---|---|
| messageId | String | Requerido. messageId de Engagelab. No vacío. |
| platform | byte | Fabricante. |
| platformMessageId | String | messageId del fabricante. |
| title | String | Título. |
| content | String | Contenido. |
| contentType | String | Tipo de mensaje. |
| extras | Bundle | Campos adicionales. |
TagMessage
- Mensaje de tag
| Atributo | Tipo | Descripción |
|---|---|---|
| sequence | int | Número de secuencia de operación definido por el usuario. |
| code | int | Resultado; ver code. |
| tags | String[] | Array de tags (addTag, deleteTag, updateTag, queryAllTag). |
| queryTag | String | Tag (queryTag). |
| queryTagValid | boolean | Estado del tag (queryTag). |
AliasMessage
- Mensaje de alias
| Atributo | Tipo | Descripción |
|---|---|---|
| sequence | int | Número de secuencia de operación. |
| code | int | Resultado; ver code. |
| alias | String | Alias (setAlias, getAlias). |
PlatformTokenMessage
- Mensaje de token del fabricante
| Atributo | Tipo | Descripción |
|---|---|---|
| platform | byte | Fabricante. |
| token | String | Token devuelto por el fabricante. |
InAppMessage
- Mensaje en la app
| Atributo | Tipo | Descripción |
|---|---|---|
| messageId | String | Requerido. messageId de Engagelab. No vacío. |
| overrideMessageId | String | overrideMessageId de Engagelab. |
| target | String | Rutas de página objetivo. |
| imageUrl | String | URL de la imagen. |
| extras | String | Información adicional. |
| content | String | Contenido. |
| expired | long | Tiempo de expiración. |
| delay | long | Tiempo de retraso. |
| interval | long | Intervalo de visualización. |
| duration | long | Duración de visualización. |
| msgTime | long | Hora de recepción. |
code
| code | Valor int | Descripción |
|---|---|---|
| SUCCESS | 0 | Éxito |
| NULL_TAG_AND_ALIAS | 6001 | Configuración inválida |
| TIMEOUT | 6002 | Timeout; se recomienda reintentar (red inestable o init no completado). |
| INVALID_ALIAS | 6003 | Alias inválido. Válidos: letras, números, guión bajo, caracteres @!#$&*+=.| |
| TOO_LONG_ALIAS | 6004 | Alias demasiado largo. Máximo 40 bytes (UTF-8). |
| INVALID_TAGS | 6005 | Tag inválido. |
| TOO_LONG_TAG | 6006 | Tag demasiado largo. Máximo 40 bytes. |
| TOO_MANY_TAGS | 6007 | Demasiados tags en una operación. Máximo 1000. |
| TOO_LONG_TAGS | 6008 | Longitud total de tags en una petición > 5000. |
| UNKNOWN_ERROR | 6009 | Error desconocido |
| INVALID_JSON | 6010 | JSON inválido |
| INVOKE_TOO_SOON | 6012 | Operaciones de tag/alias demasiado frecuentes |
| CONNECT_NOT_ENABLE | 6013 | CONNECT_NOT_ENABLE |
| INVALID_MOBILE_NUMBER | 6023 | Número de móvil inválido |
