Android 旧版浏览器无法深度链接移动应用程序

Android Old Browser not Deeplinking mobile application

我有一个适用于 Android 和 IPhone 的移动应用程序。为此,我有一个网站,其中我有一个 javascript 方法来检查用户是从移动设备还是其他设备访问该网站。如果它是移动设备,我将调用我安装的移动应用程序,如果它未安装或不是移动设备,我将重定向到相应的应用程序商店(这是通过两个按钮完成的,一个用于 android 和一个用于 iPhone,onclick 我调用此方法)。我已经添加了下面的方法

function redirectToApplication(appStoreUrl,mobileAppInvokeUrl){
 setTimeout(function () { window.location = appStoreUrl; }, 15);
 if(isMobile()){
    window.location = mobileAppInvokeUrl;
 }

}

我的 mobileApp 调用 Url 看起来像这样

myapp://app

这对于 IPhone 似乎工作正常。在 android 中,它适用于 Chrome、Firefox 和 Opera。但是此应用程序似乎无法在 android 默认浏览器应用程序(名为浏览器。这不是 Chrome)中运行。在该应用程序中,它尝试转到“http://myapp://app”并说找不到页面。我找不到这个问题的解决方案,因为我找不到这个问题的原因。

下面提供了此浏览器的标识符

Mozilla/5.0 (Linux; U; Android x.x; Build/xx)
AppleWebKit/530.17 (KHTML like Gecko) Version/4.0 Mobile Safari 530/17

这是一个常见问题吗?有没有解决这个问题的方法。 提前致谢

(完全公开,我目前是 Branch 的一名工程师)

嘿维萨汉,

这是Branch links为您做的。我们完全按照您构建的方式进行操作,这意味着如果用户已经拥有您的应用程序,则点击我们的链接会将用户带到您的应用程序,或者如果他们没有,他们会将他们带到相应的应用程序商店。

我们基本上格式化一个意图字符串并在浏览器中设置 document.location 变量以将用户传送到他们的应用程序。

具体来说,每当有人在 Android 访问我们的客户端 JS 时,我们都会做这样的事情:

var intentString = "intent://" + a + "#Intent;scheme=" + b.substring(0, b.length - 3) + ";package=";
if (!e || !e.length) {
    // id is package name of your Android app
    intentString = intentString + d.substring(d.indexOf('?id=') + 4, d.length) + ";";
} else {
    intentString = intentString + e + ";";
}
if (f && f.length) {
    // fallback URL incase app isn't on phone
    intentString = intentString + "S.browser_fallback_url=" + encodeURIComponent(f) + ";";
}
intentString = intentString + "end";
document.location = intentString;

这使我们能够为指定的浏览器创建意图字符串,因为它们遵循意图字符串模型。我们当然对某些用户代理和浏览器有一些自定义逻辑,但这是它的要点。