iOS recupera la carga de notificación remota

He implementado el método UIApplicationDelegate -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler para manejar notifications push, funciona bien. En algunas situaciones, necesito recuperar la carga de la notificación push. Pero a veces no se llama a este método de delegación.

Tengo una pregunta sobre la recuperación de la carga ( userInfo ) en este escenario:

La aplicación se ejecuta en segundo plano o no se inicia. La aplicación recibió una notificación de inserción, se muestra un banner, se reproduce el sonido y se muestra el post, la insignia del icono de la aplicación aumentó, y la notificación de inserción se puede ver en los centros de notificación de iOS. Si el usuario selecciona la notificación cuando se muestra o en el centro de notifications, la aplicación se inicia y se didReceiveRemoteNotification: método didReceiveRemoteNotification:

Sin embargo , si el usuario simplemente toca el ícono de la aplicación e inicia la aplicación de manera normal, no se llama al método, y no puedo recuperar el userInfo .

De la documentation de Apple sobre el event handling notifications push:

La notificación se entrega cuando la aplicación no se está ejecutando en primer plano. En este caso, el sistema presenta la notificación, muestra una alerta, identifica un ícono, tal vez reproduce un sonido y, tal vez, muestra uno o más botones de acción para que el usuario toque.

El usuario toca un button de acción personalizada en una notificación de iOS 8. En este caso, iOS llama a la aplicación: handleActionWithIdentifier: forRemoteNotification: completionHandler: o application: handleActionWithIdentifier: forLocalNotification: completionHandler :. En ambos methods, obtiene el identificador de la acción para que pueda determinar qué button ha tocado el usuario. También obtendrá el object de notificación remota o local, para que pueda recuperar cualquier información que necesite para manejar la acción.

El usuario toca el button pnetworkingeterminado en la alerta o toca (o hace clic) el ícono de la aplicación. Si se toca el button de acción pnetworkingeterminado (en un dispositivo que ejecuta iOS), el sistema inicia la aplicación y la aplicación llama a la aplicación de su delegado: didFinishLaunchingWithOptions: método, pasando la carga de notificación (para notifications remotas) o el object de notificación local (para notifications locales) Aunque la aplicación: didFinishLaunchingWithOptions: no es el mejor lugar para manejar la notificación, get la carga útil en este punto le da la oportunidad de iniciar el process de actualización antes de llamar al método de controller.

Si la notificación es remota, el sistema también llama a la aplicación: didReceiveRemoteNotification: fetchCompletionHandler :.

Si se hace clic en el icono de la aplicación en una computadora que ejecuta OS X, la aplicación llama al método applicationDidFinishLaunching: del delegado en el que el delegado puede get la carga útil de la notificación remota. 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.

La parte resaltada dice un poco que no hay una forma obvia de acceder a la carga útil de la notificación push de esta manera. Entonces, ¿hay alguna forma de solucionar este problema?

¡Gracias!

Es el comportamiento pnetworkingeterminado de iOS. Nunca sabrá la carga útil a less que el usuario abra su aplicación al tocar la notificación.

Puede usar notifications push muertas si desea enviar datos personalizados (máx. 2048 bytes) o commands a su aplicación mobile. En el set de notifications push 'content-available' a 1, la aplicación obtiene un poco de time para procesar los datos y también agrega su contenido personalizado a la notificación.

También utilizo las notifications push silenciosas para activar mis aplicaciones para actualizar mediante llamadas REST HTTP, ya que mis datos pueden ser más grandes que el tamaño máximo … La única desventaja es que Apple podría bloquear tus actividades de background si necesitas batería o procesador. Las notifications push visuales siempre se entregan.

Las cosas que más detesto son las notifications visuales como "tienes un post nuevo", en el que hago clic a veces cuando no hay connection de datos disponible y la aplicación no me muestra el post … Puedes resolver esto enviando un post de silencio envíe notifications con datos y solo si los datos se pueden get del server, o se almacenan correctamente en caso de que pueda enviarlo todo en la notificación, se establece una notificación local.

Elija entre las notifications push visuales y silenciosas sabiamente es mi único consejo.

Consulte el siguiente enlace para get más información oficial de Apple: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html