Android 每个风味的深层链接
Android deeplink per flavor
我有多个针对不同应用风格的深层链接方案。我有一个后端,它为每个应用程序发送不同的方案。如果所有这些都安装在同一台设备上,那么所有这些都将能够解析发送的深层链接。因此,当所有三个都安装好并调用 app2 的深层链接时。所有的应用程序都可以捕获它,但只有app2可以在应用程序中正确处理它,并且应该是唯一一个可以捕获它的。
我的 .gradle 文件中定义的口味
productFlavors {
app1{
applicationId "com.apps.app1"
}
app2{
applicationId "com.apps.app2"
}
app3{
applicationId "com.apps.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="app1" />
<data
android:pathPrefix="/"
android:scheme="app2" />
<data
android:pathPrefix="/"
android:scheme="app3" />
</intent-filter>
有没有办法让深层链接只能被一种风格捕获?
您必须为每种产品风格提供一个它们自己的清单文件,您可以在其中为深层链接指定 distinct URI 模式。
你可以参考Configure Build Variants和
Merge Multiple Manifest Files 有关如何实现该目标的详细信息,以及有关针对产品风味构建应用程序的更多信息。
对于 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}" />
我有多个针对不同应用风格的深层链接方案。我有一个后端,它为每个应用程序发送不同的方案。如果所有这些都安装在同一台设备上,那么所有这些都将能够解析发送的深层链接。因此,当所有三个都安装好并调用 app2 的深层链接时。所有的应用程序都可以捕获它,但只有app2可以在应用程序中正确处理它,并且应该是唯一一个可以捕获它的。
我的 .gradle 文件中定义的口味
productFlavors {
app1{
applicationId "com.apps.app1"
}
app2{
applicationId "com.apps.app2"
}
app3{
applicationId "com.apps.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="app1" />
<data
android:pathPrefix="/"
android:scheme="app2" />
<data
android:pathPrefix="/"
android:scheme="app3" />
</intent-filter>
有没有办法让深层链接只能被一种风格捕获?
您必须为每种产品风格提供一个它们自己的清单文件,您可以在其中为深层链接指定 distinct URI 模式。
你可以参考Configure Build Variants和 Merge Multiple Manifest Files 有关如何实现该目标的详细信息,以及有关针对产品风味构建应用程序的更多信息。
对于 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}" />