【问题标题】:Android Deeplinking not working with multiple schemesAndroid Deeplinking 不适用于多种方案
【发布时间】:2015-02-03 22:32:22
【问题描述】:

我被以下情况困住了。我在AndroidManifest.xml

中定义了以下深层链接意图过滤器

预期的行为是当我找到格式为 http://​www.domain.com/a/blabla 的 URL 或在 SMS/电子邮件中存在格式为 domain/xyz 的链接时,系统应该触发我的活动。

案例#1:工作正常

    <activity
        android:name=".MYActivity">
        <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="xyz"
                android:scheme="domain" />
        </intent-filter>
    </activity>

案例#2:工作正常

     <activity
        android:name=".MYActivity">
        <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" 
                android:host="www.domain.com"
                android:pathPrefix="/a"
             />
        </intent-filter>
    </activity>

案例#3:不工作

    <activity
        android:name=".MYActivity">
        <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="xyz"
                android:scheme="domain" />
             <data
                android:scheme="http" 
                android:host="www.domain.com"
                android:pathPrefix="/a"
             />
        </intent-filter>
    </activity>

非常感谢任何建议/点/帮助

【问题讨论】:

  • TL;DR: hostpathPrefix 必须在一个 intent-filter 中相同。您可以将data 元素复制到一个intent-filter 与不同的scheme。示例:同一主机/路径前缀的 http 和 https 版本可以在一个意图过滤器中。
  • @EugenPechanec 您的评论可能是对这个问题的有效答案。链接到答案比代码审查中的评论更容易:)

标签: android android-activity android-manifest intentfilter deep-linking


【解决方案1】:

来自Android官方文档网站:

虽然可以在同一个文件中包含多个元素 过滤器,创建单独的过滤器很重要 目的是声明唯一的网址(例如特定的组合 方案和主机),因为同一意图中的多个元素 过滤器实际上被合并在一起以解释所有变化 它们的组合属性。

您必须创建单独的intent-filters。

【讨论】:

    【解决方案2】:

    参见&lt;data&gt; 的文档:它声明:

    同一&lt;intent-filter&gt; 元素中包含的所有&lt;data&gt; 元素都属于同一过滤器。

    因此

    <intent-filter>
        <data
            android:host="xyz"
            android:scheme="domain" />
        <data
            android:scheme="http" 
            android:host="www.domain.com"
            android:pathPrefix="/a" />
    <intent-filter>
    

    被等效解释为(不是真正的代码)

    <intent-filter>
        <data
            android:host="xyz"
            android:scheme="domain"
            android:scheme="http" 
            android:host="www.domain.com"
            android:pathPrefix="/a" />
    <intent-filter>
    

    这显然有一些矛盾,例如主机是xyz VS www.domain.com

    【讨论】:

    • 好的。所以这意味着我不能在同一个意图过滤器中有不同的主机。我将尝试将它们保存在不同的意图过滤器中。感谢您的 cmets
    • 我强烈建议阅读&lt;data&gt;&lt;intent-filter&gt; 的文档。
    • 支持什么版本的android复制方案,我不认为它不可能按照XSD...
    • @whoami 第二个代码块是伪 xml,无效。我只是把它放在那里以了解矛盾。
    【解决方案3】:

    这是我希望它有帮助的教程 Tutorial link

    【讨论】:

      【解决方案4】:

      我将两个深层链接都放在了两个不同的意图过滤器中,它起作用了!!!。

      【讨论】:

      • 你能发布你的工作代码吗?我在使用两个不同的意图过滤器时遇到问题
      • @Renges 您看到的错误是什么?有什么问题?
      • 当我使用终端测试时,它适用于 http 和自定义方案,但是当我的朋友建立网站并传递自定义 url 方案时,它不会打开我的应用程序
      • 是否可以共享自定义 url(deeplink 架构)和您的清单。例如:我们的自定义深层链接如下所示 - 'domain://path/deeplink';我们的实际网址如下所示 - 'domain.com/a/b/path' -
      • @Blanc 您是否在不同的意图过滤器中使用相同的操作和类别?例如:
      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2014-07-21
      • 2016-08-15
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多