URL Scheme:如何创建一个链接,该链接将在 Google Drive 应用程序中打开一个文档
Posted
技术标签:
【中文标题】URL Scheme:如何创建一个链接,该链接将在 Google Drive 应用程序中打开一个文档【英文标题】:URL Scheme: How can I create a link, which will open a document in the Google Drive app 【发布时间】:2013-07-16 13:59:03 【问题描述】:我正在尝试创建一个网页,其中嵌入了多个 Google 文档。我的问题是,当在 android 设备上查看此页面时,用户会看到糟糕的基于 Web 的 Google Docs 编辑器。因此,我想在我的页面上有一个链接,它可以在用户手机上打开本地 Google Drive 应用程序,以便他/她可以在那里编辑文档。搜索了两个小时后,我无法弄清楚如何制作链接,该链接会自动在本机应用中打开文档。
我使用以下链接在 google 市场中成功查看了 Google Drive 应用程序:
market://details?id=com.google.android.apps.docs
我也尝试过
googledrive://no-idea-what-to-write-here
但这也没有成功。
这可能吗,还是仅适用于 ios?
【问题讨论】:
我认为 Google Drive 会自动处理以 .doc、.xls、.pdf 等结尾的链接......这不是必须在链接开头有 googledrive://。跨度> @Shywim 谢谢你的回答。我已经对此进行了试验,但我无法让任何谷歌文档的 url 以 .doc 结尾。以下是失败尝试的示例:docs.google.com/document/d/… 在我的 android 上打开该链接不会在 Google Drive 应用中打开该文档 使用现有的 Android 4.0 浏览器时,打开链接会显示一个选择器弹出窗口,除了所有已安装的浏览器之外,它还提供 Google Drive 应用程序。但是,在我尝试过的任何其他第三方浏览器(Chrome、Dolphin、Firefox、Opera、UC 浏览器)中都不会发生这种情况——它们只是显示谷歌文档的网络版本。 @SergeyVlasov 哇!很棒的发现!这表明如何处理这个问题取决于每个浏览器。这确实是Android的一个缺点。我敢打赌,Facebook 会希望他们网站的链接也能在他们的本地应用程序中打开,但它会在我设备上的默认浏览器中打开。 【参考方案1】:似乎没有什么好方法可以做你想做的事(至少根据我对 Android 4.0.4 的测试;也许其他版本的情况不同)。
使用被应用拦截的http:
或https:
链接
理论上,只需使用文档的https://docs.google.com/...
链接就可以了。根据this answer on *** 的说法,从Android 浏览器打开链接时,拦截http:
或https:
URL 是启动应用程序的正确方法。 Google Drive 应用正是这样做的——它为https://drive.google.com
、https://docs.google.com
、https://spreadsheets.google.com
和一堆类似的 URL(包括具有相同主机名的http:
)注册了意图过滤器。这实际上是可行的——当使用普通的 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 格式的正确文档;当然,source code for the function which generates such URIs 可用。
对于your test document:
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 的测试链接是 on a separate page(无法在此处创建指向此类 URI 的实际链接)。
转换过程如下:
将开头的https:
替换为intent:
。
附加意图参数:
#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
对应原始URL中的https:
,所以如果你想转换一个普通的http:
URL,这个字段应该是scheme=http
。 package=com.google.android.apps.docs
是应该处理链接的应用的包名。
现在,当点击此类链接时,浏览器应直接打开 Google Drive 应用程序(不显示应用程序选择器)。但是,如果未安装该应用,Android 将改为打开 Market 应用,并搜索指定的包名称,以便用户安装所需的应用。
也可以在没有package
参数的情况下创建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;end
在这种情况下,行为应该与在普通 Android 浏览器中跟踪截获的 https:
链接时的行为相同 - 将显示带有 Google Drive 应用和所有浏览器应用的应用选择器,如果 Google Drive 应用未安装,用户将不会被重定向到从 Market 安装它。
与截获的http:
和https:
链接不同,intent:
链接适用于更广泛的 Android 浏览器应用程序;不幸的是,一些浏览器不支持它们。我的测试结果:
而且,显然,非 Android 浏览器根本不支持此类链接,因此如果您的页面也必须可供其他客户端使用,则您需要使用某种浏览器嗅探。
使用自定义 URI 方案
某些应用使用完全非标准的 URI 方案,这些方案也可能适用于第三方浏览器。但是,Google Drive 应用程序不这样做,因此该解决方案不适合它(除非有人创建了一个“桥”应用程序,它只是将请求传递给 Google Drive 应用程序)。
出于安全考虑,某些浏览器还可能禁止非标准 URI 方案,除了一些列入白名单的方案(例如 market:
);我没有尝试对此进行测试。
【讨论】:
你太棒了。我编辑了您的答案以包含一个带有实际工作链接的测试页面,它......工作!非常感谢您! 不适用于 android 4.2.2 上的 chrome 47。直接打开google play。以上是关于URL Scheme:如何创建一个链接,该链接将在 Google Drive 应用程序中打开一个文档的主要内容,如果未能解决你的问题,请参考以下文章