Las notificaciones en iPhone no funcionan: ¿qué hacer? Qué hacer si las notificaciones no funcionan en iOS

En los últimos años, los teléfonos inteligentes de la empresa china Xiaomi, cuyo rasgo característico es la interfaz patentada MIUI, han ganado gran popularidad en Rusia. Tiene configuraciones de sistema particularmente profundas que no están disponibles para los usuarios de versiones estándar de Android.

Sin embargo, a pesar de las importantes ventajas, muchos se quejan de que xiaomi redmi note 3 no recibe notificaciones; a continuación se describe la causa de esto y cómo solucionar el problema.

¿Por qué no recibo notificaciones en MIUI?

Aunque MIUI parece una interfaz simple y fácil de usar, se diferencia fundamentalmente de la de Android. Los desarrolladores de MIUI han mejorado la autonomía de los teléfonos inteligentes debido a algunas restricciones para las aplicaciones de usuario (whatsapp, viber, vk, etc.). Las prohibiciones de procesos en segundo plano, conexiones de red y geolocalización reducen significativamente la carga en el procesador central, lo que reduce el consumo de batería y prolonga significativamente su vida útil.

Sin embargo, esto creó un inconveniente molesto. Los usuarios han notado que los teléfonos inteligentes Xiaomi a veces no reciben notificaciones de sus programas favoritos. Además, no hay notificaciones, incluso si la aplicación se inició manualmente. Y si la pantalla se oscurece, puedes olvidarte por completo de que las redes sociales y otros servicios deberían enviar notificaciones importantes.

Por eso, muchos están literalmente atormentados por la pregunta: ¿por qué todo es tan complicado y cómo habilitar las notificaciones en MIUI? Por su bien, los usuarios están fácilmente dispuestos a sacrificar la autonomía para no perder las alertas necesarias. Para solucionar este problema es necesario realizar una reconfiguración integral de MIUI, porque… Desafortunadamente, no existe un botón mágico para "activar notificaciones".

Modo de fondo (ahorro de energía)

Uno de los puntos de personalización profundos que aún debes intentar encontrar. Tomemos el ejemplo del smartphone de nuestro empleado, cuyo redmi note 3 pro ya no recibe notificaciones. El nombre del menú puede diferir según la compilación de MIUI, así que confía en tu intuición y busca algo similar en la configuración: Avanzado, Rendimiento y batería, Consumo de energía por aplicaciones. Habrá varios modos de ahorro de energía, de los cuales "Estándar" está activo de forma predeterminada. Es él quien bloquea el acceso a las conexiones de red y la geolocalización. Naturalmente, en un entorno fuera de línea tan remoto, las aplicaciones en xiaomi redmi no pueden mostrar ninguna notificación. Es curioso que en este modo MIUI determina de forma independiente qué procesos en segundo plano bloquear, por lo que es difícil predecir cuándo llegarán determinadas notificaciones.

modos de ahorro de energía xiaomi redmi 3s

Si encontró estas configuraciones, también se enfrentará al problema de la falta de alertas en el modo de ahorro de energía "Estándar". En esta etapa hay 2 opciones.

  1. Simplemente puede desactivar el ahorro de energía. Entonces MIUI debería empezar a funcionar como un Android normal, cuando el kernel del sistema regula de forma independiente todos los procesos en segundo plano, derechos de acceso, prioridades, etc. En teoría, todas las aplicaciones deberían tener acceso completo a la actividad en segundo plano, la red, etc.
  2. Los usuarios experimentados pueden actuar de manera diferente. Establezca el nivel máximo de ahorro de energía ("Extendido") y luego desbloquee selectivamente solo los programas importantes. Esta configuración lleva literalmente tres minutos, pero puede estar seguro de que los recursos del teléfono inteligente se asignarán sólo a los procesos que el usuario realmente necesita. Por cierto, también puede limitar la actividad en segundo plano de las aplicaciones del sistema Xiaomi, que probablemente no tendrán una gran demanda entre los usuarios domésticos.

Configurar tipos de notificaciones

