每个版本的Android深层链接

Ray*_*oix 5 android deep-linking

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

我的.gradle文件中定义的Flavors

productFlavors {
    app1{
        applicationId "com.apps.app1"
    }
    app2{
        applicationId "com.apps.app2"
    }
    app3{
        applicationId "com.apps.app3"
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用的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>
Run Code Online (Sandbox Code Playgroud)

有没有办法让一个深层链接只能被一种味道捕捉?

bec*_*pan 5

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

您可以参阅配置构建变体合并多个清单文件,了解有关如何实现这一目标的详细信息,以及有关构建产品风味应用程序的更多信息。


Hib*_*bem 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在清单中使用它:

<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}" />
Run Code Online (Sandbox Code Playgroud)