Android 系统浏览器中唤起应用

在进行移动端页面开发中,会遇到从 web 页面唤起 Android 应用的需求。在 Android 系统中,可以使用自定义 scheme 来实现,但是这种方式在系统未安装对应应用的情况下,不好做 fallback。所以使用 intent: 会是更好的选择。

句法

使用户能够打开应用的最佳实践是构建一个 intent a 标签嵌入到页面。这可以更灵活的控制 app 如何运行,并能够通过 Intent Extras 传入 extra 到 app。

intent URI 的基本句法如下:

intent:
   HOST/URI-path // Optional host
   #Intent;
      package=[string];
      action=[string];
      category=[string];
      component=[string];
      scheme=[string];
   end;

可以加入下面的字符串来指定 fallback URL:

S.browser_fallback_url=[encoded_full_url]

当一个 intent 无法被执行或者外部应用无法运行时,用户会被跳转的 fallback 页面。

下面是一些 Chrome 无法运行外部应用的情况:

  • intent 无法被执行,如没有 app 可以处理这个 intent
  • JavaScript 定时器试图在没有用户交互的情况下打开一个应用

S.<name> 是一种用来定义字符串 extra 的方式。S.browser_fallback_url 被用来做向后兼容,但是目标应用是看不到 browser_fallback_url 的,因为 Chrome 会移除它。

示例

下面的 intent 可以用来打开 Zxing 条码扫描 App:

intent:
   //scan/
   #Intent;
      package=com.google.zxing.client.android;
      scheme=zxing;
   end;

a 标签是这样的:

<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Take a QR code </a>

加入 fallback URL:

<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end"> Take a QR code </a>

Chrome Developer: Android Intents with Chrome