Gestión de datos de carga de notifications push

Estoy buscando el modo de manejar los datos de la carga útil de notifications push tan pronto como la notificación llega a la aplicación del cliente sin abrirlos o presionarlos. Y todavía no estoy recibiendo los datos a less que el usuario los toque o los abra desde el centro de notifications o banner o alert.La function didReceiveRemoteNotification solo se activó cuando el usuario hace clic en la notificación en la pantalla. Entonces, cómo get los datos de la carga de notificación cuando la notificación llega a la aplicación del cliente, incluso el usuario ignora (sin abrir o toque).

INFORMACIÓN: Escuché que GCM (Google Cloud Messaging) puede hacer un manejador de notifications si el usuario de la aplicación cliente tocó la notificación o no. Puede capturar los datos de json de la carga de notificación tan pronto como llegue a la aplicación del cliente sin necesidad de que el usuario toque o abra ¿Es cierto?

Realmente necesito una mano para que me recoja con la obtención de datos de carga de notificación en ios sin necesidad de que un usuario abra o toque.

Actualización: la aplicación todavía se está ejecutando en el dispositivo, lo que significa que estaba activa. Puedo get los datos de carga cuando hago clic en mi notificación que era "{aps:} json, lo consigo. Pero todavía no puedo get los datos cuando no lo hago" t abrir la notificación "

Aquí está mi estado

Cuando la aplicación estaba en primer plano, obtengo los datos. 1. Ejecuto la aplicación,

2. enviar notificación,

3. Obtenga la notificación con una alerta,

4. Obtengo los datos (carga útil).

Funciona bien cuando la aplicación está activa.

Pero, cuando la aplicación llega a segundo plano

1. Ejecutar la aplicación,

2. Cierre la aplicación presionando el button de inicio,

3. envíe la notificación,

4. Obtenga la notificación.

5.Pero, no puedo get los datos hasta que hago clic en la notificación que recibí en el banner o centro de notifications.

Pero, cuando hago clic en la notificación en el banner o notificación, fue a la aplicación y luego recibo los datos.

¿Hay alguna forma en que puedo get los datos si la aplicación está en segundo plano cuando se recibió la notificación?

Aquí está el código:

import UIKit import RealmSwift let realm = try! Realm() @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var data : [NSObject : AnyObject]! func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { //one singnal is the push notification service that i use for push notification. let oneSignal = OneSignal(launchOptions: launchOptions, appId: "__app_id__") { (message, additionalData, isActive) in NSLog("OneSignal Notification opened:\nMessage: %@", message) if additionalData != nil { NSLog("additionalData: %@", additionalData) } } oneSignal.enableInAppAlertNotification(true) return true } func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { print("User Info : \(userInfo)") if let custom = userInfo["custom"] as? NSDictionary{ if let a = custom["a"] as? NSDictionary{ print("A : \(a)") } } } 

Me encontré con el mismo problema. Como se mencionó en los comentarios anteriores, esta publicación es muy útil.

De acuerdo con Apple ,

Cuando llega una notificación remota, el sistema muestra la notificación al usuario e inicia la aplicación en segundo plano (si es necesario) para que pueda llamar a este método. Al iniciar su aplicación en segundo plano, le da time para procesar la notificación y download los datos asociados, minimizando el time que transcurre entre la llegada de la notificación y la visualización de esa información al usuario.

Lo primero que debes hacer es permitir que tu aplicación haga algo cuando esté en segundo plano. Para ello, agregue el Requinetworking background mode en su info.plist, luego agregue el App downloads content in response to push notifications . Su info.plist debería verse así:

info.plist Modalidades de fondo requeridas

Ahora que esto se hace, su aplicación debe despertarse cuando reciba una notificación. Puede ejecutar un pequeño código dentro de didReceiveRemoteNotification . Como esto.

 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { //do some code here UIBackgroundFetchResult.NewData } 

Tenga en count que debe prestar atención a completionHandler:

Tan pronto como termine de procesar la notificación, debe llamar al bloque en el parámetro del manejador o se finalizará su aplicación. Su aplicación tiene hasta 30 segundos de time en el reloj de panetworking para procesar la notificación y llamar al bloque del manejador de finalización especificado.

Avísame si todo está claro 🙂