Control Batería


Cada día, con las nuevas actualizaciones de los diferentes sistemas operativos de móviles, la restricciones en las comunicaciones y con los servicios en segundo plano son cada vez más agresivas, con la finalidad de ahorrar en el uso de batería todo lo posible.

En Android, a partir de la versión 6, se introdujo el modo “DOZE” que se encarga de gestionar el uso de la batería a nivel de sistema. Posteriores versiones del sistema operativo no han hecho más que aumentar las restricciones de los servicios en segundo plano, siendo el último de los sistemas el “adaptative battery” de Android 9.

Entre tanto, los distintos fabricantes han ido implementando sus propios gestores de energía con mayor ó menor éxito, independientemente de la versión de android que utilicen como base, en cuanto se apague la pantalla del dispositivo ó el teléfono detecte que está en algún sitio sin moverse, se activará el modo de ahorro de energía.

Cuando un móvil, entra en “modo de ahorro de batería”, únicamente se hace caso a las llamadas, mensajes SMS y las notificaciones de alta prioridad, excepto si expresamente el usuario activa en los ajustes para que algunas aplicaciones no entren dentro de ese modo de ahorro de las comunicaciones en segundo plano.


En el caso de iOS este “problema” nos lo encontramos prácticamente desde sus orígenes, puesto que las aplicaciones en segundo plano dejan de estar “activas” y por lo tanto sus comunicaciones pasan a estar suspendidas por el propio sistema operativo que de cuando en cuando abre una ventana para que las aplicaciones en segundo plano puedan comunicar, no teniendo control de tiempos, es el propio sistema operativo el que se encarga de la gestión. Como resultado, el replicador en iOS únicamente funciona de forma normal cuando el usuario se encuentra dentro de la aplicación.

En Windows 10, si bien ahora mismo hablamos de tablets que en principio tienen más capacidad de batería, acabarán adoptando sistemas de gestión de batería similares a los de android ó iOS cuando el dispositivo no se encuentre enchufado a la corriente.

Este tema de los procesos en segundo plano, es imprescindible para el correcto funcionamiento de todas las aplicaciones Off-Line y en el caso que nos ocupa, de la Plataforma XOne y su sistema de Réplica/Actualizaciones.

Hasta ahora, cuando el usuario salía de la aplicación, el dispositivo seguía replicando sin problemas ó bien, en el caso de ponerle algún tipo de actualización, el componente XOneLive se encargaba de descargar esta actualización automáticamente, sin intervención del usuario.

Con los nuevos métodos implementados por los distintos fabricantes y sistemas operativos para el control de la batería, nos encontramos con casos donde los componentes replicador y/ó xonelive se encuentran bloqueados por estos sistemas de ahorro de batería, lo cual nos lleva a un funcionamiento anómalo del sistema.


Según el sistema operativo, habrá que indicarle de una u otra forma que nuestra aplicación no entre a formar parte de las aplicaciones a las que el sistema incluya en su gestión de ahorro de batería

Como cada fabricante ha hecho su propia implementación, estas opciones se encuentran en diferentes menús del sistema y se requiere la intervención del usuario, pues las aplicaciones no pueden forzar este comportamiento (Todos los desarrolladores lo harían con su aplicación).

Como somos conscientes que el usuario no conoce a fondo el sistema operativo y los menús pueden variar de un dispositivo a otro, desde XOne hemos implementado una fórmula para solicitar al usuario que incluya a las aplicaciones de XOne en la lista de aplicaciones protegidas ó que el sistema no las tenga en consideración a la hora de ahorrar batería, llevándolo directamente a la ventana donde se solicitan estos permisos.

El siguiente código habría que llamarlo desde la colección de Login ó bien, en caso de no haber login, desde la colección entry-point (La colección de entrada).

Esta función únicamente puede utilizarse a partir del framework android 4.8.3.72 y para iOS no existe esta posibilidad, las aplicaciones en segundo plano directamente no funcionan)


