我如何在网站上使用 http url 后备制作跨浏览器原生应用程序 url?

Posted

技术标签:

【中文标题】我如何在网站上使用 http url 后备制作跨浏览器原生应用程序 url?【英文标题】:How i can make crossbrowser native-app urls with http url fallback on website? 【发布时间】:2015-04-27 22:05:17 【问题描述】:

当用户点击 url 时,我需要打开 vk.com、facebook、twitter 应用程序,以防安装此应用程序。

否则,应使用 http url 打开新标签。

有一些现成的解决方案吗?

我需要这个才能在 iosandroid 和 windows 设备上工作。

【问题讨论】:

【参考方案1】:

这可以使用 URL 方案来完成。不幸的是,不同的操作系统(ios、android 等)为其移动应用程序响应不同的 URL 方案。因此,首先您必须找出用户正在使用的设备。这可以通过使用navigator.userAgent 属性来获得:

var ua = window.navigator.userAgent;

ua 变量是代表用户信息的字符串,例如,他们正在使用哪个浏览器。所以可以使用String的match method来查找具体的值:

var IS_IPAD = ua.match(/iPad/i) != null,
    IS_IPHONE = !IS_IPAD && ((ua.match(/iPhone/i) != null) || (ua.match(/iPod/i) != null)),
    IS_IOS = IS_IPAD || IS_IPHONE,
    IS_ANDROID = !IS_IOS && ua.match(/android/i) != null,
    IS_MOBILE = IS_IOS || IS_ANDROID;

既然您知道用户正在使用哪个设备,您就可以使用正确的 URL 方案。 Android 使用带有 intent:// 前缀的 Intents,而 IOS 使用 appname://parameters 格式。所以,你可以这样做:

if(IS_IOS)
    window.location = "myapp://view?id=123";
else if(IS_ANDROID)
    window.location = 'intent://view?id=123#Intent;package=my.app.id;scheme=myapp;launchFlags=268435456;end;';

您可能希望对 IOS 使用超时(如果未安装应用程序,Android 将带入 Play 商店)以查看应用程序是否已加载。如果应用没有加载,那么您可以将窗口位置设置为您的标准 URL。

这解决了 Android 和 IOS 的问题,但是,它不包括 Windows 移动设备。不过,我确信这是一种类似的方法。我还没有找到任何可以为您抽象和处理此代码的特定库,但实现起来相当简单。

资源/进一步阅读:

How to launch apps (facebook/twitter/etc) from mobile browser but fall back to hyperlink if the app isn't installed URL schemes for iOS and Android (2/2)

【讨论】:

有一个问题:如果未安装应用程序,Safari 将显示此类自定义协议的错误。也许应用链接可能是一个解决方案,但我无法让它们发挥作用。

以上是关于我如何在网站上使用 http url 后备制作跨浏览器原生应用程序 url?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cloud9 服务器拒绝连接

用于 Internet Explorer 的 CSS 后备

如何在 Cloud Functions for Firebase(multer、busboy)上使用 express 执行 HTTP 文件上传

如何修复 PWA 审核中的“当 JavaScript 不可用时不提供后备内容”?

HTML5 本地存储后备解决方案 [关闭]

HTML5 视频后备 - 无法在本地 Flash 播放器中播放视频文件