Reciba notificaciones push mientras la aplicación está en primer plano iOS

Resuelto Ab'initio asked hace 54 años • 20 respuestas

Estoy usando el servicio de notificaciones push en mi aplicación. Cuando la aplicación está en segundo plano, puedo ver la notificación en la pantalla de notificación (la pantalla se muestra cuando deslizamos el dedo hacia abajo desde la parte superior del dispositivo iOS). Pero si la aplicación está en primer plano, el método delegado

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

Está recibiendo una llamada pero la notificación no se muestra en la pantalla de notificación.

Quiero mostrar notificaciones en la pantalla de notificaciones independientemente de si la aplicación está en segundo plano o en primer plano. Estoy cansado de buscar una solución. Cualquier ayuda es muy apreciada.

Ab'initio avatar Jan 01 '70 08:01 Ab'initio
Aceptado

Para mostrar un mensaje de banner mientras la aplicación está en primer plano, utilice el siguiente método.

iOS 10, Rápido 3/4 :

// This method will be called when app received push notifications in foreground
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
{
    completionHandler([.alert, .badge, .sound])
}

iOS 10, rápido 2.3 :

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void)
{
    //Handle the notification
    completionHandler(
       [UNNotificationPresentationOptions.Alert,
        UNNotificationPresentationOptions.Sound,
        UNNotificationPresentationOptions.Badge])
}

También debes registrar el delegado de tu aplicación como delegado del centro de notificaciones:

import UserNotifications

// snip!

class AppDelegate : UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate

// snip!

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

      // set the delegate in didFinishLaunchingWithOptions
      UNUserNotificationCenter.current().delegate = self
      ...
   }
chengsam avatar Nov 23 '2016 04:11 chengsam

El siguiente código funcionará para usted:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  {
    application.applicationIconBadgeNumber = 0;             
    //self.textView.text = [userInfo description];
    // We can determine whether an application is launched as a result of the user tapping the action
    // button or whether the notification was delivered to the already-running application by examining
    // the application state.

    if (application.applicationState == UIApplicationStateActive) {                
        // Nothing to do if applicationState is Inactive, the iOS already displayed an alert view.                
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Did receive a Remote Notification" message:[NSString stringWithFormat:@"Your App name received this notification while it was running:\n%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];          
    }    
}
 avatar Feb 14 '2013 10:02