Configurar la actividad de la aplicación en segundo plano fue solo el comienzo de la restauración de la funcionalidad de notificación normal. Pocas personas lo saben, pero la interfaz MIUI también te permite controlar los tipos de notificaciones de las aplicaciones.

Expliquemos usando Facebook Messenger como ejemplo. El programa puede mostrar notificaciones de mensajes en la cortina o cambiar el indicador en su icono con la cantidad de mensajes no leídos. Sin embargo, una ventana redonda flotante en el escritorio es mucho más conveniente, porque... A veces no puedes abrir el mensaje correspondiente desde la cortina. Si tu teléfono tiene un tipo de notificación, pero carece de otro, entonces el problema radica en la limitación de estos mismos tipos.

Para solucionar este problema, debe abrir "Notificaciones y llamadas" en la configuración y allí buscar "Notificaciones de aplicaciones". A continuación habrá una lista de aplicaciones a las que se les permiten notificaciones. Puede desactivar los innecesarios y, para los programas necesarios, puede configurar los tipos y prioridades de notificaciones. Aquí es donde se activan las “Notificaciones emergentes” de aplicaciones, así como la transición normal desde la cortina.

Aplicaciones de inicio automático

Esto es muy importante porque... A veces, la ejecución automática habilitada afecta el correcto funcionamiento de algunas aplicaciones. Puede configurar el inicio automático de programas durante el inicio del dispositivo a través del menú "Permisos", "Inicio automático" en la sección "Seguridad".

Entramos y luego configuramos los parámetros necesarios. Es recomendable configurar la ejecución automática para todas las aplicaciones importantes (redes sociales, mensajería instantánea, etc.).

Anclar aplicaciones a la RAM

Esta es una característica peculiar de la interfaz MIUI. Los usuarios principiantes no lo reconocerán inmediatamente. El caso es que puedes seleccionar aplicaciones que siempre estarán en la RAM, incluso si “cierras todo” a través del menú de aplicaciones en ejecución. Esta es una función muy útil para memorizar mensajería instantánea, redes sociales (VKontakte) y marcadores. Gracias a esto, las aplicaciones fijadas se abren casi instantáneamente y la interfaz MIUI las obligará a funcionar, protegiéndolas de un cierre inesperado. Después de reiniciar el teléfono inteligente, todos los "pines" siguen funcionando.

Para hacer esto, en el menú de programas en ejecución, debe "deslizar" hacia abajo el acceso directo de la aplicación deseada (es decir, aquella en la que las notificaciones no funcionan correctamente) y hacer clic en el candado. Debería aparecer un candado en el acceso directo, lo que significa que la aplicación está bloqueada en la RAM. Para desanclar, simplemente desliza el acceso directo hacia arriba.

Optimización de RAM y WiFi

Además, en la sección "Ahorro de energía" del menú de configuración de la batería, puede haber una opción para limpiar periódicamente la RAM. Esta función elimina aplicaciones innecesarias de la RAM del Redmi Note, lo que permite acelerar el dispositivo y reducir el consumo de batería, sin embargo, es recomendable desactivarla si la situación con las notificaciones es inestable.

También es recomendable desactivar la optimización en los ajustes de WiFi, ya que cuando la pantalla está bloqueada o apagada, la interfaz MIUI puede desconectarse simultáneamente de las redes inalámbricas, nuevamente para ahorrar batería, pero en detrimento de la comodidad del usuario.

Esperamos que estos consejos le ayuden a superar el problema de las notificaciones. Escriba en los comentarios qué le ayudó exactamente a afrontar este problema.

28 de diciembre de 2015 a las 12:25

Notificaciones push en Android. Rastrillos, muletas y bicicletas.

  • Desarrollo de aplicaciones móviles,
  • desarrollo de Android

Me impulsó a escribir este artículo una tarea que me fue asignada en uno de mis proyectos de trabajo: implementar notificaciones Push en una aplicación. Parecía que todo era sencillo: estudias la documentación, los ejemplos y sigues adelante. Además, ya tenía experiencia trabajando con notificaciones. Pero ese no fue el caso...

