por personalizar flotante control centro boton assistive aparece ios cocoa-touch push-notification appdelegate

ios - personalizar - no me aparece el centro de control iphone



Abra un controlador de vista cuando se reciba una notificación de inserción de iOS (3)

Quiero abrir un controlador de vista específico cuando un usuario hace clic en el mensaje de notificación push recibido, pero cuando recibo un mensaje de notificación push y hago clic en el mensaje, solo se abre la aplicación, pero no se redirige a un controlador de vista específico.

Mi codigo es

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { if (applicationIsActive) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Bildirim" message:[NSString stringWithFormat:@"%@ ",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; UIViewController *vc = self.window.rootViewController; PushBildirimlerim *pvc = [vc.storyboard instantiateViewControllerWithIdentifier:@"PushBildirimlerim "]; [vc presentViewController:pvc animated:YES completion:nil]; } }

Mi pregunta está relacionada con las notificaciones push de iOS.


Es posible que tenga problemas con la condición if (applicationIsActive) .

Coloque un punto de interrupción en -didReceiveRemoteNotification y vea si se ejecuta en diferentes escenarios y vea si va dentro de la condición if .

( sin relación hasta cierto punto pero vale la pena revisar ) esta pregunta:
didReceiveRemoteNotification cuando está en el fondo

Nota:

-didReceiveRemoteNotification no se ejecutará si su aplicación ( inicialmente ) se cerró y hizo clic en la notificación de inserción para abrir la aplicación.
Este método se ejecuta cuando se recibe una notificación de inserción mientras la aplicación está en primer plano o cuando la aplicación pasa de segundo plano a primer plano.

Referencia de Apple: https://developer.apple.com/documentation/uikit/uiapplicationdelegate

Si la aplicación se está ejecutando y recibe una notificación remota, la aplicación llama a este método para procesar la notificación. Su implementación de este método debe usar la notificación para tomar un curso de acción apropiado.
...
Si la aplicación no se está ejecutando cuando llega una notificación de inserción, el método inicia la aplicación y proporciona la información adecuada en el diccionario de opciones de inicio. La aplicación no llama a este método para manejar esa notificación de inserción. En cambio, su implementación de la aplicación: willFinishLaunchingWithOptions: o application: didFinishLaunchingWithOptions: el método necesita obtener los datos de la carga útil de notificación de inserción y responder adecuadamente.

Entonces ... Cuando la aplicación no se está ejecutando y se recibe una notificación de inserción, cuando el usuario hace clic en la notificación de inserción, la aplicación se inicia y ahora ... el contenido de la notificación de inserción estará disponible en el método -didFinishLaunchingWithOptions: Parámetro launchOptions .

En otras palabras ... -didReceiveRemoteNotification no se ejecutará esta vez y también deberá hacer esto:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //... NSDictionary *userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; if(apsInfo) { //there is some pending push notification, so do something //in your case, show the desired viewController in this if block } //... }

Lea también el Doc. De Apple sobre el manejo de notificaciones locales y remotas


Estaba teniendo el mismo problema de que cuando la aplicación se suspende / finaliza y llega la notificación de inserción, mi aplicación solo se estaba abriendo y no estaba redirigiendo a la pantalla específica correspondiente a esa notificación, la solución es

in - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions este método el parámetro launchOptions nos dice si tiene la notificación al verificar que necesitamos llamar al método para redirigir a una pantalla específica

El código es el siguiente ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //your common or any code will be here at last add the below code.. NSMutableDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (notification) { //this notification dictionary is same as your JSON payload whatever you gets from Push notification you can consider it as a userInfo dic in last parameter of method -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo NSLog(@"%@",notification); [self showOfferNotification:notification]; } return YES; }

luego, en el método showOfferNotification: notificación, puede redirigir al usuario a la pantalla correspondiente, como ...

//** added code for notification -(void)showOfferNotification:(NSMutableDictionary *)offerNotificationDic{ //This whole is my coding stuff.. your code will come here.. NSDictionary *segueDictionary = [offerNotificationDic valueForKey:@"aps"]; NSString *segueMsg=[[NSString alloc]initWithFormat:@"%@",[segueDictionary valueForKey:@"alert"]]; NSString *segueID=[[NSString alloc]initWithFormat:@"%@",[offerNotificationDic valueForKey:@"id"]]; NSString *segueDate=[[NSString alloc]initWithFormat:@"%@",[offerNotificationDic valueForKey:@"date"]]; NSString *segueTime=[[NSString alloc]initWithFormat:@"%@",[offerNotificationDic valueForKey:@"time"]]; NSLog(@"Show Offer Notification method : segueMsg %@ segueDate %@ segueTime %@ segueID %@",segueMsg,segueDate,segueTime,segueID); if ([segueID isEqualToString:@"13"]){ NSString *advertisingUrl=[[NSString alloc]initWithFormat:@"%@",[offerNotificationDic valueForKey:@"advertisingUrl"]]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:segueMsg forKey:@"notificationMsg"]; [defaults setObject:segueDate forKey:@"notifcationdate"]; [defaults setObject:segueTime forKey:@"notifcationtime"]; [defaults setObject:advertisingUrl forKey:@"advertisingUrl"]; [defaults synchronize]; navigationController = (UINavigationController *)self.window.rootViewController; UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil]; FLHGAddNotificationViewController *controller = (FLHGAddNotificationViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"offerViewController"]; [navigationController pushViewController:controller animated:YES]; } }


Hay un espacio extra en el nombre del identificador. Quítalo y prueba:

UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; PushBildirimlerim* pvc = [mainstoryboard instantiateViewControllerWithIdentifier:@"PushBildirimlerim"]; [self.window.rootViewController presentViewController:pvc animated:YES completion:NULL];