Android旧浏览器没有深层链接移动应用程序

时间:2015-05-19 12:39:18

标签: javascript android browser deep-linking

我有一个可用于Android和iPhone的移动应用程序。为此我有一个网站,我有一个javascript方法,检查用户是从移动设备或其他人访问该网站。如果它是移动设备,我正在调用我安装的移动应用程序,如果它没有安装或者它不是移动设备,我会重定向到相应的应用程序商店(这是通过两个按钮完成的,一个用于android,一个用于iPhone, onclick我称这种方法)。我添加了以下方法

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

}

我的mobileApp Invoke 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

这是一个常见问题,是否有解决此问题的方法。 提前致谢

1 个答案:

答案 0 :(得分:0)

(完全披露,我目前是分公司的工程师)

嘿Visahan,

这是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;

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