App Links

时间:2015-12-03 14:23:21

标签: android subdomain intentfilter deep-linking applinks

我一直在阅读支持Android应用程序链接的文档和我的应用程序支持的子网站工作的网站,但有太多子域,它们是动态构建的。我想知道是否有办法支持许多子域而不必在intent-filter标签中指定它们。

以下是google示例的链接:http://developer.android.com/training/app-links/index.html#request-verify 该示例位于支持应用程序链接多个子域位置。

我认为正则表达式可行,但显然在定义主机时不支持。我不想列出所有这些,因为这意味着必须在创建每个新子域时推送新版本

<activity ...>
    <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=".*.example.org" />
        <data android:pathPattern="/.*" />
    </intent-filter>
</activity>

我不想使用第三方库或服务..但是,任何对你有用的建议都将被理解为了解如何使这项工作。

4 个答案:

答案 0 :(得分:10)

  

我的应用支持的网站适用于子域名,但子域​​名太多而且是动态构建的

欢迎您为其中的某些子集(例如,您构建应用时已知的那些)实现应用链接。您甚至可以考虑制作一个Gradle插件,该插件可以从某个域的列表中生成相应的清单元素。

但是,在安装时会检查域名,除非通过新版本的应用程序发布新版本,否则无法添加新域名。

  

我想知道是否有办法支持多个子域而不必在intent-filter标记中指定它们。

不,抱歉。 Android会在安装时检查域并检索JSON文件。

  

我认为正则表达式可行但显然在定义主机时不支持

您无法从正则表达式下载JSON。

  

我不想列出所有这些内容,因为这意味着必须在创建每个新子域时推送新版本

然后要么支持一些常见的子集,要么现在不支持应用程序链接。可以想象,如果恕我直言,谷歌将来会为此提供更灵活的选择。

答案 1 :(得分:4)

引自:Verify Android App Links

或者,如果使用通配符(例如* .example.com)声明主机名,则必须在根主机名(example.com)上发布assetlinks.json文件。例如,具有以下intent过滤器的应用程序将通过example.com的任何子名称验证(例如foo.example.com),只要assetlink.json文件发布在https:/ / example.com/ .well- known / assetlinks.json:

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <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" android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

以前的答案似乎已经过时,Android现在确实支持主机名中的通配符。根据文档,现在支持它。

答案 2 :(得分:3)

您可以将自己的域名添加为*.example.com。在the docs,据说通配符可以用作主机的第一个字符。所以你可以把清单改成这样的东西:

<intent-filter . . . >
    <data android:scheme="https" />
    <data android:host="*.example.org" />
    . . .
</intent-filter>

这应该适用于子域:

  • example.org
  • www.example.org
  • anyOtherSubDomain.example.org

答案 3 :(得分:2)

经过多次测试后,自Android 7.1(api level 25)以来支持多个子域。 在应用安装期间的早期版本中,我们收到此错误:E/HostsVerifier: Invalid host to verify (*.example.org):Input host is not valid.