每种风格的Android深层链接

时间:2017-03-23 09:10:26

标签: android deep-linking

我有多种针对不同应用程序风格的深层链接方案。我有一个后端,每个应用程序发送一个不同的方案。如果所有这些都安装在同一设备上,则所有这些设备都能够解析发送的深层链接。因此,当安装所有三个并且调用app2的深层链接时。所有应用程序都可以捕获它,但只有app2可以在应用程序中正确处理它,并且应该是唯一可以捕获它的应用程序。

我的.gradle文件中定义的口味

productFlavors {
    app1{
        applicationId "com.apps.app1"
    }
    app2{
        applicationId "com.apps.app2"
    }
    app3{
        applicationId "com.apps.app3"
    }
}

我使用的intent过滤器来捕获清单中的深层链接。

<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:pathPrefix="/"
        android:scheme="app1" />
    <data
        android:pathPrefix="/"
        android:scheme="app2" />
    <data
        android:pathPrefix="/"
        android:scheme="app3" />
</intent-filter>

有没有办法让深度链接只能用一种风味来捕捉?

2 个答案:

答案 0 :(得分:5)

对于在2019年参观此产品的人们:您可以针对每种口味使用manifestPlaceholders。 就您而言:

productFlavors {
  app1{
    applicationId "com.apps.app1"
    manifestPlaceholders.scheme = "app1"
  }
  app2{
    applicationId "com.apps.app2"
    manifestPlaceholders.scheme = "app2"
  }
  app3{
    applicationId "com.apps.app3"
    manifestPlaceholders.scheme = "app3"
  }
}

,然后在清单中使用它:

<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:pathPrefix="/"
    android:scheme="${scheme}" />

答案 1 :(得分:2)

您必须为每个产品风格提供自己的清单文件,您可以在其中为深层链接指定不同 URI模式。

您可以参考Configure Build VariantsMerge Multiple Manifest Files有关如何实现这一目标的详细信息,以及有关构建应用产品风格的更多信息。