2011-03-22 10 views

Respuesta

11

Trate evocando este método [[UIApplication sharedApplication] enabledRemoteNotificationTypes]

Se devolverá un UIRemoteNotificationType que se puede trabajar con para determinar lo que está disponible.

UIRemoteNotificationType status = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 

Ahora, el estado puede ser considerado como un int usando NSLog(@"status = ", status);, a la que podemos determinar exactamente lo que está encendido. Pero para hacer esto, necesitamos entender UIRemoteNotificationType.

typedef enum { 
    UIRemoteNotificationTypeNone = 0, 
    UIRemoteNotificationTypeBadge = 1 << 0, 
    UIRemoteNotificationTypeSound = 1 << 1, 
    UIRemoteNotificationTypeAlert = 1 << 2, 
    UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3 
} UIRemoteNotificationType; 

Sin entrar en mucho detalle, lo que básicamente necesita para alejarse de este saber es que ...

  • Si insignias están encendidas, añadir 1
  • Si el sonido está activado, agregue 2
  • Si están en alerta, añadir 4
  • Si Quiosco contenido está disponible, agregue 8 (no voy a preocuparse por este tipo)

Supongamos que quiere saber si las insignias/sonidos/alertas están encendidos. El UIRemoteNotificationType (estado si está jugando) debería ser 7.

Ahora, trabaje hacia atrás. Digamos que status == 5. Solo hay una configuración de configuración que puede darnos este valor, y eso es si las insignias y las alertas están activadas (las credenciales agregan 1, las alertas agregan 4, el total es 5) y el sonido está desactivado.

¿Qué pasa si status == 6? De nuevo, solo hay una configuración de configuraciones que devolverá este número, y eso es si las alertas y el sonido están encendidos, mientras que las insignias están desactivadas.

Usando IF, podemos hacer algo como

If (status == 5) 
{ 
    NSLog(@"User has sound alerts disabled"); 
    [self fireThatSpecialMethod]; 
} 

Para ejecutar un bloque de conjunto de código, o disparar un método particular para cuando el sonido está desactivado, pero todo lo demás está encendido. De todos modos, ¡espero que esta respuesta sea útil para las personas!

+0

esto realmente me ayuda –

0

nota de que al iOS 8 el método que busca determinar si se registran notificaciones remotas es la siguiente:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications] 

Es posible determinar qué tipo de notificaciones al usuario, ha permitido que actualmente usan el siguiente método

[[UIApplication sharedApplication] currentUserNotificationSettings] 

Esto devuelve una UIUserNotificationSettings objeto con toda la información que necesitas

Enlaces Documentación:

isRegisteredForRemoteNotifications

currentUserNotificationSettings

UIUserNotificationSettings

Cuestiones relacionadas