From ed9ef5a9d5f5b8217b7e409df69755f4c91af4fa Mon Sep 17 00:00:00 2001 From: yangxiaolong Date: Tue, 5 Sep 2017 20:00:46 +0800 Subject: [PATCH] =?UTF-8?q?1.Hidden=E5=B1=9E=E6=80=A7=E5=8F=96=E5=80=BC?= =?UTF-8?q?=E5=8F=98=E6=9B=B4:0=E4=B8=8D=E9=9A=90=E8=97=8F1=E9=9A=90?= =?UTF-8?q?=E8=97=8F=202.=E4=BC=98=E5=8C=96=E5=8F=AF=E8=A7=86=E5=8C=96JS?= =?UTF-8?q?=E7=9B=91=E6=B5=8B=E9=80=BB=E8=BE=91=203.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8E=9F=E7=94=9F=E5=8F=AF=E8=A7=86=E5=8C=96=E7=9B=91=E6=B5=8B?= =?UTF-8?q?=E5=9C=A8=E5=8F=98=E6=9B=B4=E5=88=86=E9=9A=94=E7=AC=A6=E5=92=8C?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=AC=A6=E5=90=8E=E5=8F=AF=E8=83=BD=E5=BC=95?= =?UTF-8?q?=E8=B5=B7=E7=9B=91=E6=B5=8B=E4=B8=8D=E6=88=90=E5=8A=9F=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tracking/api/ViewAbilityHandler.java | 8 ++++- .../origin/ViewAbilityStatsResult.java | 12 ++++++- .../origin/sniffer/ViewAbilityExplorer.java | 8 ++++- .../origin/sniffer/ViewFrameSlice.java | 6 ++-- .../webjs/ViewAbilityJsExplorer.java | 31 ++++++++++++++----- .../viewability/webjs/ViewAbilityMessage.java | 4 +-- 6 files changed, 53 insertions(+), 16 deletions(-) diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/ViewAbilityHandler.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/ViewAbilityHandler.java index fbc773f..65d3367 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/ViewAbilityHandler.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/ViewAbilityHandler.java @@ -200,6 +200,7 @@ public class ViewAbilityHandler { //ViewAbilityStatsResult初始化,将配置文件的arguments映射到HashMap ViewAbilityStatsResult viewAbilityStatsResult = new ViewAbilityStatsResult(); viewAbilityStatsResult.setSeparator(company.separator); + viewAbilityStatsResult.setEqualizer(company.equalizer); viewAbilityStatsResult.setViewabilityarguments(company.config.viewabilityarguments); //[3] 降噪处理:如果是onclick和onexpose使用arg[1]只清除原链接的2g属性;如果是url/video的ViewAbility使用arg[2]清除2g,2j,2f,2h @@ -416,7 +417,12 @@ public class ViewAbilityHandler { String[] splits = adUrl.split(company.separator); for (String item : splits) { if (item.startsWith(adAreaIdentifier)) { - adAreaId = item.substring(1, item.length()); +// int startPoint = adAreaIdentifier.length() + company.equalizer.length(); +// adAreaId = item.substring(startPoint, item.length()); + + //替换广告位标识符+属性连接符=广告位ID + String regex = adAreaIdentifier + company.equalizer; + adAreaId = item.replaceFirst(regex, ""); break; } } diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/ViewAbilityStatsResult.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/ViewAbilityStatsResult.java index 69c5449..ae60892 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/ViewAbilityStatsResult.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/ViewAbilityStatsResult.java @@ -49,8 +49,10 @@ public class ViewAbilityStatsResult implements Serializable { /* 存储标签内所有的属性 */ private HashMap viewabilityarguments; - /* 对应配置项标签 监测链接QueryString分隔符 default=, */ + /* 对应配置项标签 属性分隔符 default=, */ private String separator; + /* 对应配置项标签 属性链接符 default=空字符*/ + private String equalizer; /* 如果监测链接里带有标签为REDIRECTURL的项,截取出的Value,等待ViewAbility拼装完毕后追加到链接末尾*/ private String redirectURL; /* 是否是视频可视化监测*/ @@ -81,6 +83,14 @@ public class ViewAbilityStatsResult implements Serializable { return separator; } + public String getEqualizer() { + return equalizer; + } + + public void setEqualizer(String equalizer) { + this.equalizer = equalizer; + } + public String get(String key) { return viewabilityarguments.get(key); } diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewAbilityExplorer.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewAbilityExplorer.java index 85f875c..c73cb67 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewAbilityExplorer.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewAbilityExplorer.java @@ -147,11 +147,13 @@ public class ViewAbilityExplorer implements Serializable { //[]内可视化数据移除所有的引号,并且整体Encode处理 String repArr = jsonArray.toString().replace("\"", ""); String separator = viewAbilityStatsResult.getSeparator(); + String equalizer = viewAbilityStatsResult.getEqualizer(); String eventsArgument = viewAbilityStatsResult.get(ViewAbilityStatsResult.ADVIEWABILITYEVENTS); if (!TextUtils.isEmpty(eventsArgument)) { sb.append(separator); sb.append(eventsArgument); + sb.append(equalizer); sb.append(URLEncoder.encode(repArr, "utf-8")); } @@ -159,12 +161,16 @@ public class ViewAbilityExplorer implements Serializable { if (!TextUtils.isEmpty(abilityArgument)) { sb.append(separator); sb.append(abilityArgument); + sb.append(equalizer); sb.append(String.valueOf(isVisibleAbility ? 1 : 0)); } String measureArgument = viewAbilityStatsResult.get(ViewAbilityStatsResult.ADMEASURABILITY); if (!TextUtils.isEmpty(measureArgument)) { sb.append(separator); - sb.append(measureArgument + "1"); + sb.append(measureArgument); + sb.append(equalizer); + //如果ViewAbility监测已经到了组装数据的环节,默认MeasureAbility = true + sb.append("1"); } } catch (Exception e) { e.printStackTrace(); diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewFrameSlice.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewFrameSlice.java index 0ec1b59..9995de2 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewFrameSlice.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/origin/sniffer/ViewFrameSlice.java @@ -37,7 +37,7 @@ public class ViewFrameSlice implements Serializable { //2l 透明度 1.0=完全不透明 0.0=完全透明 private float alpha; - //2m 是否隐藏 0=隐藏 1=不隐藏 + //2m 是否隐藏 0=不隐藏 1=隐藏 private int hidden; //2r 屏幕是否点亮 1=开屏 0 = 熄灭 private int screenOn; @@ -86,7 +86,7 @@ public class ViewFrameSlice implements Serializable { //是否被隐藏 - hidden = (adView.getVisibility() == View.VISIBLE) ? 1 : 0; + hidden = (adView.getVisibility() == View.VISIBLE) ? 0 : 1; //可视尺寸 在当前屏幕范围内,排除不可见区域后,view的宽和高,滑动时实时变动(和WindowFrame相交运算) Rect screenRect = ViewHelper.getScreenRect(context); @@ -180,7 +180,7 @@ public class ViewFrameSlice implements Serializable { */ public boolean validateAdVisible(float confCoverRate) { //覆盖率<0.5 && 不隐藏 && 不完全透明 && 开屏 - if (coverRate < confCoverRate && hidden == 1 && alpha > 0.001 && screenOn == 1) { + if (coverRate < confCoverRate && hidden == 0 && alpha > 0.001 && screenOn == 1) { visibleAbility = 1; } else { visibleAbility = 0; diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityJsExplorer.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityJsExplorer.java index 84b76a6..fcbe113 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityJsExplorer.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityJsExplorer.java @@ -1,6 +1,7 @@ package cn.com.mma.mobile.tracking.viewability.webjs; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.net.http.SslError; @@ -19,6 +20,7 @@ import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import cn.com.mma.mobile.tracking.api.Countly; import cn.com.mma.mobile.tracking.bean.Company; import cn.com.mma.mobile.tracking.util.Logger; import cn.com.mma.mobile.tracking.util.klog.KLog; @@ -41,8 +43,8 @@ public class ViewAbilityJsExplorer { private DataCacheManager dataCacheManager; private String companyName; - private static final String JS_INTERFACE_SENDMESSAGE = "javascript:MMASDK.sendViewabilityMessage"; - private static final String JS_INTERFACE_SENDCACHEMESSAGE = "javascript:MMASDK.sendCacheMessage"; + private static final String JS_INTERFACE_SENDMESSAGE = "javascript:sendViewabilityMessage"; + private static final String JS_INTERFACE_SENDCACHEMESSAGE = "javascript:sendCacheMessage"; private static final String JS_SCHEME = "mmaViewabilitySDK"; @@ -107,7 +109,6 @@ public class ViewAbilityJsExplorer { private void initJavaScripts() { - String content = String.format("\n\n\n \n \n\n\n
\n \n
\n\n", 1, 1, bridgeJs); //KLog.d("loadURL:" + content); @@ -120,10 +121,10 @@ public class ViewAbilityJsExplorer { public void addExplorerTask(String adURL, View adView, boolean isVideo) { - if (!isJavaScriptEnabled) { - Logger.e("JavaScript is not enable in current WebView,the current monitoring scheme is not available."); - return; - } +// if (!isJavaScriptEnabled) { +// Logger.e("JavaScript is not enable in current WebView,the current monitoring scheme is not available."); +// return; +// } //如果JS为空,则在线获取一次 if (TextUtils.isEmpty(bridgeJs)) { @@ -135,6 +136,13 @@ public class ViewAbilityJsExplorer { monitorWorkers.put(abilityJsBean.getAdviewabilityId(), abilityJsBean); Logger.d("URL:" + adURL + " 开启View Ability JS 监测,监测ID:" + abilityJsBean.getAdviewabilityId()); + + //[LOCALTEST] 测试计数:带ViewAbility曝光事件产生计数 + if (Countly.LOCAL_TEST) { + Intent intent = new Intent(Countly.ACTION_STATS_VIEWABILITY); + mContext.sendBroadcast(intent); + } + } @@ -187,7 +195,8 @@ public class ViewAbilityJsExplorer { if (eventArr.length() > 0) { - String fire = String.format(JS_INTERFACE_SENDMESSAGE + "(JSON.stringify(%s))", eventArr.toString()); + String fire = String.format(JS_INTERFACE_SENDMESSAGE + "(%s)", eventArr.toString()); + //String fire = String.format(JS_INTERFACE_SENDMESSAGE + "(JSON.stringify(%s))", eventArr.toString()); //KLog.i("onExplore", "fire:" + fire); mWebView.loadUrl(fire); } @@ -299,6 +308,12 @@ public class ViewAbilityJsExplorer { } ViewAbilityJsBean abilityJsBean = monitorWorkers.get(adviewabilityid); if (abilityJsBean != null) abilityJsBean.setCompleted(true); + + //[LOCALTEST] 测试计数:记录发送成功 + if (Countly.LOCAL_TEST) { + Intent intent = new Intent(Countly.ACTION_STATS_SUCCESSED); + mContext.sendBroadcast(intent); + } } /** diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityMessage.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityMessage.java index 8eed319..abf241a 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityMessage.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/viewability/webjs/ViewAbilityMessage.java @@ -61,8 +61,8 @@ public class ViewAbilityMessage { alpha = adView.getAlpha(); } - //是否被隐藏 - int hidden = (adView.getVisibility() == View.VISIBLE) ? 1 : 0; + //是否隐藏 0 不隐藏 1 隐藏 + int hidden = (adView.getVisibility() == View.VISIBLE) ? 0 : 1; String visibleSize = ""; float coverRate = 0.0f; -- Gitee