requestIgnoreBatteryOptimizations.js
function requestIgnoreBatteryOptimizations() {
 
	if (systemSettings !== undefined) {
		let bResult = systemSettings.isIgnoringBatteryOptimizations();
		// Si no se especifica ningún parámetro, se chequea la propia aplicación, 
		// pero se puede pasar un nombre de paquete y que nos diga si está protegido contra las optimizaciones de batería en el dispositivo.
		// let bResult = systemSettings.isIgnoringBatteryOptimizations("com.xone.live.services");
 
		if (!bResult) {
			ui.showToast("Por favor desactive el ahorro de batería para la aplicación XOne XXX");
			//Con esto, indicamos al sistema que nos muestre la ventana donde poder decir que nuestra aplicación NO se vea afectada por los modos de ahorro de batería.
			systemSettings.requestIgnoreBatteryOptimizations();
		}
	}
}



A continuación vemos algunos casos de fabricantes que han implementado sus propios sistemas de ahorro de energía y vemos cómo podemos desactivar ese ahorro de batería para nuestra aplicación ó bien agregar nuestra aplicación a una lista de “aplicaciones protegidas” de forma que el sistema no las tenga en cuenta a la hora de restringir las comunicaciones y los procesos en segundo plano.

Si tenemos una aplicación unificada Framework-Live, únicamente tendremos que preocuparnos de dicha aplicación, pero si tenemos separados los componentes XOneLive y Framework, tendremos que evitar que ambas entren en el modo de optimización de batería ó tendremos que agregarlas a la lista de aplicaciones protegidas, según sea el fabricante del dispositivo.



A partir de la versión v4.8.4.7 del framework, se ha implementado que si el dispositivo carece de la funcionalidad de ahorro de batería (Android antiguo) ó si el usuario ha configurado correctamente su terminal para que la aplicación no entre dentro de los ajustes de ahorro de batería, en la tabla MASTER_REPLICA_SLAVE se pondrá un 0 (valor bueno) en el campo ISTASKKILLERINSTALLED y un 1 en caso contrario (Valor malo).



Samsung


En el caso de Samsung, la aplicación hay que añadirla a una lista de aplicaciones sin supervisión (Pasos del 1 al 4) ó hay algunas opciones donde hay que desmarcar para que no optimice la batería con nuestra aplicación (Paso 5).

1.- Nos vamos a los ajustes del teléfono y seleccionamos “Mantenimiento dispositivo”



2.- Una vez dentro de la opción “Mantenimiento dispositivo”, entramos en la opción “Batería”



3.- En la parte inferior de la pantalla tenemos una opción “Apps sin supervisión”, para aquellas aplicaciones que NO queremos poner en modo Inactivo



4.- Si nuestra aplicación no se encuentra en el listado, tendremos que añadirla con el botón inferior de la pantalla



Parece que para que se ejecuten también los mantenimientos, hay que desmarcar también la opción que se explica en el punto siguiente.

5.- En algunas otras opciones del teléfono, llegamos a una pantalla donde nos invitan a “Optimizar el uso de batería”, en este caso tendremos que desmarcar nuestra aplicación para que NO la optimice (Si no sale en el listado es posible que esté filtrando las aplicaciones, seleccionar un desplegable que hay en la parte superior para que nos muestre TODAS las aplicaciones)



Dispositivos Samsung con Android 8

1.- En los dispositivos Samsung que incluyan una aplicación para ahorrar batería, ve a Ajustes > Mantenimiento dispositivo > Batería > Control de energía de aplicaciones (Detalle) > Aplicación XOne y desactiva la opción.
Después en la opción “Apps sin supervisión” > Añadir aplicaciones > selecciona la aplicación XOne para añadirla a la lista.

2.- Desde el mismo menú Ajustes > Mantenimiento dispositivo > Batería, toca el menú del icono en forma de tres puntos > Ajustes avanzados > Control de energía de aplicaciones y desactiva las dos opciones “Suspender apps sin uso” y la opción “Control de energía de aplicaciones”.

3.- Por último, ve a Ajustes > Aplicaciones, toca el icono del menú para acceder a la opción «Acceso especial» > Optimizar uso de batería, cambia la vista para mostrar “Todas las aplicaciones” y asegúrate de desactivar esta opción para la aplicación XOne.



Dispositivos Samsung con versiones anteriores de Android

