简体   繁体   中英

Intent filter for opening app from a link not working in Samsung Browser/Firefox etc. but working in Chrome

I have been experimenting with the Intent Filters for the past few hours, and I am really confused as to why the Google tutorial code for Handling App Links via Intent Filters is not working on my physical Samsung S8 devices's default Samsung browser or Firefox installed on it however working from the Google Chrome app.

The code also works both in the default Android Studio Nexus 5's emulator default browser app as well as from Google Chrome.

Here is the relevant code I have in the AndroidManifest.xml of the bare-bones app I am trying to diagnose the problem with:

<intent-filter">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:host="www.android.com"  />
</intent-filter>

What I am doing to test:

I click on a link for https://www.android.com from a search results page on Google.

I expect to see a open with dialog with my test apps name however it does not show when I try this from anything but the the google chrome browser (and the Nexus 5 emulators default browser) it just automatically shows the webpage with no popup dialog.

NB I have tried also tried the following things so far to no avail:

  • Changing the first line to <intent-filter android:autoVerify="true">
  • Adding the line <data android:host="www.android.com/" /> in case the the problem has anything to do with the / at the end of URL.
  • Clearing the both browsers data/storage & generally resetting it.

Does anyone know why this is happening / how to fix this?

The browsers itself need to support and implment the browsability. The browsers have to find other activities supporting android.intent.category.BROWSABLE when opening a web-page.

Firefox implements a less invasive experience to the user. When an url is opened which has a deep link to an app, the url bar displays a page action with a little Android head. Clicking on this one will open the link with an Android activity other than a browser.

The behavior of the Android browser and Chrome you observed and made your expectation. So nothing to add to this.

I'm not sure if I can fully talk about the Samsung browser, because the versions I have on my devices might be somehow outdated; but I couldn't make it work with these at all.

The android:autoVerify attribute only makes the app the default on installation. android:host="www.android.com/" is just wrong, because / is the path and not part of the host.

You can fix this by go to Samsung Browser setting > Useful features > Open links in other apps在此处输入图片说明

This may be late for you but hope it will help others.

Opening the app for certain links only

<intent-filter>
  <action android:name="android.intent.action.VIEW"></action>
  <category android:name="android.intent.category.DEFAULT"></category>
  <category android:name="android.intent.category.BROWSABLE"></category>
  <data android:scheme="spuul"></data>
</intent-filter>

With this, all URI's like spuul://movies/123 will be openend by the app. The app is then able to handle this URI and launch the correct content. The link to Google Play like market://details?id=com.spuul.android.

Fallback to market if app is not installed

<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
<data android:scheme="http" android:host="android.app.spuul.com" android:pathPrefix=""></data>
</intent-filter>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM