prende porque poner parpadeo para notificaciones luz localizacion frontal como activar objective-c ios8 apple-push-notifications

objective-c - porque - led notificaciones iphone 7



Notificación remota iOS 8 (7)

¿Cómo puedo obtener el token de dispositivo para notificación remota en iOS 8? Utilicé el método didRegisterForRemoteNotificationsWithDeviceToken en AppDelegate en iOS <8, y devolvió el token del dispositivo. Pero en iOS 8, no es así.


Lea el código en UIApplication.h.

Sabrá cómo hacer eso.

Primero:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

agregar código como este

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { #ifdef __IPHONE_8_0 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil]; [application registerUserNotificationSettings:settings]; #endif } else { UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound; [application registerForRemoteNotificationTypes:myTypes]; }

si no usa tanto Xcode 5 como Xcode 6 , pruebe este código

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert) categories:nil]; [application registerUserNotificationSettings:settings]; } else { UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound; [application registerForRemoteNotificationTypes:myTypes]; }

(Gracias por el recuerdo de @zeiteisen @dmur)

Segundo:

Agregar esta función

#ifdef __IPHONE_8_0 - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { //register to receive notifications [application registerForRemoteNotifications]; } - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler { //handle the actions if ([identifier isEqualToString:@"declineAction"]){ } else if ([identifier isEqualToString:@"answerAction"]){ } } #endif

Y tu puedes obtener el dispositivo conectado en

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

si aún no funciona, use esta función y NSLog el error

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error


Creo que la mejor manera de mantener la compatibilidad con versiones anteriores es que podemos seguir este enfoque, está funcionando para que mi caso funcione bien para usted. También es bastante fácil de entender.

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; }


En mi caso, había hecho las actualizaciones necesarias para solicitar el acceso de notificación push para iOS 7 e iOS 8, sin embargo, no había implementado la nueva devolución de llamada para cuando un usuario de iOS 8 concede acceso. Necesitaba agregar este método a mi delegado de la aplicación.

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [application registerForRemoteNotifications]; }


La forma de registrarse para iOS 8 y seguir admitiendo versiones anteriores

UIApplication *application = [UIApplication sharedApplication]; if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound |UIUserNotificationTypeAlert) categories:nil]; [application registerUserNotificationSettings:settings]; } else { UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound; [application registerForRemoteNotificationTypes:myTypes]; }

y en la aplicación delegar agregar

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [application registerForRemoteNotifications]; }

iOS8 puede recibir notificaciones silenciosas sin pedir permiso. Call - (void)registerForRemoteNotifications . Después de esta application:didRegisterForRemoteNotificationsWithDeviceToken:

Nota: solo se llama a la devolución de llamada con el token si la aplicación se ha registrado satisfactoriamente para notificaciones de usuario con la función siguiente o si está habilitada la actualización de la aplicación en segundo plano.

Compruebe la configuración de su aplicación si está habilitado cualquier tipo de notificación. Si no, no obtendrás un token de dispositivo.

Ahora puede obtener notificaciones silenciosas con

aps { content-available: 1 }

en la carga de notificaciones

Pero las notificaciones que aparecen todavía necesitan permiso. Llamada

UIUserNotificationType types = UIUserNotificationTypeSound | UIUserNotificationTypeBadge | UIUserNotificationTypeAlert; UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; [application registerUserNotificationSettings:notificationSettings];

Este código debe pedir permiso.

Ahora debería estar listo para recibir notificaciones push


La respuesta de Madao ( https://.com/a/24488562/859742 ) es correcta, pero ...

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge

debería ser más "correcto"

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];

Esos indicadores tienen los mismos valores de máscara de bit y es por eso que ambos funcionarían, pero UIUserNotificationSettings requiere UIUserNotificationType no UIRemoteNotificationType .

Aparte de eso, yo llamaría

[application registerUserNotificationSettings:settings];

En el método AppDelegate (dependiendo de los derechos otorgados),

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings


Si está utilizando Xamarin.iOS para compilar su aplicación móvil, puede usar este fragmento de código para solicitar el registro de notificación de inserción

if (UIDevice.CurrentDevice.CheckSystemVersion(8,0)) { UIUserNotificationType userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound; UIUserNotificationSettings settings = UIUserNotificationSettings.GetSettingsForTypes(userNotificationTypes, null); UIApplication.SharedApplication.RegisterUserNotificationSettings(settings); } else { UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound; UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes); }

También deberá anular el método DidRegisterUserNotificationSettings para obtener el token del dispositivo devuelto por el servidor APNS:

public override void DidRegisterUserNotificationSettings(UIApplication application, UIUserNotificationSettings notificationSettings) { application.RegisterForRemoteNotifications(); }


UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; [application registerForRemoteNotifications];