El servicio en el que se implementa la aplicación de Android tiene requisitos bastante estrictos para el funcionamiento de las notificaciones Push. Es necesario notificar al usuario sobre alguna acción en un plazo de 30 a 60 segundos. Si la notificación tiene éxito, se envía una solicitud desde el dispositivo del usuario al servidor con el estado apropiado. Por la documentación sabemos que el servicio GCM (Google Cloud Messaging) no garantiza la entrega de notificaciones PUSH a los dispositivos, por lo tanto, como opción de puerta trasera, si se violan estos plazos, nuestro servicio notifica al usuario mediante un mensaje SMS. Dado que el coste de los mensajes SMS es significativamente mayor que el de las notificaciones PUSH, es necesario reducir al máximo el flujo de mensajes SMS a los dispositivos de los clientes.

Después de estudiar la documentación e instalar las notificaciones push, enviamos la primera versión de la aplicación para probarla a varios clientes y comenzamos a esperar. Los resultados fueron aproximadamente los siguientes:

  • con una conexión Wifi activa, todo funciona perfectamente: las notificaciones se entregan y los clientes quedan contentos.
  • Con una Internet móvil activa, comenzó la diversión.
Algunos clientes escribieron que experimentaron retrasos en la entrega de notificaciones automáticas o recibieron PUSH y SMS al mismo tiempo, lo cual es bastante poco práctico. Otros escribieron que no recibieron ninguna notificación, solo SMS. En otros, como nuestros dispositivos de prueba, todo estuvo bien. Después de recopilar la mayor cantidad de información posible de clientes insatisfechos, comenzamos a comprender el problema y elaboramos la siguiente lista de restricciones (esta lista luego se convirtió en una pregunta frecuente completa):
  • El modo de ahorro de energía habilitado (por ejemplo, Stamina en dispositivos Sony) afecta el funcionamiento de las notificaciones push;
  • El usuario debe tener al menos 1 cuenta de Google activa en el dispositivo;
  • debe asegurarse de que la versión actual de la aplicación Servicios de Google Play esté instalada en su dispositivo;
  • verifique si las notificaciones de la aplicación están deshabilitadas (marque la casilla en la página de la aplicación en la configuración del teléfono);
  • comprobar si el modo en segundo plano de la aplicación es limitado (la configuración se encuentra en el menú "Uso de datos");
  • La documentación de GCM establece que las notificaciones se envían sólo a determinados puertos, por lo que también se deben tener en cuenta la configuración del enrutador, el firewall y el antivirus.
Habiendo enviado este recordatorio a todos los clientes, nuevamente comenzamos a esperar los resultados. Y resultaron volver a ser “no muy buenos”. Comenzaron a cavar más.

En esta etapa, el mensaje escrito por los chicos de Mail.ru ayudó mucho. Describe con gran detalle las complejidades de implementar GCM en el lado del cliente, así como los puntos por los cuales las notificaciones push en redes móviles se niegan a funcionar. Al final, se tomó la decisión de mantener mi conexión al servidor junto con GCM.

Antes de comenzar a tomar una decisión, vale la pena resaltar algunos puntos muy importantes que le permitirán reducir la gama de dispositivos potencialmente "no funcionales":

  • el problema surge solo cuando está conectado a Internet móvil;
  • Según los clientes, el problema ocurre en la versión 4 de Android y superiores.
Y entonces, pasemos a la implementación.

Un desarrollador experimentado de Android dirá inmediatamente que existen al menos 2 soluciones al problema: utilizar Service o AlarmManager. Probamos ambas opciones. Consideremos el primero de ellos.

Para crear un servicio indestructible para el sistema que se mantendrá constantemente en segundo plano y realizará nuestra tarea, utilizamos el método:

StartForeground (int ID de notificación, notificación de notificación);
Dónde

  • NotificationId: algún identificador de notificación único que se mostrará en la barra de estado y en la cortina deslizante;
  • notificación: la notificación en sí.
