2012-10-09 41 views
5

Una de las características de mi aplicación es anular el registro del usuario de la pushnotification remota cuando el usuario cierra la sesión desde la aplicación. ¿Hay alguna manera de anular el registro de la aplicación de la notificación automática cuando el usuario cierra la sesión mientras el dispositivo está en modo avión (fuera de línea)?IOS unregisterForRemoteNotifications no funciona en modo avión

Intenté este código pero todavía recibo notificaciones cuando vuelvo en línea, [[UIApplication sharedApplication] unregisterForRemoteNotifications];

¿Podría alguien ayudarnos a eliminar la aplicación del centro de notificaciones cuando el dispositivo está en modo avión?

+1

¿No necesita estar conectado a internet para cancelar el registro? – DGund

+0

@DGund Estaba bajo el mismo concepto erróneo pero en realidad necesita estar en línea para cancelar el registro de notificación con éxito. Aún recibirá notificaciones si no se ha registrado mientras no tiene conectividad. – user1732255

Respuesta

0

Añadir una bandera o algo similar (llamada él lo que quiera, como ShouldRecallUnregister), cuando se llama

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

que se establece en Sí, si no hay conexión a internet, y dejarlo en NO si el anulamiento funciona.

almacenarlo en el UserDefaults ([[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];), y comprobar su valor en applicationDidBecomeActive: por ejemplo (o donde quiera que mejor se adapte a su aplicación).

Si es SÍ, llame al [[UIApplication sharedApplication] unregisterForRemoteNotifications]; nuevamente.

+0

De esta manera, obtendría más notificaciones en el intervalo de tiempo desde el apagado del modo avión y la activación de la aplicación. – ilmiacs

+0

Gracias por la solución. unregisterForRemoteNotifications no tiene una llamada de evento para rastrear si la anulación del registro se realizó correctamente o no ?. ¿Hay alguna forma de rastrearlo? – user1732255

+0

@rdurand esta solución podría no cumplir mis requisitos, ya que no debería recibir notificaciones una vez que el usuario haya salido de la aplicación.En esta solución, el registro se completa solo cuando el usuario vuelve a iniciar o pone la aplicación en primer plano. Hasta entonces todavía recibimos notificaciones. ¿Hay algo mejor? – user1732255

2

Apple controla notificaciones push remotas. Si está fuera de línea, lógicamente no puede deshabilitarlo. Cuando Apple primero te ve en línea y los empujes no están deshabilitados, te enviará empujones. No hay forma de evitar que iDevice muestre los empujes que Apple envía al usuario, ya que no está en manos de la aplicación.

Por lo tanto, solo hay una posibilidad: debe desactivar INMEDIATAMENTE los empujes después de que el dispositivo se conectó de nuevo. Y aún es una cuestión de suerte, qué mensaje obtiene Apple primero, que estás en línea o que deshabilitas el push. Y también está la pregunta, ¿qué pasará con las notificaciones que Apple quería enviar al dispositivo mientras estaba fuera de línea? ¿Los volverá a enviar de todos modos cuando esté en línea o los descartará al deshabilitarlos primero? No lo sé. Tendrás que hacer la investigación.

Así que la única posibilidad es si su aplicación está en segundo plano mientras el usuario se conecta. Necesitará evitar que su aplicación sea suspendida (here's cómo lograr eso) para poder responder a las notificaciones del sistema. La notificación que necesita es la de cambio de estado en línea, solo sé que existe. This resource puede ser útil. Cuando el dispositivo se conecta, notificará a su aplicación que espera en segundo plano (no suspendida). Entonces puede reaccionar anulando el registro de los accionamientos remotos de inmediato.

Eso es lo mejor que podría lograr en esa dirección. Espero que esto ayude.

+0

Upvote, su solución parece legítima. – rdurand

Cuestiones relacionadas