2012-09-09 11 views
5

? Soy consciente de los tipos de autenticación habilitada, pero no me sirve porque si recibo enabledremotenotificationtypes == UIRemoteNotificationTypeNone, no hay forma de que yo pueda diga si el usuario ha 1. aceptado notificaciones push una vez pero luego lo ha desactivado mediante la configuración posterior O 2. notificaciones push rechazadas O 3. nunca ha visto el cuadro de diálogo azul pidiendo permiso. Necesito una manera de diferenciar estos tres casos.¿Cómo puedo determinar si un usuario ha visto alguna vez el cuadro de diálogo solicitando el permiso de notificación de inserción (ios)

Cualquier ayuda será muy apreciada.

+0

Si usted tiene un certificado de desarrollador de iOS, por favor, lea los registros de cambios para iOS 6. Creo que se encontrará la respuesta. –

+1

puede elaborar por favor? – user1657624

+2

vaya a developer.apple.com. Ve a la página beta de iOS 6. Lea los registros de cambios. No puedo dar más detalles aquí, debido al acuerdo de licencia. –

Respuesta

-3

Esta es la forma en que me ocupo de este tipo de situaciones. Soy algo así como novato, así que es posible que esto no sea óptimo, pero funciona para mí. Cree una propiedad intpushNotificationSeen. Si el usuario ve el diálogo y lo rechaza, configure pushNotificationSeen en 1. Si el usuario ve el diálogo y lo acepta, configure pushNotificationSeen en 2. Luego, en la siguiente línea de código, llame a una función como esta (definida en otra parte del código)):

-(void)saveData 
{ 
if (self.pushNotificationSeen) 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setInteger:self.pushNotificationSeen forKey:@"seen?"]; 
    [defaults synchronize]; 
} 
} 

a continuación, agregue las siguientes líneas a viewDidLoad.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
self.pushNotificationSeen = [defaults integerForKey:@"seen?"]; 

En este punto, se puede averiguar lo que el usuario tiene o no lo ha hecho mediante la comprobación para ver si self.pushNotificationSeen es 0, 1 ó 2.

espero que esto es suficiente información - Estoy corriendo sin dormir mucho. Si he sido confuso, házmelo saber y puedo aclararlo.

+0

El problema es: ¿cómo saber cuándo se ha visto la notificación de inserción? – Marty

+0

¿Cómo sabes si el usuario otorgó permiso? – Andy

1

La solución es un poco hack, pero funciona. Es necesario llamar registerUserNotificationSettings por dos notificationSettings diferentes - uno sin notificationCategory y otro con un notificationCategory:

//Request notification permission 
UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; 
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; 

//Request notification permission again, but with a category with no actions 
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init]; 
category.identifier = @"com.xyz.markNotificationPopupShownCategoryIdentifier"; 

UIUserNotificationSettings *notificationSettingsWithCategory = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:[NSSet setWithObject:category]]; 
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettingsWithCategory]; 

Los didRegisterUserNotificationSettings: (UIUserNotificationSettings *) método notificationSettings en el delegado de la aplicación se llamará dos veces, y con independencia de la la respuesta del usuario en la notificación de permiso, después de la segunda llamada, la configuración de notificación actual contendrá la categoría. Mientras la categoría recuento es mayor que 0, puede estar seguro de que el diálogo de notificaciones permiso se ha demostrado:

if ([UIApplication sharedApplication].currentUserNotificationSettings.categories.count > 0) { 
    NSLog(@"Notifications permissions has been asked"); 
} else { 
    NSLog(@"Notifications permissions hasn't been asked"); 
} 
+0

Devuelve 1 para mí, aunque no se muestra ningún cuadro de diálogo –

Cuestiones relacionadas