En este caso, una condición obligatoria es mostrar la notificación en la barra de estado. Este enfoque garantiza que al servicio se le dará mayor prioridad (ya que interactúa con la parte UI del sistema) cuando haya falta de memoria en el dispositivo y el sistema será uno de los últimos en descargarlo. No necesitamos esta notificación, así que utilizamos el siguiente truco: basta con iniciar el segundo servicio simultáneamente con el primero y para ambos servicios como ID de notificación utilizar el mismo valor. Luego mata el segundo servicio. En este caso, la notificación desaparecerá de la barra de estado, pero la funcionalidad y las capacidades de prioridad del primer servicio permanecerán.

Una vez implementado este enfoque, enviamos el ensamblaje a prueba. Según los resultados, resultó que el sistema todavía estaba descargando el servicio y, a partir de los registros, vimos cómo se producían importantes intervalos de tiempo al solicitar datos en segundo plano desde nuestro servidor. Por lo tanto, comenzamos a implementar la segunda opción: AlarmManager.

AlarmManager es una clase que permite trabajar con, en términos generales, un "despertador". Nos permite especificar el tiempo después del cual el sistema enviará una notificación de transmisión, que despertará nuestra aplicación y le dará la oportunidad de realizar las acciones necesarias. Existen algunas limitaciones en el funcionamiento de este método y es necesario abordarlas:

  • los datos sobre los "despertadores" se borrarán después de reiniciar el dispositivo;
  • Los datos de la alarma se borrarán después de actualizar la aplicación.
El primer rastrillo que pisamos fue el método

Establecer repetición()
que le permite configurar un “despertador” que se repite en un intervalo determinado. Habiendo arruinado este método, comenzaron a realizar pruebas y las pruebas mostraron lo contrario: el "despertador" no se repitió. Comenzamos a descubrir qué estaba pasando y miramos la documentación. Y fue allí donde encontraron la respuesta a la pregunta: a partir de API lvl 19 (Kitkat), absolutamente todos los "despertadores" del sistema se volvieron únicos. Conclusión: lea siempre la documentación.

Este rastrillo no fue motivo de frustración, porque la solución al problema es bastante simple: ejecutar una "alarma" de una sola vez y restablecerla después de que suene. Al implementar este enfoque, nos encontramos con el siguiente rastrillo: resultó que para diferentes niveles de API es necesario configurar las alarmas de manera diferente, mientras que en la documentación no se dice nada. Pero este problema se resolvió de forma muy sencilla: hurgando y buscando en Google. A continuación se muestra un ejemplo de código que le permite configurar alarmas correctamente:

SetUpAlarm vacío estático privado (contexto de contexto final, intención de intención final, intervalo de tiempo int final) (final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); final PendingIntent pi = PendingIntent.getBroadcast(context, timeInterval, intent, 0) ; am.cancel(pi); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) (final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pi); am.setAlarmClock( alarmClockInfo, pi); else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi); else am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi)
Quiero llamar tu atención sobre la bandera. Administrador de alarmas.RTC_WAKEUP- es con su ayuda que el sistema permitirá que nuestra aplicación "se active" cuando la pantalla esté inactiva, cuando el dispositivo esté bloqueado.

Este enfoque con "despertadores" nos dio el resultado deseado: la aplicación en segundo plano sondea correctamente el servidor en busca de nuevos datos. Actualmente estamos ultimando el algoritmo. Actualmente estamos implementando y probando la siguiente optimización, que nos permitirá reducir la gama de dispositivos y así reducir la carga en el servidor:

  • el mensaje enviado por GCM al dispositivo contiene una identificación única;
  • Una vez recibidos los datos de la solicitud GET en segundo plano, comprobamos si ya existe una entrada con el mismo ID en el dispositivo;
  • si no existen dichos datos localmente en el dispositivo, recordamos esta identificación y la hora en que se recibió T1;
  • esperamos PUSH con el mismo ID, al recibirlo recordamos la hora T2 y comprobamos la diferencia entre T2 y T1;
  • si la diferencia es mayor que un cierto criterio temporal (valor), entonces el dispositivo tiene un problema con la entrega de notificaciones y para que el servicio funcione correctamente, es necesario solicitar datos constantemente en segundo plano al servidor (te aconsejo seleccionar un criterio en función del problema que se está resolviendo, en nuestro caso el criterio es igual a 5 minutos);
  • esta diferencia debe calcularse varias veces, por ejemplo de 5 a 10 veces, solo después de eso se puede concluir que el dispositivo realmente tiene un problema para recibir notificaciones Push (esto elimina la situación de desconexión banal de la conexión, tiempo de espera, etc.);
  • es necesario ejecutar este algoritmo periódicamente (por ejemplo, una vez a la semana o después de actualizar el sistema operativo del dispositivo).
