7

我正在尝试创建一个网页,其中嵌入了几个 Google 文档。我的问题是,当在 android 设备上查看此页面时,用户会看到糟糕的基于 Web 的 Google Docs 编辑器。因此,我想在我的页面上有一个链接,它可以在用户手机上打开本地 Google Drive 应用程序,以便他/她可以在那里编辑文档。搜索了两个小时后,我无法弄清楚如何制作链接,该链接会自动在本机应用程序中打开文档。

我使用以下链接成功查看了谷歌市场中的谷歌云端硬盘应用程序:

market://details?id=com.google.android.apps.docs

我也尝试过

googledrive://no-idea-what-to-write-here

但这也没有成功。

这可能吗,还是仅适用于iOS?

4

1 回答 1

10

似乎没有做你想做的事的好方法(至少根据我对 Android 4.0.4 的测试;也许其他版本的情况不同)。

使用http:或被https:应用拦截的链接

从理论上讲,仅使用https://docs.google.com/...文档的链接应该对您有用。根据StackOverflow 上的这个答案,从 Android 浏览器打开链接时,拦截http:https:URL 是启动应用程序的正确方法。Google Drive 应用正是这样做的——它为 、 和一堆类似的 URL(包括具有相同的主机名)注册https://drive.google.com意图https://docs.google.com过滤https://spreadsheets.google.comhttp:。这实际上是有效的——当使用普通的 Android 浏览器时,尝试打开一个指向https://drive.google.com结果的链接会在列表中包含 Google Drive 应用程序的选择器弹出窗口(以及所有已安装的浏览器);选择 Google Drive 会根据需要在 Google Drive 编辑器中打开文档。

但问题是这种截获的 HTTP[S] URL只能在普通的 Android 浏览器中工作 ——我无法找到任何第三方浏览器可以在点击这些链接时显示应用程序选择器。我测试了 Chrome、Dolphin、Firefox、Light Browser、Opera(包括 Classic 和 Mini)、UC 浏览器,所有这些都只是在内部打开了链接,而不是提供将其传递给 Google Drive 应用程序。

使用intent:URI 方案

还有另一种创建链接以启动 Android 应用程序的方法 - 使用intent:URI 方案。我无法找到intent:URI 格式的适当文档;当然,生成此类 URI 的函数的源代码是可用的。

对于您的测试文档

https://docs.google.com/document/d/1zSzDnV-90Ke3dzCCJ2CZ6iQ3JQ3F1hL1udGDqbNwwbY/edit?usp=sharing

在 Google Drive 应用程序中打开它的相应intent:链接将是:

intent://docs.google.com/document/d/1zSzDnV-90Ke3dzCCJ2CZ6iQ3JQ3F1hL1udGDqbNwwbY/edit?usp=sharing#Intent;scheme=https;action=android.intent.action.VIEW;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.google.android.apps.docs;end

带有此 URI 的测试链接位于单独的页面上(无法在此处创建指向此类 URI 的实际链接)。

转换过程如下:

  1. 替换https:intent:.

  2. 附加意图参数:

    #Intent;scheme=https;action=android.intent.action.VIEW;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.google.android.apps.docs;end
    

    这里scheme=https对应https:于原网址,所以如果要转换为纯http:网址,该字段应为scheme=http. 并且package=com.google.android.apps.docs是应该处理链接的应用程序的包名称

现在,当点击此类链接时,浏览器应直接打开 Google Drive 应用程序(不显示应用程序选择器)。但是,如果未安装该应用程序,Android 将打开 Market 应用程序,并搜索指定的包名称,以便用户安装所需的应用程序。

也可以在没有参数的intent:情况下建立链接:package

intent://docs.google.com/document/d/1zSzDnV-90Ke3dzCCJ2CZ6iQ3JQ3F1hL1udGDqbNwwbY/edit?usp=sharing#Intent;scheme=https;action=android.intent.action.VIEW;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;end

在这种情况下,行为应该与https:在普通 Android 浏览器中跟踪截获的链接时相同——将显示带有 Google Drive 应用程序和所有浏览器应用程序的应用程序选择器,如果未安装 Google Drive 应用程序,则用户不会被重定向到从 Market 安装它。

与拦截http:https:链接不同,intent:链接适用于更广泛的 Android 浏览器应用程序;不幸的是,一些浏览器不支持它们。我的测试结果:

  • 作品:库存的 Android 4.0.4 浏览器、Chrome、Light Browser、Opera、Opera Classic。
  • 不工作:Dolphin、Firefox(功能请求待定)、UC 浏览器。

而且,显然,非 Android 浏览器根本不支持此类链接,因此如果您的页面也必须可用于其他客户端,则您将需要使用某种浏览器嗅探。

使用自定义 URI 方案

一些应用程序使用完全非标准的 URI 方案,这也可能适用于第三方浏览器。但是,Google Drive 应用程序不这样做,因此该解决方案不适合它(除非有人创建了一个“桥”应用程序,它只是将请求传递给 Google Drive 应用程序)。

market:出于安全考虑,一些浏览器还可能禁止非标准 URI 方案,除了一些列入白名单的方案(例如);我没有尝试对此进行测试。

于 2013-07-15T16:17:38.707 回答