从Android中的URL方案打开我的应用程序

时间:2017-03-16 17:07:14

标签: android deep-linking

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

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

我有 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时,我的应用程序无法打开,而是获取Google搜索结果的 myscheme://开放

任何人都能看到我在这里失踪的那块拼图吗? 如何让我的应用通过URI打开?

小更新:

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

2 个答案:

答案 0 :(得分:3)

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

您可以通过将深层链接置于用户驱动器操作(例如标准<a>标记)后在某种程度上解决此问题,但Chrome有自己的标准,称为Chrome Intents,您应该这样做改为使用。根据您使用的设备,标准浏览器也可能如此。

在其他应用中,有问题的应用是否可以将自定义URI方案识别为可点击的链接&#39;。为了获得最佳兼容性,您需要将其包含在具有重定向的常规http://链接中。

如果您对深层链接的复杂性有深入的解释感兴趣,this post是一个很好的起点。如果您只是想让它在没有太多额外工作的情况下工作,Branch.io(完全披露:我在分支团队中)就可以解决这个问题作为免费服务。

答案 1 :(得分:1)

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

特别是:

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

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

  • 不需要SMS客户端搜索字符串myscheme://open的所有传入消息,意识到这是某种应用程序链接,并对其执行某些操作。

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

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

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

  

我发现将Chrome导航到市场://详细信息?id = com.myapp无法打开游戏商店

这可以追溯到&#34;开发人员可以做他们想做的事情&#34;部分。如果您点击网页中指向该网址的链接,则Chrome可能会将您带到Play商店。但是,Chrome没有义务将地址栏视为处理网页中的链接。