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?
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 aonCreate
. Aquí, está creando una nueva intención para abrir la URL y comenzándola constartActivity(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 deMainActivity
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étodoonCreate
. 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 suMainActivity
para manejar la intención enonNewIntent
: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!