Mis mejores deseos. Y menos muletas de este tipo.

PD
Ayudó mucho durante el proceso de prueba.

Me impulsó a escribir este artículo una tarea que me fue asignada en uno de mis proyectos de trabajo: implementar notificaciones Push en una aplicación. Parecía que todo era sencillo: estudias la documentación, los ejemplos y sigues adelante. Además, ya tenía experiencia trabajando con notificaciones. Pero ese no fue el caso...

El servicio en el que se implementa la aplicación de Android tiene requisitos bastante estrictos para el funcionamiento de las notificaciones Push. Es necesario notificar al usuario sobre alguna acción en un plazo de 30 a 60 segundos. Si la notificación tiene éxito, se envía una solicitud desde el dispositivo del usuario al servidor con el estado apropiado. Por la documentación sabemos que el servicio GCM (Google Cloud Messaging) no garantiza la entrega de notificaciones PUSH a los dispositivos, por lo tanto, como opción de puerta trasera, si se violan estos plazos, nuestro servicio notifica al usuario mediante un mensaje SMS. Dado que el coste de los mensajes SMS es significativamente mayor que el de las notificaciones PUSH, es necesario reducir al máximo el flujo de mensajes SMS a los dispositivos de los clientes.

Después de estudiar la documentación e instalar las notificaciones push, enviamos la primera versión de la aplicación para probarla a varios clientes y comenzamos a esperar. Los resultados fueron aproximadamente los siguientes:

  • con una conexión Wifi activa, todo funciona perfectamente: las notificaciones se entregan y los clientes quedan contentos.
  • Con una Internet móvil activa, comenzó la diversión.
Algunos clientes escribieron que experimentaron retrasos en la entrega de notificaciones automáticas o recibieron PUSH y SMS al mismo tiempo, lo cual es bastante poco práctico. Otros escribieron que no recibieron ninguna notificación, solo SMS. En otros, como nuestros dispositivos de prueba, todo estuvo bien. Después de recopilar la mayor cantidad de información posible de clientes insatisfechos, comenzamos a comprender el problema y elaboramos la siguiente lista de restricciones (esta lista luego se convirtió en una pregunta frecuente completa):
  • El modo de ahorro de energía habilitado (por ejemplo, Stamina en dispositivos Sony) afecta el funcionamiento de las notificaciones push;
  • El usuario debe tener al menos 1 cuenta de Google activa en el dispositivo;
  • debe asegurarse de que la versión actual de la aplicación Servicios de Google Play esté instalada en su dispositivo;
  • verifique si las notificaciones de la aplicación están deshabilitadas (marque la casilla en la página de la aplicación en la configuración del teléfono);
  • comprobar si el modo en segundo plano de la aplicación es limitado (la configuración se encuentra en el menú "Uso de datos");
  • La documentación de GCM establece que las notificaciones se envían sólo a determinados puertos, por lo que también se deben tener en cuenta la configuración del enrutador, el firewall y el antivirus.
Habiendo enviado este recordatorio a todos los clientes, nuevamente comenzamos a esperar los resultados. Y resultaron volver a ser “no muy buenos”. Comenzaron a cavar más.

En esta etapa, el mensaje escrito por los chicos de Mail.ru ayudó mucho. Describe con gran detalle las complejidades de implementar GCM en el lado del cliente, así como los puntos por los cuales las notificaciones push en redes móviles se niegan a funcionar. Al final, se tomó la decisión de mantener mi conexión al servidor junto con GCM.

