Android Deep linking:对应用程序和 Play 商店使用相同的 link

Android Deep linking: Use the same link for the app and the play store

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

无论用户是否安装了该应用程序,我都希望此机制能够正常工作;换句话说:

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

此解决方法可能有效:

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

  2. 在应用程序中,register the server side link as a deep link:

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

现在,如果安装了应用程序,URL 将被捕获,并且可以解析路径以提取 BlahBlah 部分。如果未安装该应用程序,请按 link 将用户重定向到带有引用 URL.

的 Play 商店

备注:

  • /bar/BlahBlah 已转换为 &referrer=BlahBlah,因为 Play 商店收到一个 URL 参数并且深度 link 机制与 URL 路径一起工作(如据我所知)

如果您想自己构建,Adam 的解决方案非常好。

Branch Metrics 有一个 open-source SDK 可以做到这一点(完全公开,我在那里工作)。

基本上,您在 Branch 仪表板上设置您的 URI 方案,使用您要传递的数据创建一个 link(在这种情况下,查询参数,但您决定),并且 SDK 有一个带有回调的方法为您提供所述查询参数(通过安装或通过单击分支 link 进行常规深度 link)。

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

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

X:应用包名

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

代替

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

根据我的实验,这个 URL 可以被浏览器理解,它会根据包名和 deep-link 方案将您重定向到应用程序。否则它将带您到 Google 播放。

PS:Google Play 向应用程序广播。因此,请确保您在接收器中接收到广播。

这个问题很老但也很受欢迎,所以绝对值得知道现在这个用例得到 Firebase 的正式支持,确切地说 Firebase Dynamic Links

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

它建立在 App Linking 之上,因此您仍然需要与以前相同的 intent-filter

简而言之,您需要添加 implementation 'com.google.firebase:firebase-dynamic-links:VERSION' 并从 FirebaseDynamicLinks class.

的实例中检索 link

当然你需要将网站上的 links 更改为 Firebase 控制台中生成的那些,但好消息是这些 links 是 "dynamic"(顾名思义) 所以它们适用于所有系统。

有关所有详细信息并使用该用例进行设置,请转到此处:https://firebase.google.com/docs/dynamic-links/use-cases/web-to-app