Commit 99922a000698b7ad3b37ee2b6bd92798ccca6d22
1 parent
2e4d7ae3
购好物,升级OpenInstall
Showing
3 changed files
with
99 additions
and
55 deletions
src/components/callAppBox/callAppBox.vue
| ... | ... | @@ -55,6 +55,13 @@ export default { |
| 55 | 55 | // 拼接参数字符串,根据分享参数拼接 |
| 56 | 56 | let shareString = "shop_shop_type=" + this.callApps.funcs.callAppParams.shop_shop_type + "&shop_to=" + this.callApps.funcs.callAppParams.shop_to + "&shop_type=" + this.callApps.funcs.callAppParams.shop_type + "&share_mold=" + this.callApps.funcs.callAppParams.share_mold; |
| 57 | 57 | |
| 58 | + // 判断是否有扩展参数,如果有,拼接扩展参数到原始字符串 | |
| 59 | + if (this.callApps.funcs.callAppParams.shop_ext) { | |
| 60 | + | |
| 61 | + // 拼接扩展参数到原始字符串 | |
| 62 | + shareString += "&shop_extra=" + this.callApps.funcs.callAppParams.shop_ext; | |
| 63 | + } | |
| 64 | + | |
| 58 | 65 | // Base64位编码加密 |
| 59 | 66 | const CryptoJS = require("crypto-js"); |
| 60 | 67 | const wordArray = CryptoJS.enc.Utf8.parse(shareString); | ... | ... |
src/pages/common/common.vue
| ... | ... | @@ -690,11 +690,31 @@ |
| 690 | 690 | shop_shop_type: datas.inside_aes.shop_type |
| 691 | 691 | }); |
| 692 | 692 | |
| 693 | + // 判断是否有扩展参数,如果有,传递扩展参数 | |
| 694 | + if (datas.inside_aes.ext) { | |
| 695 | + | |
| 696 | + // 添加扩展参数 | |
| 697 | + Object.assign(this.schemeParams, { | |
| 698 | + shop_ext: datas.inside_aes.ext | |
| 699 | + }); | |
| 700 | + } | |
| 701 | + | |
| 693 | 702 | // 遍历对象,重新编码 |
| 694 | 703 | for (let index in this.schemeParams) { |
| 695 | 704 | this.schemeParams[index] = encodeURIComponent(decodeURIComponent(this.schemeParams[index])); |
| 696 | 705 | } |
| 697 | 706 | |
| 707 | + // 如果在iOS内,重新设置OpenInstall参数 | |
| 708 | + if (this.isiPhone.value) { | |
| 709 | + | |
| 710 | + // 判断openInstallReady函数是否存在 | |
| 711 | + if (typeof openInstallReady === 'function') { | |
| 712 | + | |
| 713 | + // 重新设置OpenInstall参数 | |
| 714 | + openInstallReady(this.schemeParams); | |
| 715 | + } | |
| 716 | + } | |
| 717 | + | |
| 698 | 718 | // 设置唤起App对象 |
| 699 | 719 | this.$set(this, "callApps", { |
| 700 | 720 | funcs: { | ... | ... |
static/js/cnLive_openinstall.js
| ... | ... | @@ -112,61 +112,77 @@ if (url.toLowerCase() === "managemall.cnlive.com" || url.toLowerCase() === "mana |
| 112 | 112 | } else { |
| 113 | 113 | appKey = "gzqtwt"; //测试appKey |
| 114 | 114 | } |
| 115 | -//初始化openInstall方法 | |
| 116 | -function openInstallReady() { | |
| 117 | - var timestamp = Date.parse(new Date()); | |
| 118 | - openInstallData = parseQueryString(); | |
| 119 | - openInstallData.channelCodeName = channelCodeName; | |
| 120 | - openInstallData.timestamp = timestamp; | |
| 121 | - openInstallData.changeSecDefChannel = true; //安卓默认定位二级频道 | |
| 122 | - openInstallData.type = type; | |
| 123 | - // 处理礼物通过openinstall唤起APP | |
| 124 | - let share_mold = encodeURIComponent(decodeURIComponent(openInstallData.share_mold)); | |
| 125 | - let shop_type = encodeURIComponent(decodeURIComponent(openInstallData.shop_type)); | |
| 126 | - let shop_to = encodeURIComponent(decodeURIComponent(openInstallData.shop_to)); | |
| 127 | - let shop_shop_type = encodeURIComponent(decodeURIComponent(openInstallData.shop_shop_type)); | |
| 128 | - // 把值链接的方式绑定到shopShoptype | |
| 129 | - let shopCollection = | |
| 130 | - "shop_shop_type=" + | |
| 131 | - shop_shop_type + | |
| 132 | - "&shop_to=" + | |
| 133 | - shop_to + | |
| 134 | - "&shop_type=" + | |
| 135 | - shop_type + | |
| 136 | - "&share_mold=" + | |
| 137 | - share_mold; | |
| 138 | - // Base64位编码加密 | |
| 139 | - // var CryptoJS = require('crypto-js') | |
| 140 | - var wordArray = CryptoJS.enc.Utf8.parse(shopCollection); | |
| 141 | - let shopData = encodeURIComponent(CryptoJS.enc.Base64.stringify(wordArray)); | |
| 142 | - openInstallData.shopData = shopData; | |
| 143 | - mm = new OpenInstall( | |
| 144 | - { | |
| 145 | - /*appKey必选参数,openinstall平台为每个应用分配的ID*/ | |
| 146 | - appKey: appKey, | |
| 147 | - /*可选参数,自定义android平台的apk下载文件名;个别andriod浏览器下载时,中文文件名显示乱码,请慎用中文文件名!*/ | |
| 148 | - //apkFileName : 'com.fm.openinstalldemo-v2.2.0.apk', | |
| 149 | - /*可选参数,是否优先考虑拉起app,以牺牲下载体验为代价*/ | |
| 150 | - //preferWakeup:true, | |
| 151 | - /*自定义遮罩的html*/ | |
| 152 | - //mask:function(){ | |
| 153 | - // return "<div id='openinstall_shadow' style='position:fixed;left:0;top:0;background:rgba(0,255,0,0.5);filter:alpha(opacity=50);width:100%;height:100%;z-index:10000;'></div>" | |
| 154 | - //}, | |
| 155 | - /*openinstall初始化完成的回调函数,可选*/ | |
| 156 | - channelCode: channelName, | |
| 157 | - onready: function() { | |
| 158 | - /*在app已安装的情况尝试拉起app*/ | |
| 159 | - /*不管是iOS还是安卓必须在openInstall后台打开启用scheme按钮才能执行schemeWakeup方法*/ | |
| 160 | - /*在ios9.2以下schemeWakeup方法才能在openInstall初始化完毕之后执行拉起app操作, | |
| 161 | - ios9.2以上必须通过点击触发wakeupOrInstall方法才能拉起app */ | |
| 162 | - /*在安卓里只要打开了启用scheme按钮,schemeWakeup方法就会执行*/ | |
| 163 | - /*隐藏以下代码是为了解决安卓网家家app内部打开h5会弹出跳转外部应用的bug*/ | |
| 164 | - //var m = this; | |
| 165 | - //m.schemeWakeup(); | |
| 166 | - } | |
| 167 | - }, | |
| 168 | - openInstallData | |
| 169 | - ); | |
| 115 | +/** | |
| 116 | + * 初始化openInstall方法 | |
| 117 | + * @param {Object} schemeParams [从接口取到的schemeParams参数,对象形式的,未做任何处理] | |
| 118 | + */ | |
| 119 | +function openInstallReady(schemeParams) { | |
| 120 | + | |
| 121 | + // 初始化数据 | |
| 122 | + var timestamp = Date.parse(new Date()); | |
| 123 | + openInstallData = parseQueryString(); | |
| 124 | + openInstallData.channelCodeName = channelCodeName; | |
| 125 | + openInstallData.timestamp = timestamp; | |
| 126 | + openInstallData.changeSecDefChannel = true; //安卓默认定位二级频道 | |
| 127 | + openInstallData.type = type; | |
| 128 | + | |
| 129 | + // 初始化通过openinstall唤起APP参数 | |
| 130 | + let share_mold, shop_type, shop_to, shop_shop_type, shop_ext; | |
| 131 | + | |
| 132 | + // 判断如果传入了schemeParams的话,就不执行从地址栏取参数的操作,重新初始化一次OpenInstall | |
| 133 | + if (schemeParams && typeof schemeParams === 'object' && schemeParams.share_mold && schemeParams.shop_type && schemeParams.shop_to && schemeParams.shop_shop_type) { | |
| 134 | + | |
| 135 | + // 处理通过openinstall唤起APP参数 | |
| 136 | + share_mold = schemeParams.share_mold; | |
| 137 | + shop_type = schemeParams.shop_type; | |
| 138 | + shop_to = schemeParams.shop_to; | |
| 139 | + shop_shop_type = schemeParams.shop_shop_type; | |
| 140 | + shop_ext = (schemeParams.shop_ext ? schemeParams.shop_ext : ''); | |
| 141 | + } else { | |
| 142 | + | |
| 143 | + // 处理通过openinstall唤起APP参数 | |
| 144 | + share_mold = encodeURIComponent(decodeURIComponent(openInstallData.share_mold)); | |
| 145 | + shop_type = encodeURIComponent(decodeURIComponent(openInstallData.shop_type)); | |
| 146 | + shop_to = encodeURIComponent(decodeURIComponent(openInstallData.shop_to)); | |
| 147 | + shop_shop_type = encodeURIComponent(decodeURIComponent(openInstallData.shop_shop_type)); | |
| 148 | + shop_ext = encodeURIComponent(decodeURIComponent(openInstallData.shop_ext)); | |
| 149 | + } | |
| 150 | + | |
| 151 | + // 把值链接的方式绑定到shopShoptype | |
| 152 | + let shareString = "shop_shop_type=" + shop_shop_type + "&shop_to=" + shop_to + "&shop_type=" + shop_type + "&share_mold=" + share_mold + (shop_ext ? '&shop_extra=' + shop_ext : ''); | |
| 153 | + | |
| 154 | + // Base64位编码加密 | |
| 155 | + // var CryptoJS = require('crypto-js') | |
| 156 | + var wordArray = CryptoJS.enc.Utf8.parse(shareString); | |
| 157 | + let shopData = encodeURIComponent(CryptoJS.enc.Base64.stringify(wordArray)); | |
| 158 | + | |
| 159 | + // 设置OpenInstall自定义参数 | |
| 160 | + openInstallData.shopData = shopData; | |
| 161 | + | |
| 162 | + mm = new OpenInstall({ | |
| 163 | + /*appKey必选参数,openinstall平台为每个应用分配的ID*/ | |
| 164 | + appKey: appKey, | |
| 165 | + /*可选参数,自定义android平台的apk下载文件名;个别andriod浏览器下载时,中文文件名显示乱码,请慎用中文文件名!*/ | |
| 166 | + //apkFileName : 'com.fm.openinstalldemo-v2.2.0.apk', | |
| 167 | + /*可选参数,是否优先考虑拉起app,以牺牲下载体验为代价*/ | |
| 168 | + //preferWakeup:true, | |
| 169 | + /*自定义遮罩的html*/ | |
| 170 | + //mask:function(){ | |
| 171 | + // return "<div id='openinstall_shadow' style='position:fixed;left:0;top:0;background:rgba(0,255,0,0.5);filter:alpha(opacity=50);width:100%;height:100%;z-index:10000;'></div>" | |
| 172 | + //}, | |
| 173 | + /*openinstall初始化完成的回调函数,可选*/ | |
| 174 | + channelCode: channelName, | |
| 175 | + onready: function() { | |
| 176 | + /*在app已安装的情况尝试拉起app*/ | |
| 177 | + /*不管是iOS还是安卓必须在openInstall后台打开启用scheme按钮才能执行schemeWakeup方法*/ | |
| 178 | + /*在ios9.2以下schemeWakeup方法才能在openInstall初始化完毕之后执行拉起app操作, | |
| 179 | + ios9.2以上必须通过点击触发wakeupOrInstall方法才能拉起app */ | |
| 180 | + /*在安卓里只要打开了启用scheme按钮,schemeWakeup方法就会执行*/ | |
| 181 | + /*隐藏以下代码是为了解决安卓网家家app内部打开h5会弹出跳转外部应用的bug*/ | |
| 182 | + //var m = this; | |
| 183 | + //m.schemeWakeup(); | |
| 184 | + }, | |
| 185 | + }, openInstallData); | |
| 170 | 186 | } |
| 171 | 187 | |
| 172 | 188 | // $.ajax({ |
| ... | ... | @@ -198,4 +214,4 @@ function openInstallReady() { |
| 198 | 214 | // } |
| 199 | 215 | // }); |
| 200 | 216 | // 本地测试 |
| 201 | 217 | -openInstallReady(); |
| 218 | +openInstallReady(); | |
| 202 | 219 | \ No newline at end of file | ... | ... |