我为我的一个活动创建了一个intent过滤器,以便能够通过深层链接启动它:
<activity
android:name="com.myapp.activities.LoginActivity"
android:label="@string/app_name">
<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:host="myserver.com"
android:pathPrefix="/product/"
android:scheme="https" />
<data
android:host="www.myserver.com"
android:pathPrefix="/product/"
android:scheme="https" />
</intent-filter>
</activity>
大多数情况下一切正常。当我从任何电子邮件客户端,whatsapp消息或推文中点击这些链接,在应用选择器对话框中选择任何浏览器时,它会识别我的意图过滤器并打开正确的活动。这意味着我的意图过滤器已定义好了。
但是......在某些情况下,我需要从设备的日历或HTMLViewer中单击这些链接。在这些情况下,当我选择股票浏览器时,我的应用程序未打开。它只是打开带有URL地址的浏览器。当我选择设备的股票浏览器时,就会发生这种情况。当我选择其他浏览器(例如Chrome)时,应用程序会正确打开。 知道为什么会这样吗?或者如何在所有情况下启用深层链接?
2个重要说明:
我现在正在Galaxy S3上测试这个。我知道Galaxy设备上的浏览器本身并不被认为是“库存”。我仍然希望找到适用于所有设备的解决方案。
深层链接的url地址是在浏览器端运行javascript的实际地址。对于未在用户设备上安装应用程序的情况,它会将其重定向到Play商店。我这样说是因为如果他们可以解决这个问题,我也会对服务器端解决方案开放。我看到了Question,但那里的答案对我不起作用。
无论如何,我非常感谢SO社区提供的任何帮助。这对我来说是一种痛苦(对其他人来说也是肯定的)。
感谢。
答案 0 :(得分:2)
我发现你发布的内容显然不对,但你说:
在这些情况下,当我选择股票浏览器时,我的应用程序没有打开。
您的应用是否在单击链接时不显示为可供选择的选项?如果您的过滤器匹配,它应该是一个选项吗?如果您选择默认浏览器,我不会因为吞噬意图而责备它。
无论如何,如果你无法使它工作,你可以使用一些客户端网络代码,如果安装了网址,则将网页发送到应用程序,如果没有,则将其发送到商店,并将URI方案修改为您自己的自定义方案。看到这个答案:
https://stackoverflow.com/a/8237102/1137254
然后你可以过滤两者:
<activity
android:name="com.myapp.activities.LoginActivity"
android:label="@string/app_name">
<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:host="myserver.com"
android:pathPrefix="/product/"
android:scheme="https" />
<data
android:host="www.myserver.com"
android:pathPrefix="/product/"
android:scheme="https" />
<data
android:host="product"
android:scheme="asafk" />
</intent-filter>
</activity>
更新:我自己在Galaxy s3上进行了测试,发现你的pathPrefix
设置有点错误。您当前的过滤器使用的网址类似于此https://myserver.com/product/blah,但不是https://myserver.com/product
所以这是你的更新意图过滤器(注意省略了正斜杠):
<activity
android:name="com.myapp.activities.LoginActivity"
android:label="@string/app_name">
<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:host="myserver.com"
android:pathPrefix="/product"
android:scheme="https" />
<data
android:host="www.myserver.com"
android:pathPrefix="/product"
android:scheme="https" />
</intent-filter>
</activity>
如果这可以解决您的问题,请告诉我。您的用户可能仍然选择了错误的选项,因此我仍然建议您遵循我的其他建议,在尝试打开应用程序的页面上使用一些Javascript(它非常基本,但我认为它已被广泛使用)。
希望这可以解决您的问题。