es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La aplicación no se está abriendo cuando se toca la notificación push en iOS, Swift.

Ahora he integrado las notificaciones push en mi aplicación utilizando FirebaseNotifications. Para esto, utilizo un NotificationServiceExtension para el procesamiento (CoreData, …) y los métodos habituales, como didReceiveRemoteNotification, willPresent o didReceive en AppDelegate.

El procesamiento del contenido y la visualización de la notificación push funcionan perfectamente en todos los estados de la aplicación, tanto en segundo plano como en primer plano.

Si la aplicación está en primer plano o en segundo plano, pero no está cerrada, también funciona al tocar la notificación push y se llama al método didReceive, y puedo navegar hacia el contenido deseado.

Si la aplicación se cierra por completo, al tocar la notificación push unos segundos más tarde se inicia la aplicación, pero no se muestra la pantalla de inicio habitual (pantalla de inicio rápido) y no ocurre nada más, la aplicación permanece en una pantalla blanca.

Al principio sospeché que había olvidado llamar a un completionHandler, pero todos están almacenados y no encuentro ningún error en ningún lado.

¿Alguien puede ayudarme, dónde podría haber algún problema para que se llame a la pantalla de inicio rápido, luego a AppDelegate y a mi ViewController normal?

Gracias, aquí está mi código en AppDelegate. Desafortunadamente, no tengo un registro porque la aplicación debe cerrarse por completo y, por lo tanto, no tengo ninguna salida en la consola de Xcode.

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    completionHandler(UIBackgroundFetchResult.newData)
}

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([[.alert, .badge, .sound]])
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    defer {
        completionHandler()
    }

    if response.actionIdentifier == "friends" {
        print("Se pulsó el botón Abrir.")

        // TODO: - Deep link to friends
    }
    completionHandler()
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    A partir del código proporcionado en AppDelegate, parece que no hay ningún problema con el manejo de las notificaciones push. Sin embargo, el problema de que la aplicación se quede en una pantalla blanca al ser lanzada desde una notificación push después de haber sido completamente cerrada podría estar relacionado con el proceso de inicio de la aplicación.

    Cuando una aplicación se inicia después de haber sido completamente cerrada, el proceso de inicio implica varios pasos que pueden causar retrasos en la carga del contenido de la aplicación. Estos pasos incluyen verificar la firma de la aplicación, cargar frameworks, cargar recursos desde el bundle, etc.

    Para asegurarte de que el proceso de inicio funciona correctamente en todos los casos, puedes probar lo siguiente:

    1. Asegúrate de que los métodos de tu delegado de la aplicación no bloqueen el hilo de la interfaz de usuario o realicen tareas pesadas en el hilo principal. Si lo hacen, puedes considerar moverlos a un hilo en segundo plano para evitar bloquear la interfaz de usuario.
    2. Comprueba si tu aplicación utiliza storyboards y si se cargan correctamente durante el proceso de inicio. Si sospechas que los storyboards pueden estar causando el problema, puedes intentar cargar el controlador de vista inicial manualmente desde AppDelegate.

    3. Verifica si hay alguna biblioteca o framework de terceros que pueda estar causando el problema. Puedes intentar desactivarlos temporalmente para ver si el problema persiste.

    4. Comprueba si hay otros errores o problemas en los registros de tu aplicación que puedan estar causando el problema. Si no tienes acceso a los registros, puedes intentar utilizar un servicio de informes de accidentes para recopilar informes de accidentes de los usuarios.

    5. Si ninguno de los pasos anteriores funciona, puedes considerar utilizar un depurador para analizar el proceso de inicio y ver dónde se está atascando la aplicación.

    En general, es importante asegurarse de que el proceso de inicio de tu aplicación sea fluido y eficiente para evitar problemas como el que estás experimentando.

Comments are closed.