Android 深度链接: 对应用程序和播放商店使用相同的链接

我有一个网站,使用户可以进行搜索查询。查询可能需要一些时间才能完成(几分钟到几天) ,我想让用户下载一个 Android 应用程序并在那里收到答案,方法是发送一封带有用户链接的电子邮件。

无论用户是否安装了应用程序,我都希望这种机制能够起作用; 换句话说:

  • 如果用户有这个应用程序,应该用包含标识符参数的 深度链接打开它。
  • 如果用户没有,它应该打开应用程序页面上的播放商店(例如 https://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlah) ,让用户安装它,并打开应用程序与标识符参数。

enter image description here

有没有一种方法可以形成一个链接,用一个参数打开一个 Android 应用程序,无论该应用程序是否安装都可以工作?

72620 次浏览

这种变通办法可能会奏效:

  1. 在服务器端,创建一个重定向规则到谷歌发挥。例如,https://www.foo.com/bar/BlahBlah将重定向到 https://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlah

  2. 在应用程序 将服务器端链接注册为深度链接:

<data android:scheme="https"
android:host="www.foo.com"
android:pathPrefix="/bar" />

现在,如果安装了应用程序,URL 将被捕获,路径可以被解析以提取 BlahBlah部分。如果应用程序没有安装按下链接将重定向用户到播放存储与引用的 URL。

enter image description here

备注:

  • /bar/BlahBlah被转换为 &referrer=BlahBlah,因为播放商店接收一个 URL 参数,并且深度链接机制与 URL 路径一起工作(据我所知)

如果你想自己构建的话,亚当的解决方案相当不错。

有一个 开源 SDK正是这样做的,由分支度量(充分披露,我在那里工作)。

基本上,你在 Branch 仪表板上设置你的 URI 方案,创建一个你想要传递的数据的链接(在这个例子中,是查询参数,但是你决定了) ,SDK 有一个回调方法给你提供查询参数(通过安装或者点击 Branch 链接的常规 deplink)。

您可以尝试使用这个方案(发送给用户) :

intent://details?id=X&url=Y&referrer=Z#Intent;scheme=market;action=android.intent.action.VIEW;package=com.android.vending;end";

X: 应用程序的软件包名称

Y: 应用程序清单中应该定义的深度链接方案。 (请参阅 这个) 在这里,他们使用这个 URL 作为例子: “ http://www.example.com/gizmos”,因此 Y 应该被这个 URL 替换。

Z: 可以是任何你想通过 Google Play 传递给 App 的数据。 请注意,您传递的任何数据都不应该以“ &”分隔,因为原始参数本身是以“ &”分隔的。

根据我的实验,浏览器可以理解这个 URL,它会根据包名和深度链接方案将您重定向到应用程序。否则它会带你去 Google Play。

附言: Google Play 会向应用程序发送广播,所以要确保你是通过接收器收到广播的。

这个问题很老了,但是也很流行,所以现在这个用例已经被 Firebase 正式支持了,准确的说是 Firebase 动态链接,这是非常值得了解的。

它只支持打开应用程序和延迟深度链接,这意味着在安装应用程序之后,当应用程序启动时,您可以检索用于安装应用程序的数据(链接)。

它建立在应用程序链接之上,所以您仍然需要与以前相同的 intent-filter

简而言之,您需要添加 implementation 'com.google.firebase:firebase-dynamic-links:VERSION'并从 FirebaseDynamicLinks类的实例中检索链接。

当然,你需要改变那些在 Firebase 控制台生成的网站链接,但好消息是,这些链接是“动态的”(顾名思义) ,所以它们可以在所有系统上工作。

所有详细的信息和设置与该用例到这里: https://firebase.google.com/docs/dynamic-links/use-cases/web-to-app