Bloquear sitio web para móviles para abrir mi aplicación Android deeplink – Google Chrome

He apoyado deeplinks en mi aplicación

<activity android:name=".DeepLinkActivity" android:noHistory="true"></activity> <activity-alias android:name="com.example.Launcher" android:targetActivity=".DeepLinkActivity"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:scheme="http" /> <data android:scheme="@string/SCHEMA" /> <data android:host="@string/WEB_DOMAIN" /> <data android:host="@string/WWW_WEB_DOMAIN" /> <data android:path="/" /> <data android:path="/x" android:pathPattern="/x/.*" /> </intent-filter> </activity-alias> 

Por lo tanto, cuando el usuario hace clic en www.example.com, la aplicación android pide que se abra como una aplicación o una web que está bien, pero no quiero que cuando mis usuarios se encuentren en sitios móviles se les debe pedir que se abran en la aplicación. He pasado por muchos posts stackoverflow, pero todo el mundo dice que no es posible, pero todavía muchos sitios web están manejando este escenario.

Según este artículo el comportamiento depende de los gestos del usuario, si el usuario está haciendo clic en cualquier enlace, entonces Chrome muestra un selector, mientras que si el usuario está escribiendo url en el navegador, entonces no.

Después de mucha investigación lo he resuelto. Se puede utilizar de cualquier manera.

Manejar en el sitio web para móviles: Por lo tanto, si desea convertir a su usuario en Chrome siempre cuando están en su msite, puede lograrlo redirigiendo todas sus URL a

  • Googlechrome: // navegar? Url = https://www.example.com
  • Intento: //www.example.com/x#Intent; esquema = https; package = com.android.chrome; S.browser_fallback_url = https: //www/example.com/x; action = android.intent.action. VIEW ;

Administrar en la aplicación

  • Crea una sola actividad transparente para manejar todos tus deeplinks

  • Manejar todos los enlaces usando pathpattern = '. *'

  • Redirigir usuario de nuevo a Chrome para urls que no quieres manejar en la aplicación.

No sé la lógica exacta detrás de esto, pero funcionó.

AndroidManifest.xml

  <activity android:name=".DeepLinkActivity" android:noHistory="true" android:theme="@style/Theme.Transparent"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:scheme="http" /> <data android:scheme="@string/SCHEMA" /> <data android:host="@string/WEB_DOMAIN" /> <data android:host="@string/WWW_WEB_DOMAIN" /> <data android:pathPattern="/.*" /> </intent-filter> </activity> 

DeepLinkActivity

 @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); try { if (Intent.ACTION_VIEW.equals(getIntent().getAction())) { Uri uri = getIntent().getData(); if (uri == null) throw new IllegalArgumentException("Uri can not be null"); Intent intent = null; if (getString(R.string.SCHEMA).equals(uri.getScheme()) || uri.toString().matches(Links.REGEX)) { intent = linkIntent(uri); } if (intent == null) SystemUtil.launchUrlInDefaultBrowser(uri, this); else startActivity(intent); } } catch (IllegalArgumentException e) { Toast.makeText(this, R.string.can_not_open_url, Toast.LENGTH_SHORT).show(); } catch (Exception e) { Toast.makeText(this, R.string.can_not_open_url, Toast.LENGTH_SHORT).show(); } finally { finish(); } } /** * This will open the provided url in browser except the current app. * @param url Uri * @param context Activity Context */ public static void launchUrlInDefaultBrowser(Uri url, Context context) { try { ResolveInfo packageInfo = null; final Intent browserIntent = new Intent(Intent.ACTION_VIEW); browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); browserIntent.setData(url); // Try to find anything that we can launch the URL with. Pick up the first one that can. final List<ResolveInfo> resolveInfoList = context.getPackageManager().queryIntentActivities(browserIntent, PackageManager.MATCH_DEFAULT_ONLY); if (!resolveInfoList.isEmpty()) { for (ResolveInfo list : resolveInfoList) { if (!BuildConfig.APP_PACKAGE_NAME.equals(list.activityInfo.packageName)) { packageInfo = list; break; } } } if (packageInfo != null) { browserIntent.setClassName(packageInfo.activityInfo.packageName, packageInfo.activityInfo.name); context.startActivity(browserIntent); } else { Toast.makeText(context, R.string.can_not_open_url, Toast.LENGTH_SHORT).show(); } } catch (Exception e) { Toast.makeText(context, R.string.can_not_open_url, Toast.LENGTH_SHORT).show(); } } 
  • El atributo pathPrefix de Deeplink de Android se está omitiendo
  • Android deep linking -Using Branch.io no se abre en Android
  • Crear vínculo profundo para la aplicación móvil
  • ¿Cómo conectar profundamente mi aplicación android a paytm y la aplicación freecharge?
  • Modo de inicio de actividad de Android y problema de enlace directo
  • El enlace de la aplicación para Android no funciona correctamente
  • Android deep linking - Pila trasera
  • El enlace dinámico de Firebase no abre / inicia mi aplicación instalada
  • Enlace profundo a través de la Búsqueda de Google - cómo funciona, y qué poner en el manifiesto?
  • Deeplink dinámico en Android
  • Deep Link no funciona en Chrome para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.