14

Necesito siempre saber qué opciones el usuario elige en la configuración de notificación de inserción.
(Las opciones son - de alerta, el sonido y las insignias)objetivo c - Detectar cuando el usuario cambia la configuración de notificaciones de la aplicación

Así que cuando mi lanzamiento de aplicaciones que llaman:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 

y detectar lo que eligió el usuario.

Pero, ¿cómo puedo detectar si el usuario cambia la configuración más tarde durante la vida útil de la aplicación?
¿Hay algún método delegado que se llame cuando se produce un cambio con esta configuración?

Respuesta

22

No hay delegado. Debe consultar la propiedad UIApplicationenabledRemoteNotificationTypes periódicamente, por ejemplo, en applicationDidBecomeActive:.

Para más detalles comprobar estas respuestas:

Determine on iPhone if user has enabled push notifications

View In Lock Screen and enabledRemoteNotificationTypes - iOS5

Editar:
Si es necesario restablecer la configuración de notificación de inserción y la alerta permiso, echar un vistazo a la Apple technical note TN2265 . En la sección "Restablecimiento de la alerta de permisos de notificaciones push en iOS" explican cómo restablecer la configuración en iOS. Sin embargo, muchos desarrolladores se quejan de que el procedimiento no funciona. No estoy seguro si funcionará this link, necesitará tener acceso al foro de Apple, pero es uno de los hilos sobre este tema exacto.

Me preguntaba si tal vez Apple ha eliminado el cuadro de diálogo de permisos en iOS 5.1. De lo contrario, ¿por qué requerirían que la aplicación muestre la alerta? De acuerdo con AppStore review guidelines:

5.3 Aplicaciones que envían notificaciones Push sin obtener primero el consentimiento del usuario será rechazado

Por ejemplo Path (aplicación) pide al usuario que opt-in para la notificación de inserción en el medio de la canta-up proceso, no cuando la aplicación comienza por primera vez.

No estoy seguro de cuál debe ser el propósito del aviso de todos modos, ya que la aplicación no puede consultar el estado de la configuración de notificación. En particular, la aplicación puede verificar qué tipos de notificación (usando enabledRemoteNotificationTypes) están habilitados, pero NO si las notificaciones push para una aplicación en particular están habilitadas o deshabilitadas (el interruptor de ENCENDIDO/APAGADO del centro de notificaciones en la parte superior). Al menos ese es el comportamiento en iOS 5.1. Incluso si el usuario deshabilita las notificaciones para esa aplicación, la aplicación aún puede registrarse para recibir notificaciones push (usando registerForRemoteNotificationTypes) y recibirá un token APNS.

+0

thanks :) ¿sabes qué debo hacer para obtener la ventana emergente de "permitir el envío de esta aplicación" que el usuario recibe la primera vez que inicia la aplicación? Lo necesito para depurar diferentes escenarios, traté de eliminar la aplicación y volver a instalarla, pero no tenía el pop box ... – Eyal

+0

Edité la respuesta para incluir algunos enlaces que pueden ser útiles. Sin embargo, muchos desarrolladores se quejan de que el procedimiento descrito por Apple no funciona. Nunca he visto el diálogo de permisos al desarrollar mi aplicación, así que ni siquiera sabía que existía hasta que leí algunas publicaciones de otros desarrolladores. – Amiramix

+0

La última parte no es cierta, al menos en iOS 7, enabledRemoteNotificationTypes es solo para su aplicación y si el usuario configura las notificaciones en ninguna, no recibirá el token de APN. – jcesarmobile

6

Compruébalo cuando tu aplicación se active en lugar de solo al iniciarla.

0

Este es un ejemplo cuando Push se implementa a través de UrbanAirShip. Cada vez que el usuario opta por la opción de exclusión voluntaria para seguir los incendios de delegados y con un método debajo de este, puede verificar (SÍ/NO).

Lo mismo se puede lograr con el delegado UIApplication si no utiliza UrbanAirShip.

- (void)registrationSucceededForChannelID:(NSString)channelID deviceToken:(NSString)deviceToken 
    { 
     NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification][email protected]"YES":@"NO"); 
    } 


    - (BOOL)appRegisterForPushNotification { 
     if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) { 
      UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; 
      return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound)); 
     } 
     return NO; 
    } 
Cuestiones relacionadas