在某些设备上,Android Deep链接会转到PlayStore而不是我的应用

时间:2015-07-27 11:15:48

标签: android android-intent android-manifest

我在我的应用清单中注册了以下意图过滤器:

    <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="m.mycompany.de"
            android:pathPattern="/app/list"
            android:scheme="http" />
    </intent-filter>

并创建了一个简单的html页面来测试应用是否正确打开:

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
   <HEAD>
      <TITLE>
         A Small Hello 
      </TITLE>
   </HEAD>
<BODY>
   <a href = "http://m.mycompany.de/app/list?param1=178&param2=87294">Click</a>

</BODY>
</HTML>

在某些设备上(例如运行Android 5.1的Nexus 5)点击该链接会按预期打开我的应用,在其他设备上(例如Nexus 6也运行5.1)PlayStore(我的应用页面)打开而不是我的应用。

任何想法可能是什么问题?

编辑:奇怪的是,在将网址简化为以下内容时,这个“错误”已经消失:

http://m.mycompany.de/list?param1=178&param2=87294

我的意图过滤到

   <data
        android:host="m.mycompany.de"
        android:pathPattern="/app"
        android:scheme="http" />

这不是一个选项,因为我无法控制我的实时应用的网址。

2 个答案:

答案 0 :(得分:2)

您可以使用 pathprefix 代替 android:pathPattern

<data 
      android:host="m.mycompany.de"
      android:pathPrefix="/app/list"
      android:scheme="http" />

,在第二种情况下,当您使用以下网址时,

http://m.mycompany.de/list?param1=178&param2=87294

数据标签应为

<data 
      android:host="m.mycompany.de"
      android:pathPrefix="/list"
      android:scheme="http" />

答案 1 :(得分:0)

如我所见,您使用数据部分的pathPattern参数方向错误。

根据Google docs

  

pathPattern属性指定匹配的完整路径   针对Intent对象中的完整路径。

所以你需要使用pathPrefix而不是pathPattern:

  

pathPrefix属性指定匹配的部分路径   仅针对Intent对象中路径的初始部分。

或者只是丢弃路径并仅使用主机和方案:

<data
    android:host="m.mycompany.de"
    android:scheme="http" />

P.S。另外请注意Mimmo Grottoli对原始消息的评论。