admin 发表于 2017-4-30 13:57:20

在应用(微信/浏览器)中拉起手机QQ



在应用(微信/浏览器)中拉起手机QQ


mqqapi://forward/url?versionhttp://41e664-0.gz.1253619672.clb.myqcloud.com/url/wuyihb.html?_wv=3&t=1493478113833&场景是:当我们做一些活动用来拉新等等时,通常会限制用户只在手Q中打开。比如用户通过微信扫码到了我们H5活动页面。那么我们就可以通过伪协议将手Q拉起,并且将H5页面打开。用户到达的途径有很多,比如通过浏览器,通过微信,通过其他APP应用。正解代码先不看原理的话,代码应该是像下面的。今天我也参照了许多别人的代码,但大多数不是这个不兼容,就是微信拉不起来。或者是 IOS 拉起正常,但是 Android 就是不行。这通常是由于代码没有完备造成的。更主要是因为我们的浏览器什么的都在时时更新。/**
* 检测浏览器UA
* @type {Function}
*/
var condition = (function() {
   var ua = navigator.userAgent,
       chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/);
   //利用正则获得匹配 安卓 UA
   var getAndroidVersion = function() {
       var ua = navigator.userAgent.toLowerCase(),
         version = ua.match(/android\s(*)/);
       return version ? version.split('.') : false;
   };
   return {
       chrome: chrome,//true or false
       androidVersion: getAndroidVersion()   //version
   }
});
/**
* 获得伪协议
* @param jumpURL
* @returns {string}
*/
function getURL( normal ) {
   if(normal) {
       return 'mqqapi://forward/url?src_type=internal&version=1&url_prefix='+ btoa(location.href);
   }
   return "intent://forward/url?src_type=web&style=default&=1&version=1&url_prefix=" + btoa(location.href) + "#Intent;scheme=mqqapi;package=com.tencent.mobileqq;end";
}
/**
* 检测是否安装了QQ,如果没有安装要引导用户安装
*/
var checkIfInstallQQ = function() {
WeixinJSBridge.invoke("getInstallState", {
      "packageUrl": "mqq://", //ios
      "packageName": "com.tencent.mobileqq" //android
}, function(res) {
      if(/^get_install_state:yes/.test(res.err_msg)) {
          window.open( getURL( true ), '_self' );
          window.setTimeout(function() {
            WeixinJSBridge.invoke("closeWindow");
          }, 1500);
      } else if(/^get_install_state:no$/.test(res.err_msg)) {
          if(confirm('您还没有安装手Q,现在去下载安装?')) {
            window.location.replace('http://im.qq.com/mobileqq/touch/index.html');
          }
      } else {
          Alert.show({
            showCancel:false,
            msg: "err:" + res.err_msg
          });
      }
});
};
/**
* 判断是否在手q中打开,如果不是,则判断是否在微信打开
* 如果在微信打开,调用微信的 JSBridge
*/
if( !U.ua.QQ ){
    Alert.show({
      showCancel:false,
      msg: "请在手q中打开此页面",
      onConfirm : function () {
            //如果在微信中打开
            if(U.ua.weixin) {
                if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
                  checkIfInstallQQ();
                } else {
                  if (document.addEventListener) {
                        document.addEventListener("WeixinJSBridgeReady", checkIfInstallQQ, false);
                  } else if (document.attachEvent) {
                        document.attachEvent("WeixinJSBridgeReady", checkIfInstallQQ);
                        document.attachEvent("onWeixinJSBridgeReady", checkIfInstallQQ);
                  }
                }
            }else{
                //这里也可以判断下是否安装了手Q
                if(U.ua.android && condition.chrome && condition.androidVersion() >= 5) {
                  window.open( getURL(false) );
                }else{
                  window.open( getURL(true) );
                }
            }
      }
    });
    return;
}原始地址:http://cailidan.cn/2016/10/16/%E5%9C%A8%E5%BA%94%E7%94%A8-%E5%BE%AE%E4%BF%A1-%E6%B5%8F%E8%A7%88%E5%99%A8-%E4%B8%AD%E6%8B%89%E8%B5%B7%E6%89%8B%E6%9C%BAQQ/


页: [1]
查看完整版本: 在应用(微信/浏览器)中拉起手机QQ