Android应用https deeplink和Chrome浏览器

时间:2016-04-15 15:39:53

标签: android google-chrome deep-linking

我已在Google guidelines之后的Android应用中实施了https深度链接。

工作正常,当用户打开Chrome浏览器,搜索与 mycompany 相关的内容并点击链接时,操作系统会提示在我的应用或浏览器之间进行选择。此外,如果有人通过邮件或信使应用程序发送链接,如果用户点击它,操作系统也会提示在应用程序/浏览器之间进行选择。

但是,我发现以下问题:

  1. 如果用户打开Chrome并输入地址栏: www.mycompany.com ,操作系统将不会提示在应用/浏览器之间进行选择,只会在浏览器中打开它

  2. 用户在浏览器中浏览www.mycompany.com的主页时,点击应用处理的链接(例如https://www.mycompany.com/product/1234)操作系统将不会提示在应用和浏览器之间进行选择。

  3. 最糟糕的问题是:如果用户点击了应用无法处理的链接(例如https://www.mycompany.com/not-handled-path),它会按预期打开相应的网页,但如果是用户则会在此网页中打开点击应用处理的链接(例如https://www.mycompany.com/product/1234)操作系统提示在应用/浏览器之间进行选择。

  4. 正如您所看到的,行为似乎并不一致。 我会说,预期的行为是始终提示在应用程序/浏览器之间做出决定,或者始终让用户浏览网站。

    如果我误解了什么,请告诉我,欢迎任何建议。

    这是我的调度活动处理的意图过滤器:

    <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="https"/>
        <data android:host="www.mycompany.com"/>
        <data android:pathPattern="/" />
        <data android:pathPattern="/product.*" />
        <data android:pathPattern="/list.*" />
        <data android:pathPattern="/stores.*" />
        <data android:pathPattern="/brands.*" />
    </intent-filter>
    

    提前致谢。

    修改

    总之,这是不一致的:

    写地址www.mycompany.com进入主页。此网页有https://www.mycompany.com/product/123的链接,点击它进入产品详细信息网页(操作系统不会提示在应用或浏览器中打开)。

    写地址www.mycompany.com/not-handled-path进入网页,然后这个网页还有一个指向https://www.mycompany.com/product/123的链接,然后点击它,然后,我惊讶的OS DOES提示在app中打开或浏览器。

2 个答案:

答案 0 :(得分:0)

据我所知,你的行为符合预期。 1)您要求您的浏览器打开一个网站。如果您要求操作系统允许您在浏览器和应用程序之间进行选择,但您询问了浏览器。

2)我用它的方式,它工作得很好。    

3)我没有看到任何问题。操作系统只有一个选项可以打开它,所以它使用浏览器。如果你发现它很尴尬,请处理未处理的链接。

答案 1 :(得分:0)

我在处理我的应用时遇到了类似的问题,并且没有找到任何明确说明预期行为的文档。然后我深入研究chromium source以找出正在发生的事情。根据chrome实现,当在同一主机内导航时,如果有一个较新的应用程序可用于处理目标URL,则它将显示一个Intent应用程序选择器,与可以处理源/引用URL的应用程序相比。

根据以上所述,您所看到的解释如下:

  1. 用户明确选择浏览器查看您的网站,并尊重此Chrome已对代码进行了特定检查
  2. 您正在从处理中的应用程序网址导航到另一个处理后的应用程序网址,因此没有操作系统弹出窗口
  3. 您正在从一个未处理的应用程序网址导航到一个处理中的应用程序网址。与处理旧网址的应用相比,Chrome会看到有一个较新的应用可以处理目标网址,因此它会显示操作系统弹出窗口以供用户决定。