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.

No se puede abrir una URL cuando se lanza una aplicación en React Native.

Aquí está lo que estoy haciendo:
Cuando un usuario hace clic en la notificación push, estoy creando un enlace que es manejado por MyApp mediante deep linking para navegar a una pantalla específica. Ejemplo:
– Se recibe la notificación push
– Se crea un Intent ACTION_VIEW y se pasa al PendingIntent
– El usuario toca la notificación
– El usuario es dirigido a una pantalla específica

Funciona muy bien cuando la aplicación está en primer plano. Pero el problema es que cuando abro una URL y la aplicación se lanza desde el toque de la notificación, no funciona. Específicamente, la parte de startActivity (intent). Puedo ver los registros en Logcat pero la URL no se abre. A continuación se muestra el código que está obteniendo los datos de la notificación push y creando una URL.

package com.myapp;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

import com.facebook.react.ReactActivity;

public class MainActivity extends ReactActivity {
    final String TAG = "MAIN";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(null);
        Intent i = getIntent();
        final String tenantId = i.getStringExtra("tenantId");
        if (tenantId != null) {
            String uriString = BuildConfig.URL_SCHEME + "://tenant/" + tenantId;
            Log.d(TAG, uriString);
            Uri uri = Uri.parse(uriString);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);

        }
    }


    @Override
    protected String getMainComponentName() {
        return "myapp";
    }

}

Por favor, ayúdeme si me estoy perdiendo algo o haciendo algo mal. Agradecería sus comentarios. Gracias.

P.D. ¿Tiene algo que ver este android:launchMode=”singleTask” con lo que quiero hacer?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El problema parece estar relacionado con el modo de inicio de la actividad. android:launchMode="singleTask" crea una nueva instancia de la actividad si no existe, pero si ya existe, la trae al frente con la nueva intención.

    Entonces, en su caso, cuando la aplicación ya está en ejecución en primer plano y hace clic en la notificación push, trae la actividad existente al frente con la nueva intención y abre correctamente la URL.

    Pero cuando la aplicación no está en ejecución, se inicia MainActivity con la nueva intención y se llama a onCreate. Aquí, está creando una nueva intención para abrir la URL y comenzándola con startActivity(intent). Esto crea una nueva instancia de la actividad en segundo plano y la trae al frente, pero no maneja adecuadamente la intención para abrir la URL.

    Entonces, para solucionar este problema, puede intentar eliminar android:launchMode="singleTask" de la declaración de MainActivity en el archivo manifiesto. Esto creará una nueva instancia de la actividad cada vez que se lance, y la nueva intención se manejará correctamente para abrir la URL.

    Si eso no funciona, puede intentar manejar la intención en el método onNewIntent en lugar del método onCreate. Este método se llama cuando se recibe una nueva intención mientras se está ejecutando la actividad. Puede agregar el siguiente código a su MainActivity para manejar la intención en onNewIntent:

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        final String tenantId = intent.getStringExtra("tenantId");
        if (tenantId != null) {
            String uriString = BuildConfig.URL_SCHEME + "://tenant/" + tenantId;
            Log.d(TAG, uriString);
            Uri uri = Uri.parse(uriString);
            Intent newIntent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(newIntent);
        }
    }
    

    Esto manejará adecuadamente la nueva intención y abrirá la URL incluso cuando la aplicación se inicie desde el toque de la notificación.

    ¡Espero que esto ayude!

Comments are closed.