【问题标题】:Open my app from URL scheme in Android从 Android 中的 URL 方案打开我的应用
【发布时间】:2017-08-08 00:10:50
【问题描述】:

我知道关于 SO 有几个关于此的问题,但没有一个有助于解决我的问题。

我希望能够单击电子邮件/文本/浏览器中的链接并打开我的应用程序。

我有 AndroidManifest.xml 代码:

    <!-- Splash Activity -->
    <activity
        android:name=".ui.SplashActivity"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme"
        android:launchMode="singleTask">

        <!-- Launcher intent filter -->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <!-- Branch URI scheme -->
        <intent-filter>
            <data android:scheme="myscheme" android:host="open" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

这似乎完全遵循文档 here,但是,当我使用 Chrome(或 Android 浏览器)浏览到 myscheme://open 时,我的应用程序没有打开,而是我得到了谷歌搜索结果 myscheme ://打开

谁能看到我在这里遗漏了哪一块拼图? 如何让我的应用通过 URI 打开?

小更新:

阅读 this 后,我发现将 Chrome 导航到 market://details?id=com.myapp打开 Play 商店。相反,它会返回 Google 搜索结果 - 与尝试直接启动我的应用程序时相同。这令人困惑。 我是否缺少允许深度链接的全局操作系统设置?

【问题讨论】:

  • “当我使用 Chrome(或 Android 浏览器)浏览到 myscheme://open 时”——您是如何准确做到这一点的?在地址栏中输入?单击具有该 URL 的网页中的链接?还有什么?
  • @CommonsWare 通过 (1) 在地址栏中输入,以及 (b) 单击电子邮件中的链接。两者都会导致相同的行为。

标签: android deep-linking


【解决方案1】:

Chrome 不会通过手动输入的 URI 方案打开应用。事实上,手动输入的链接永远不会在 Chrome 中启动外部应用程序。这是设计使然——无论出于何种原因,Chrome 团队都认为用户在输入地址后应该始终留在浏览器中。

您可以通过将深层链接放在用户驱动操作后面(例如标准的&lt;a&gt; 标签)在一定程度上解决此问题,但 Chrome 有自己的标准,称为 Chrome Intents,您应该使用它反而。根据您使用的设备,标准浏览器也可能是这种情况。

在其他应用中,是否将自定义 URI 方案标识为“可点击链接”取决于相关应用。为了获得最佳兼容性,您需要将其包装在带有重定向的常规 http:// 链接中。

如果您有兴趣深入了解深度链接的复杂性,this post 是一个不错的起点。如果您只是想让它在不费力的情况下工作,Branch.io(完全披露:我在 Branch 团队)作为免费服务解决了这个问题。

【讨论】:

    【解决方案2】:

    任何应用都不需要关注myscheme://open

    特别是:

    • 当您在地址栏中输入myscheme://open 时,任何 Web 浏览器都不需要尝试启动某些第三方应用程序,因为在现实世界中用户不太可能这样做。

    • 电子邮件程序无需尝试为myscheme://open 创建ACTION_VIEW Intent

    • SMS 客户端无需在所有传入消息中搜索字符串 myscheme://open,意识到这是某种应用程序链接,并对其进行处理。

    使用https(或者,在紧要关头,http)URL 作为您的应用链接(http://www.example.com/gizmos 来自the documentation that you linked to 的 URL),您的运气会更好。然后,SMS 客户端可能会识别出这是一个 URL 并对其进行处理。而且,总体而言,您应该被带到您的应用程序或网页,这两者至少对用户有点用处。但是,当用户在地址栏中输入您的 URL 时,您的应用仍然不一定会打开,因为浏览器可能不希望在那里输入应用链接。

    您可以通过publishing a digital asset links file 并将其绑定到您的清单中来增加https 应用链接以您想要的方式工作的几率。

    但是,总的来说,这仍然依赖于客户选择关注这些东西。有时他们会这样做,因为 Android 让这样做相对容易。有时他们不会。欢迎使用 Web 浏览器查看您的 URL,看到它是 https,说“嘿,作为 Web 浏览器,我知道如何处理这个!”,然后继续加载该网页,忽略您安装的应用程序。您和我可能认为这是该浏览器中的错误;欢迎该浏览器的开发人员不同意。

    我发现将 Chrome 导航到 market://details?id=com.myapp 并没有打开 Play 商店

    这又回到了“开发人员可以做他们想做的事”的部分。如果您单击网页中指向该 URL 的链接,Chrome 就有可能将您带到 Play 商店。但是,Chrome 没有义务将地址栏视为与网页中的链接相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多