Antes de comenzar a tomar una decisión, vale la pena resaltar algunos puntos muy importantes que le permitirán reducir la gama de dispositivos potencialmente "no funcionales":

  • el problema surge solo cuando está conectado a Internet móvil;
  • Según los clientes, el problema ocurre en la versión 4 de Android y superiores.
Y entonces, pasemos a la implementación.

Un desarrollador experimentado de Android dirá inmediatamente que existen al menos 2 soluciones al problema: utilizar Service o AlarmManager. Probamos ambas opciones. Consideremos el primero de ellos.

Para crear un servicio indestructible para el sistema que se mantendrá constantemente en segundo plano y realizará nuestra tarea, utilizamos el método:

StartForeground (int ID de notificación, notificación de notificación);
Dónde

  • NotificationId: algún identificador de notificación único que se mostrará en la barra de estado y en la cortina deslizante;
  • notificación: la notificación en sí.
En este caso, una condición obligatoria es mostrar la notificación en la barra de estado. Este enfoque garantiza que al servicio se le dará mayor prioridad (ya que interactúa con la parte UI del sistema) cuando haya falta de memoria en el dispositivo y el sistema será uno de los últimos en descargarlo. No necesitamos esta notificación, así que utilizamos el siguiente truco: basta con iniciar el segundo servicio simultáneamente con el primero y para ambos servicios como ID de notificación utilizar el mismo valor. Luego mata el segundo servicio. En este caso, la notificación desaparecerá de la barra de estado, pero la funcionalidad y las capacidades de prioridad del primer servicio permanecerán.

Una vez implementado este enfoque, enviamos el ensamblaje a prueba. Según los resultados, resultó que el sistema todavía estaba descargando el servicio y, a partir de los registros, vimos cómo se producían importantes intervalos de tiempo al solicitar datos en segundo plano desde nuestro servidor. Por lo tanto, comenzamos a implementar la segunda opción: AlarmManager.

AlarmManager es una clase que permite trabajar con, en términos generales, un "despertador". Nos permite especificar el tiempo después del cual el sistema enviará una notificación de transmisión, que despertará nuestra aplicación y le dará la oportunidad de realizar las acciones necesarias. Existen algunas limitaciones en el funcionamiento de este método y es necesario abordarlas:

  • los datos sobre los "despertadores" se borrarán después de reiniciar el dispositivo;
  • Los datos de la alarma se borrarán después de actualizar la aplicación.
El primer rastrillo que pisamos fue el método

Establecer repetición()
que le permite configurar un “despertador” que se repite en un intervalo determinado. Habiendo arruinado este método, comenzaron a realizar pruebas y las pruebas mostraron lo contrario: el "despertador" no se repitió. Comenzamos a descubrir qué estaba pasando y miramos la documentación. Y fue allí donde encontraron la respuesta a la pregunta: a partir de API lvl 19 (Kitkat), absolutamente todos los "despertadores" del sistema se volvieron únicos. Conclusión: lea siempre la documentación.

Este rastrillo no fue motivo de frustración, porque la solución al problema es bastante simple: ejecutar una "alarma" de una sola vez y restablecerla después de que suene. Al implementar este enfoque, nos encontramos con el siguiente rastrillo: resultó que para diferentes niveles de API es necesario configurar las alarmas de manera diferente, mientras que en la documentación no se dice nada. Pero este problema se resolvió de forma muy sencilla: hurgando y buscando en Google. A continuación se muestra un ejemplo de código que le permite configurar alarmas correctamente:

SetUpAlarm vacío estático privado (contexto de contexto final, intención de intención final, intervalo de tiempo int final) (final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); final PendingIntent pi = PendingIntent.getBroadcast(context, timeInterval, intent, 0) ; am.cancel(pi); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) (final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pi); am.setAlarmClock( alarmClockInfo, pi); else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi); else am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi)
Quiero llamar tu atención sobre la bandera. Administrador de alarmas.RTC_WAKEUP- es con su ayuda que el sistema permitirá que nuestra aplicación "se active" cuando la pantalla esté inactiva, cuando el dispositivo esté bloqueado.