1.- Ve a Ajustes > Batería > Optimización de apps (Detalle) > Selecciona la aplicación XOne y desactiva esta opción.
En este mismo menú, desactiva la opción “Optimización de apps”. 2.- Ve a Ajustes > Batería > Ahorro de energía y desactiva ambas opciones. Asegúrate de que la opción “Modo Ultrahorro de energía” también está desactivada.

Nota: estas opciones pueden variar en función del modelo Samsung. Puedes buscarlas utilizando el campo de búsqueda que aparece en la parte superior del menú Ajustes.



Huawei


En el caso de Huawei, la aplicación hay que añadirla a la lista de “aplicaciones protegidas”.

1.- Nos vamos a los ajustes del teléfono y seleccionamos “Ajustes Avanzados” - “Gestor de Batería”



2.- Una vez dentro de la opción “Gestor de Batería”, entramos en la opción “Aplicaciones Protegidas”



3.- Aquí tendremos que MARCAR las aplicaciones que queremos proteger contra el sistema de ahorro de batería



Xiaomi


En el caso de Xiaomi, hay que llegar hasta la aplicación que queramos para indicarle que no queremos que tenga restricciones en las comunicaciones ni tampoco límites en segundo plano.

1.- Nos vamos a los ajustes del teléfono y seleccionamos “Batería y rendimiento”



2.- Una vez dentro de la opción “Batería y rendimiento”, entramos en la opción “Seleccionar aplicaciones”



3.- En el listado, localizaremos nuestra aplicación y la seleccionaremos



4.- Una vez dentro de la aplicación que queramos, elegimos la opción “Sin restricciones”



Xiaomi con Android MUI


Tradicionalmente, los dispositivos Xiaomi con Android MIUI pertenecen al grupo más problemático del mercado con respecto a las limitaciones de procesos en segundo plano no estándar y los permisos no estándar. No hay API ni documentación para esas extensiones. En la configuración predeterminada, el procesamiento en segundo plano simplemente no funciona correctamente y las aplicaciones que lo usan se romperán.

Xiaomi MIUI 12

Para permitir que su aplicación se ejecute en segundo plano, asegúrese de que la configuración de su aplicación sea similar a la siguiente:

Xiaomi MIUI 11


Para permitir que su aplicación se ejecute en segundo plano, asegúrese de que la configuración de su aplicación sea similar a la siguiente:

Xiaomi 10


Para permitir que su aplicación se ejecute en segundo plano, asegúrese de que la configuración de su aplicación sea similar a la siguiente:

Gestión de energía
Habilite:

  • Configuración> Configuración avanzada> Administrador de batería> El plan de energía está configurado en Rendimiento
  • Configuración del dispositivo> Configuración avanzada> Administrador de batería> Aplicaciones protegidas : su aplicación debe estar protegida
  • Configuración del dispositivo> Aplicaciones> su aplicación> Batería> Indicación de uso intensivo de energía y Seguir funcionando después de apagar la pantalla
  • Configuración> Configuración adicional> Batería y rendimiento> Administrar el uso de la batería de las aplicaciones y aquí:
    1. Cambiar los modos de ahorro de energía a apagado
    2. Elija las siguientes opciones: Ahorro de energía en segundo plano> Elija aplicaciones> seleccione su aplicación> Configuración de fondo> Sin restricciones


Ahorro de batería de la aplicación

  • Seguridad> Batería> App Battery Saver> su aplicación> Sin restricción


Autoencendido
(según Xiaomi)

  • Abra la aplicación Seguridad> Permisos> Inicio automático
  • Habilite “Inicio automático” para las aplicaciones deseadas.


Esta opción es una de las recomendaciones expresas de los sistemas operativos para hacer funcionar las aplicaciones off-line con los sistemas de ahorro de batería, de forma que las aplicaciones en segundo plano únicamente entran en funcionamiento cuando reciben una notificación PUSH con alta prioridad. Ejemplos de aplicaciones con notificaciones PUSH son las aplicaciones de mensajería instantánea como Whatsapp ó telegram.

Para poder utilizar este sistema, hemos de darnos de alta en la consola de firebase de google.
Este paso es imprescindible, puesto que hemos de hacer uso de un servidor de PUSH donde registrar nuestros dispositivos y que éstos obtengan un TOKEN (Identificador con el que luego podremos enviarles la notificación). Esto es válido tanto para dispositivos Android como iOS.

Ver más información aquí.