zoukankan      html  css  js  c++  java
  • Android如何从外部跳进App


    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved !


    这个问题解决了两天时间,因为网上没有完整的解决方案,解决后分享一下给大家!

    解决这个问题有两个作用:

    1、不用打开App直接进入某页面

    2、实现App分享到外部,同时由外部进入App的闭环。

    这个话题可以分两方面来讲,一方面是从微信进入App,另一方面是从网页进入App。

    咱们拿http://my.oschina.net/liucundong/blog/354029当例子来讲一下

    主要通过scheme、host、path、pathPrefix等data信息来区分

    两个方案都需要给跳转到的Activity加入intent-filter信息,例如

    <intent-filter>

    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />

    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="cundong" android:host="splash"/>

    </intent-filter>

    首先我们来讲微信端进入App,场景:从App分享内容到微信,再从微信直接打开App。

    第一步,注册微信公众平台,相关企业信息,下载链接,Logo等 都填写完毕

    第二步,分享时使用WXAppExtendObject,把链接url赋值给extInfo

    第三步,在IWXAPIEventHandler接口的onReq方法的req.getType()=ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX时,发起你的跳转

    第四步,跳转时需要数据,数据从哪里来,从WXEntryActivity类中onCreate方法的getIntent对象里来

    从微信进入App就这样结束了。

    -------------------我是分割线------------------------

    接着来讲网页端,由于webView的限制,如微信、微博等都采用这个控件,所以只能分享到网页,再进入App。

    原理如下:

    <div>
                <a id="J-call-app" href="javascript:;" class="label">立即打开&gt;&gt;</a>
                <input id="J-download-app" type="hidden" name="storeurl" value="http://apk.hiapk.com/appinfo/com.tmall.wireless">
            </div>
     
            <script>
                (function(){
                    var ua = navigator.userAgent.toLowerCase();
               
                    var t;
                    var url=document.location;
                    var config = {
                        /*scheme:必须*/
                        scheme_IOS: 'cundong://',
                        scheme_Adr: 'cundong://splash',
                        download_url: document.getElementById('J-download-app').value,
                        timeout: 600
                    };
     
                    function openclient() {
                        var startTime = Date.now();
     
                        var ifr = document.createElement('iframe');
     
                        //alert(config.scheme_Adr);
                        ifr.src = ua.indexOf('os') > 0 ? config.scheme_IOS : config.scheme_Adr;
                        ifr.style.display = 'none';
                        document.body.appendChild(ifr);
     
                        var t = setTimeout(function() {
                            var endTime = Date.now();
     
                            if (!startTime || endTime - startTime < config.timeout -200) { 
                                window.location = config.download_url;
                            } else {
                                       window.location.href=ifr.src.replace("http://","cundong://");;
                            }
                        }, config.timeout);


     
                        window.onblur = function() {
                            clearTimeout(t);
                        }
                    }
                    window.addEventListener("DOMContentLoaded", function(){
                        document.getElementById("J-call-app").addEventListener('click',openclient,false);
     
                    }, false);
                })()
            </script>

    点击打开四个字后,执行一个js,在限制时间内,如果可以打开App则打开,否则进入下载页

    解决这个问题的基本思路就是这样,欢迎大家交流探讨!



  • 相关阅读:
    浏览器渲染原理
    element 表单清空提示语(单个 )
    同步异步
    数组的浅克隆
    ... 运算符
    解构赋值
    vue 中el-input 为number 如何控制不允许输入负号
    Android SDK Manager 更新代理配置
    Android 设计中的.9.png
    Android 编程下的 Secret Code
  • 原文地址:https://www.cnblogs.com/fengju/p/6174411.html
Copyright © 2011-2022 走看看