Este enfoque con "despertadores" nos dio el resultado deseado: la aplicación en segundo plano sondea correctamente el servidor en busca de nuevos datos. Actualmente estamos ultimando el algoritmo. Actualmente estamos implementando y probando la siguiente optimización, que nos permitirá reducir la gama de dispositivos y así reducir la carga en el servidor:

  • el mensaje enviado por GCM al dispositivo contiene una identificación única;
  • Una vez recibidos los datos de la solicitud GET en segundo plano, comprobamos si ya existe una entrada con el mismo ID en el dispositivo;
  • si no existen dichos datos localmente en el dispositivo, recordamos esta identificación y la hora en que se recibió T1;
  • esperamos PUSH con el mismo ID, al recibirlo recordamos la hora T2 y comprobamos la diferencia entre T2 y T1;
  • si la diferencia es mayor que un cierto criterio temporal (valor), entonces el dispositivo tiene un problema con la entrega de notificaciones y para que el servicio funcione correctamente, es necesario solicitar datos constantemente en segundo plano al servidor (te aconsejo seleccionar un criterio en función del problema que se está resolviendo, en nuestro caso el criterio es igual a 5 minutos);
  • esta diferencia debe calcularse varias veces, por ejemplo de 5 a 10 veces, solo después de eso se puede concluir que el dispositivo realmente tiene un problema para recibir notificaciones Push (esto elimina la situación de desconexión banal de la conexión, tiempo de espera, etc.);
  • es necesario ejecutar este algoritmo periódicamente (por ejemplo, una vez a la semana o después de actualizar el sistema operativo del dispositivo).
Mis mejores deseos. Y menos muletas de este tipo.

PD
Ayudó mucho durante el proceso de prueba.

26.05.2016

Cada empresa comercial y de aplicaciones tiene sus propias listas de clientes y proyectos favoritos. Amamos a nuestros clientes, especialmente a aquellos que, además del producto terminado, quieren comprender las tecnologías de forma independiente y alcanzar el nivel de especialista. Se utiliza cualquier método, pero la "tortura con preguntas" es especialmente popular (cualquier evaluador descansa).

Retrato técnico de la aplicación que se está desarrollando.

Estábamos creando una aplicación móvil para una tienda de ropa, cuya arquitectura se construyó sobre una Actividad básica (se utilizan fragmentos para mostrar información). La biblioteca Retrofit se utilizó para descargar datos del servidor y se utilizó una base de datos SQLite dependiente incorporada para almacenarlos. Se seleccionaron cargadores para ejecutar solicitudes al servidor y recuperarlas de la base de datos.

Para que la aplicación sea interactiva y le permita intercambiar mensajes, habilitamos las notificaciones automáticas. En este caso, VK y Facebook SDK se utilizan para implementar la autorización/registro a través de redes sociales y se ve así: cuando un usuario envía un mensaje, envía una solicitud con este mensaje a nuestro servidor. Genera una solicitud con el mensaje y datos del usuario al que iba dirigido el mensaje y envía toda la información al servidor de Google. Genera una notificación push a partir de esta solicitud y la envía al dispositivo del usuario. Nuestra aplicación recibe este impulso, lo analiza (procesa) y lo muestra en el chat: se realiza la comunicación.

Hay un problema: ¿cuándo comienza a ejecutarse la aplicación en segundo plano o por qué las notificaciones automáticas solo llegan después del inicio?

Un cliente vino a nosotros con esta pregunta, porque por experiencia se enfrentó al siguiente dilema: cuando se inicia desde un segundo dispositivo, la aplicación funciona bien, pero ¿cómo funciona entonces la “carga automática”?

Hablemos. La aplicación comienza a funcionar en segundo plano inmediatamente después de la instalación y la suscripción a las notificaciones automáticas se realiza después del registro en la aplicación.

Si el usuario no se registra en él, las notificaciones push no le funcionarán.

