解决问题有两个作用:

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

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

这个话题能够分双方面来讲。一方面是从微信进入App,还有一方面是从网页进入App。

主要通过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">马上打开>></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则打开,否则进入下载页

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