ver recuperar pantalla notificaciones historial funciona como centro borradas bloqueada aparece ios objective-c swift apple-push-notifications push

recuperar - Cómo capturar todas las notificaciones push de iOS con diferentes acciones del usuario, como tocar el ícono de la aplicación



recuperar notificaciones iphone (5)

Según la guía de Apple:

"Como resultado de la notificación presentada, el usuario toca el botón de acción de la alerta o toca (o hace clic) el ícono de la aplicación. Si se toca el botón de acción (en un dispositivo con iOS), el sistema inicia la aplicación y la aplicación. llama a la aplicación de su delegado: didFinishLaunchingWithOptions: método (si está implementado), pasa la carga útil de notificación (para notificaciones remotas) o el objeto de notificación local (para notificaciones locales).

Si el icono de la aplicación se toca en un dispositivo que ejecuta iOS, la aplicación llama al mismo método, pero no proporciona información sobre la notificación. Si se hace clic en el ícono de la aplicación en una computadora que ejecuta Mac OS X, la aplicación llama al método ApplicationDidFinishLaunching del delegado: método en el cual el delegado puede obtener la carga útil de notificación remota ".

Mi pregunta es Supongamos que el usuario recibió 3-4 notificaciones push del proveedor y todas están almacenadas en el centro de notificaciones de Apple. Si el usuario pulsó en alerta de notificación, él / ella puede obtener fácilmente los datos de notificación en la aplicación. Pero si el usuario pulsó el ícono de la aplicación en el iPhone, cómo obtener todos los datos relacionados con todas las notificaciones anteriores.

¡Gracias por adelantado!


Conceptualmente, cuando la aplicación se carga con la vista de alerta de clic presentada para la notificación de inserción, se inicia la aplicación con el método delegado didReceiveLocalNotification si la aplicación está en segundo plano. En este punto no se llama el método delegado applicationDidFinishLaunching .

Cuando su aplicación no esté en segundo plano, al hacer clic en la vista de alerta presentada para la notificación Push se llamará el método applicationDidFinishLaunching .

Espero que esto aclare su comprensión entre estos 2 métodos de delegado.


No puedes, solo recibirás información sobre la notificación que se utilizó para abrir tu aplicación.

Entonces, si un usuario abre su aplicación y su aplicación tiene notificaciones, no podrá recuperarlas desde su aplicación.

Una solución alternativa podría ser también realizar un seguimiento de las notificaciones en un servidor y manejar esto en la aplicación. De este modo, el servidor realiza un seguimiento de la notificación que se ha leído. Así es como lo hace Facebook.


Para hacerlo de manera correcta, se deben cumplir algunas condiciones:

Su servidor sabe lo que su aplicación ha visto actualmente y las notificaciones que podría enviar una vez más.

Consideremos solo las notificaciones remotas. Hay tres estados de aplicación:

  • ANTECEDENTES :

    • la notificación aparece sin la acción del usuario:

      func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { //handle your notification }

    Puede mostrar el banner utilizando una biblioteca de terceros: BSForegroundNotification

  • FONDO

    • La notificación aparece en la pantalla. (Tenga en cuenta que configurar el contenido disponible = 1 en una notificación de inserción puede hacer que el último mensaje de inserción sea visible una vez que se presiona el ícono de la aplicación, como se llamó didReceive ...).

      //nothing is called in the app, but app icon badge changes // OR - if the notification contains the field content-available set to 1 - func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { //handle your notification }

    • usuario toque en la notificación

      func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { //handle your notification }

    • usuario tomar acción de notificación

      func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void) { //handle your notification''s action }

      o

      func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) { //handle your notification''s action response info }

    • icono de la aplicación

      func applicationDidBecomeActive(application: UIApplication) { //fetch pending notifications from server }

  • No corriendo en absoluto

    • La notificación aparece en la pantalla.

      //nothing is called in the app, but app icon badge changes

    • usuario toque en la notificación

      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject: AnyObject] { //handle your notification } }

    • usuario tomar acción de notificación

      func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void) { //handle your notification''s action }

      o

      func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) { //handle your notification''s action response info }

    • usuario toca el icono de la aplicación

      func applicationDidBecomeActive(application: UIApplication) { //fetch pending notifications from server }

¿Cómo manejar la notificación?

  1. let notification = WLNotification(userInfo: userInfo)

    Dentro de WLNotification recuerde mantener el estado actual de la aplicación cuando reciba la notificación. En el futuro, es posible que lo necesite para saber de dónde proviene esa notificación.

  2. WLNetworkClient.sharedClient().notificationForIdentifier(notification.identifier)

    Obtenga los detalles del servidor sobre esa notificación y, al mismo tiempo, hágale saber que REALMENTE recibe esa notificación y que se realiza en los datos del usuario.

¿Cómo recuperar todas las notificaciones pendientes?

WLNetworkClient.sharedClient().pendingNotificationsWithCompletionBlock(nil)

Recupera todas las notificaciones que te perdiste. en otras palabras, recupere aquellos que no fueron marcados en el servidor como los recibió usted.

Lea las limitaciones de las notificaciones push de Apple .

Vea las preguntas relacionadas:

  • ¿Cómo asegurar que la aplicación iOS haya recibido CADA notificación de envío enviado por el servidor?

Puedes usar este código:

NSArray *pendingNotifications = [[[UIApplication sharedApplication] scheduledLocalNotifications] sortedArrayUsingComparator:^(id obj1, id obj2) { if ([obj1 isKindOfClass:[UILocalNotification class]] && [obj2 isKindOfClass:[UILocalNotification class]]) { UILocalNotification *notif1 = (UILocalNotification *)obj1; UILocalNotification *notif2 = (UILocalNotification *)obj2; return [notif1.fireDate compare:notif2.fireDate]; } return NSOrderedSame; }]; // if there are any pending notifications -> adjust their badge number if (pendingNotifications.count != 0) { //do something }


Tuve el mismo problema: si el usuario hace clic en el banner de inserción, obtiene información de la aplicación de inserción, si hace clic en el ícono de la aplicación, no la recibe. Puede manejar un derivado de él, pero solo con algunos límites. Ejemplo, si desea tener un número de credencial de push, puede hacerlo: (Push -> App icon -> App icon -> su var)

en AppDelegate

- (void)applicationWillEnterForeground:(UIApplication *)application { newMessages = application.applicationIconBadgeNumber; }