Hay otras explicaciones a considerar:

  1. Las notificaciones push funcionan a través del servicio GCM (Google Cloud Messaging), por lo que si el dispositivo no tiene Google Play Services, su funcionamiento es inestable o el fabricante ha realizado mejoras en su funcionamiento, entonces las notificaciones push no funcionarán por completo o habrá interrupciones en su funcionamiento. Si los servicios de Google Play no están disponibles en su teléfono, ni siquiera podrá registrarse para recibir notificaciones automáticas. Por supuesto, esto también se puede hacer "a la fuerza": si, después del registro, la suscripción para recibir notificaciones automáticas en el servidor no tiene éxito, deberá continuar intentándolo cada vez que inicie sesión en la aplicación hasta que el resultado sea exitoso. El motivo de esta situación pueden ser problemas con el funcionamiento de los servicios de Google Play; en este caso, un intento de suscribirse puede terminar en nada.
  2. La causa del funcionamiento incorrecto reside en un entorno de trabajo no ideal. Recomendamos a nuestros clientes para realizar pruebas, y lo llamamos un entorno ideal, el uso de teléfonos Google Nexus (ejecutan Android "puro" sin ningún cambio, y el sistema operativo y los servicios funcionan idealmente), el funcionamiento estable del servidor e Internet. conexión. En tales condiciones, las solicitudes se emitirán correctamente, sin errores y con la mayor rapidez posible. En este caso, la aplicación cargará rápidamente nuevos datos, los mostrará y no habrá problemas con la visualización incorrecta de información. En otros teléfonos (con un sistema operativo modificado: marcas chinas, Samsung, HTC, etc.) se puede esperar no solo un funcionamiento inestable del servidor, sino también capacidades limitadas de la aplicación que se está desarrollando (debido a la eliminación sistémica de muchos métodos-funciones) - Sí, es posible que no se proporcionen notificaciones automáticas.
  3. No olvide lo principal: las notificaciones automáticas solo llegan si hay una conexión a Internet estable. Si este no es el caso, el mensaje aparecerá tan pronto como se restablezca la conexión.

Reanudar

  • Un entorno ideal (Internet impecable, plataforma "limpia") es ideal, así que advierta a los clientes sobre todos los posibles errores y limitaciones de la funcionalidad de la aplicación.
  • No tengas miedo de las preguntas de los clientes: ellos buscarán cuidadosamente los defectos en tu trabajo y los encontrarán. Gracias y solucione los errores rápidamente.
  • En primer lugar, cree una aplicación para los usuarios, céntrese en sus capacidades técnicas y no cree cosas innecesarias.

¿Cómo puedes darte de baja de las notificaciones push por accidente? Un rechazo puede deberse a la recepción de una notificación push en el momento equivocado (por ejemplo, un fin de semana o un día festivo), bajo la influencia de un impulso momentáneo. O podría bloquear accidentalmente la recepción de todas las notificaciones.

¿Qué hacer en este caso? Debe familiarizarse con la configuración de notificaciones automáticas de su navegador. Lea instrucciones detalladas sobre dónde y si es necesario. En este artículo, aprenderá cómo configurar la recepción de mensajes de sitios individuales.

CONSEJO.

Es importante que los remitentes de notificaciones sigan una estrategia de envío de correo competente: elija la frecuencia y el formato óptimos para presentar la información. Los envíos de correo demasiado frecuentes provocan una alta tasa de bajas y el envío irregular de mensajes provoca una pérdida del interés del cliente en el recurso web.

Este artículo analítico le ayudará a comprender los matices de configurar una campaña push.

¿Cómo aprovechar al máximo las notificaciones push para tu sitio web? según el servicio específicamente para su negocio con sus características únicas.

Limpieza programada de contactos inactivos

Cambiar el protocolo del sitio

CONSEJO.

Al cambiar el protocolo del sitio de http a https, así como al pasar a un nuevo dominio, se debe volver a ensamblar la base de suscriptores. En consecuencia, en condiciones estándar, el usuario no recibirá notificaciones automáticas del sitio hasta que se suscriba para recibir notificaciones automáticas en la nueva URL.

Sin embargo, el servicio Gravitec.net proporciona una estrategia de migración para cambiar de protocolo sin perder el contacto con los usuarios. Leer sobre




Arriba