【问题标题】:Android Deep linking: Use the same link for the app and the play storeAndroid 深度链接:对应用和 Play 商店使用相同的链接
【发布时间】:2015-04-28 22:21:00
【问题描述】:

我有一个网站,可以让用户进行搜索查询。查询可能需要一些时间(几分钟到几天)才能完成,我希望通过向用户发送包含链接的电子邮件,让用户能够下载 Android 应用并在那里接收答案。

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

  • 如果用户有应用程序,则应使用包含标识符参数的deep link 打开它。
  • 如果用户没有它,它应该在应用页面上打开 Play 商店(例如 https://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlah),让用户安装它,然后使用标识符参数打开应用。

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

【问题讨论】:

  • 这在 Play 商店中是不可能实现的。如果您从自己的服务器提供下载链接,那么您可以提供包含所需标识符的自定义编译 APK 下载。
  • 连firebase都不行?
  • @DineshVG 不确定。从那以后发生了很多变化,我不再从事那个项目了。

标签: android deep-linking


【解决方案1】:

此解决方法可能有效:

  1. 在服务器端,创建一个重定向规则到 google play。例如,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 部分。如果未安装该应用,则按下该链接会将用户重定向到具有引用 URL 的 Play 商店。

注意事项:

  • /bar/BlahBlah 已转换为 &amp;referrer=BlahBlah,因为 Play 商店接收 URL 参数,并且深度链接机制适用于 URL 路径(据我所知)

【讨论】:

  • 你知道参数是否被传递给应用程序,即使它不是立即从游戏商店打开的吗?
  • 很好的解释。谢谢@adam-matan
  • 你能不能也看看这个:stackoverflow.com/questions/38157051/… 谢谢!
  • 根据这篇文章:blog.branch.io/technical-guide-android-deep-linking-uri-schemes“深度链接的 URI 方法非常受限制,不建议未经重大修改,因为如果您的应用未安装,它将显示错误消息。”您的回答和这与任何建议相矛盾?
  • 我有一个疑问,为什么我需要将它发送到我的服务器,为什么我不能简单地使用 google play store 链接作为深层链接?顺便说一句,我对深度链接完全陌生。
【解决方案2】:

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

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

X:应用的包名

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

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

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

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

【讨论】:

  • 有这方面的官方文档吗?
  • @UtsavGupta:不,这是我自己的实现。我还没有创建一个。
  • 有什么办法可以和text/plain一起使用吗?我想实现相同的行为,但使用 WhatsApp 分享它
  • 哪些浏览器支持这个?
  • @UtsavGupta :这是官方文档。 developer.chrome.com/multidevice/android/intents
【解决方案3】:

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

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

它建立在 App Linking 之上,因此您仍然需要和以前一样的 intent-filter

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

当然,您需要将网站上的链接更改为在 Firebase 控制台中生成的链接,但好消息是这些链接是“动态的”(顾名思义),因此它们适用于所有系统。

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

【讨论】:

    【解决方案4】:

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

    Branch Metrics 有一个 open-source SDK 正是这样做的(完全披露,我在那里工作)。

    基本上,您可以在 Branch 仪表板上设置 URI 方案,使用要传递的数据创建一个链接(在本例中为查询参数,但您自己决定),并且 SDK 有一个带有回调的方法,该方法提供您说的是查询参数(通过安装或单击分支链接的常规深度链接)。

    【讨论】:

    • 你知道参数是否被传递给应用程序,即使它不是立即从游戏商店打开的吗?
    • 是的,这就是“延迟深度链接”。只要点击一个链接,数据就会在 2 小时的时间内通过 play 商店。
    • within a 2 hour time frame 这是一个非常有趣的信息!谢谢!有没有提到那个时间框架的来源,以防它发生变化?
    • Branch.io 列在我正在使用的 Web 内容过滤系统中。我不确定该黑名单是否合法,但这似乎是您可能想要调查的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多