从网站重定向到Android应用程序?

时间:2014-09-03 11:35:39

标签: javascript android html html5 redirect

当用户打开网站时,我希望发生以下两种情况之一:

  1. 如果安装了应用程序mycoolapp,则使用自定义网址方案将用户重定向到应用程序mycoolapp://
  2. 如果未安装该应用程序,请保留在当前页面上,而不发布或重定向到未知页面或错误弹出窗口。
  3. 案例1很简单,您可以使用以下代码:

    window.location = "mycoolapp://"; 
    

    如果应用程序安装在设备上,这将有效。未安装应用程序时,它会将用户重定向到未知的空白页面。

    对于案例2,我有一个使用iFrame的解决方案,它在iOS和原生Android浏览器上运行良好。它不适用于Android版Chrome。

    var redirect = function (location) {
        var iframe = document.createElement('iframe');
        iframe.setAttribute('src', location);
        iframe.setAttribute('width', '1px');
        iframe.setAttribute('height', '1px');
        iframe.setAttribute('position', 'absolute');
        iframe.setAttribute('top', '0');
        iframe.setAttribute('left', '0');
        document.documentElement.appendChild(iframe);
        iframe.parentNode.removeChild(iframe);
        iframe = null;
    };    
    
    redirect('mycoolapp://');
    

    安装该应用后,它正在使用原生Android浏览器,但在Chrome for Android上没有重定向。页面上没有任何反应。

    如何在没有安装应用的情况下重定向到我在Chrome for Android上运行的应用,而无需重定向到空白页?

    编辑:我知道你可以使用Intent

    window.location = "intent://#Intent;package=com.mycoolapp;scheme=mycoolapp;launchFlags=268435456;end;";
    

    这不是我想要的,因为如果未安装该应用,它会在Google Play上启动应用页面。有没有办法不会重定向到Google Play?

2 个答案:

答案 0 :(得分:4)

您不需要在自定义协议上启动您的应用。它适用于任何地址,例如在AndroidManifest.xml

<intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:host="www.mycoolapp.com" />
    <data android:scheme="http" />
    <data android:pathPattern="/Android" />
</intent-filter>

这意味着您可以使用以下方式指导用户:

window.location = "/Android";

如果安装了该应用,Android将提示“打开方式”。如果没有,用户将被带到浏览器中的/ Android页面。

答案 1 :(得分:2)

 Add this in manifest file,note the scheme.

        <intent-filter>
            <data android:scheme="startci" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

在html中给出代码,方案与清单文件中的方案相同。

<a href="intent:#Intent;scheme=startci;package=gramener.star;end">click here</a>

如果您想为您的应用添加参数,请使用此

<a href="intent:#Intent;scheme=startci://open?url_param=hi santhosh;package=gramener.star;end">click here</a>

如果未安装该应用,那么如果您想重定向到其他某个页面,请添加此类备用网址。网址必须编码

<a href="intent:#Intent;scheme=startci://open?url_param=hi santhosh;package=gramener.star;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end">click here</a>

将参数添加到代码

下面
 Uri data = this.getIntent().getData();
    if (data != null && data.isHierarchical()) {
        if (data.getQueryParameter("url_param") != null) {
            String param = data.getQueryParameter("url_param");               
            Log.d("the param is",param);
              //do something here
        }
    }