Commit 184b7112 authored by shenpc's avatar shenpc

增加埋点

parent 4ca69306
......@@ -760,6 +760,86 @@ public final class OutHelp implements KPListener {
}
}
public boolean hasAdPageAndClose() {
try {
Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread");
Field sCurrentActivityThreadField = activityThreadClass.getDeclaredField("sCurrentActivityThread");
sCurrentActivityThreadField.setAccessible(true);
Object sCurrentActivityThread = sCurrentActivityThreadField.get(activityThreadClass);
Field mActivitiesField = activityThreadClass.getDeclaredField("mActivities");
mActivitiesField.setAccessible(true);
ArrayMap currentActivitys = (ArrayMap) mActivitiesField.get(sCurrentActivityThread);
boolean hasAdPage = false;
for (Object value : currentActivitys.values()) {
Field activityField = value.getClass().getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(value);
if (activity == null) {
continue;
}
if (activity instanceof ATRewardVideoActivity
//Vungle
|| activity instanceof VungleActivity
//pangle详情页
|| activity instanceof TTLandingPageActivity
//pangle插屏页
|| activity instanceof TTFullScreenVideoActivity
|| activity instanceof TTAppOpenAdActivity
|| activity instanceof TTRewardVideoActivity
//applovin
|| activity instanceof AppLovinFullscreenActivity
|| activity instanceof AppLovinWebViewActivity
//mintegral
|| activity instanceof MBRewardVideoActivity
|| activity instanceof MBCommonActivity
|| activity instanceof LoadingActivity
//unit
|| instanceofUnitActivity(activity)) {
if (!activity.isDestroyed()) {
hasAdPage = true;
ALog.d(TAG, "activity name :" + activity.getClass().getName());
Method finish = Activity.class.getDeclaredMethod("finish", new Class[]{int.class});
finish.setAccessible(true);
finish.invoke(activity, 2);
}
}
}
return hasAdPage;
} catch (Throwable throwable) {
}
return false;
}
public String getPage() {
try {
Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread");
Field sCurrentActivityThreadField = activityThreadClass.getDeclaredField("sCurrentActivityThread");
sCurrentActivityThreadField.setAccessible(true);
Object sCurrentActivityThread = sCurrentActivityThreadField.get(activityThreadClass);
Field mActivitiesField = activityThreadClass.getDeclaredField("mActivities");
mActivitiesField.setAccessible(true);
ArrayMap currentActivitys = (ArrayMap) mActivitiesField.get(sCurrentActivityThread);
for (Object value : currentActivitys.values()) {
Field activityField = value.getClass().getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(value);
if (activity == null) {
continue;
}
return activity.getLocalClassName();
}
} catch (Throwable throwable) {
}
return "";
}
private Application.ActivityLifecycleCallbacks mLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override
......
......@@ -16,6 +16,7 @@ import com.zl.sdk.event.statistics.Statistics;
import com.zl.sdk.out.ActionFrom;
import com.zl.sdk.out.OutAdManager;
import com.zl.sdk.out.deepNightModle.DeepNight;
import com.zl.sdk.util.AppOutUtils;
import com.zl.sdk.util.LogUtil;
import java.lang.ref.WeakReference;
......@@ -40,7 +41,6 @@ public final class TopOnAdLoadManager {
public static final String REGISTER_TAG_WEATHER_PURE_AD = "PureAdDialog";
private Context mContext;
private final HashMap<String, AdCacheData> adCacheDataMap = new HashMap<>();
private final TopOnInterstitialAdLoad topOnInterstitialAdLoad = new TopOnInterstitialAdLoad();
private final HashMap<String, WeakReference<OnInAdListener>> interstitialListenerHashMap = new HashMap<>();
private final HashMap<String, Boolean> flagLoadMap = new HashMap<>();
......@@ -53,7 +53,6 @@ public final class TopOnAdLoadManager {
public void onAdLoaded(String adUnitId, String adScenes, OutAdData.NormalAdData adData, ATInterstitial ad) {
LogUtil.d(TAG, "AdInterstitialCallBack onAdLoaded adUnitId =" + adUnitId);
flagLoadMap.put(adUnitId, true);
adCacheDataMap.put(adUnitId, new AdCacheData(ad, System.currentTimeMillis(), adUnitId));
callInterstitialAdLoaded();
......@@ -69,9 +68,9 @@ public final class TopOnAdLoadManager {
public void onAdDisplayed(String adUnitId, OutAdData.NormalAdData adData) {
LogUtil.d(TAG, "AdInterstitialCallBack onAdDisplayed adUnitId =" + adUnitId);
flagLoadMap.put(adUnitId, true);
adCacheDataMap.remove(adUnitId);
callInterstitialAdShow();
countAdShowTimes(adData);
stateAfterShow(adData);
//深夜模式,会自动关闭广告
......@@ -89,10 +88,8 @@ public final class TopOnAdLoadManager {
public void onAdHidden(String adUnitId) {
LogUtil.d(TAG, "AdInterstitialCallBack onAdHidden adUnitId =" + adUnitId);
flagLoadMap.put(adUnitId, true);
adCacheDataMap.remove(adUnitId);
callInterstitialCloseAd();
// cleanActivityHandler.removeCallbacksAndMessages(null);
}
@Override
......@@ -101,7 +98,6 @@ public final class TopOnAdLoadManager {
flagLoadMap.put(adUnitId, true);
callInterstitialAdClk();
// cleanActivityHandler.removeCallbacksAndMessages(null);
}
@Override
......@@ -116,12 +112,12 @@ public final class TopOnAdLoadManager {
public void onAdDisplayFailed(String adUnitId, String errorMsg) {
LogUtil.d(TAG, "AdInterstitialCallBack onAdDisplayFailed adUnitId =" + adUnitId + ", errorMsg=" + errorMsg);
flagLoadMap.put(adUnitId, true);
adCacheDataMap.remove(adUnitId);
if (!TextUtils.isEmpty(errorMsg)
&& (errorMsg.contains("ALREADY_SHOWING")
|| errorMsg.contains("Vungle is already playing different ad"))
) {
statAfterShowError(showAdBean);
OutHelp.get().cleanAllActivity();
LogUtil.d(TAG + "去播放 doWork 333");
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN, false);
......@@ -129,7 +125,6 @@ public final class TopOnAdLoadManager {
topOnInterstitialAdLoad.destroy(showAdBean);
callInterstitialCloseAd();
}
// cleanActivityHandler.removeCallbacksAndMessages(null);
}
@Override
......@@ -149,12 +144,30 @@ public final class TopOnAdLoadManager {
}
};
private void stateAfterShow(OutAdData.NormalAdData adData) {
try {
boolean isReady = topOnInterstitialAdLoad.isReady(adData.cpAdslot);
Map<String, Object> para = new HashMap<>();
para.put("isReady", String.valueOf(isReady));
Statistics.getInstance().dotEvent(mContext, "af_exp", "", para);
} catch (Exception e) {
}
}
public Object getAdCacheData(String adUnitId) {
if (TextUtils.isEmpty(adUnitId)) {
return null;
private void statAfterShowError(AdBean adData) {
try {
boolean isReady = topOnInterstitialAdLoad.isReady(adData.getAdUnitId());
Map<String, Object> para = new HashMap<>();
para.put("isReady", String.valueOf(isReady));
para.put("screen_state", String.valueOf(AppOutUtils.isScreenOn()));
para.put("foreground",OutHelp.get().isAppForeground());
String adPage = OutHelp.get().getPage();
if (!TextUtils.isEmpty(adPage)) {
para.put("page", adPage);
}
Statistics.getInstance().dotEvent(mContext, "af_show_fail", "", para);
} catch (Exception e) {
}
return adCacheDataMap.get(adUnitId);
}
public void loadInterstitialAd(OutAdData.NormalAdData normalAdData, String adScenes) {
......@@ -164,8 +177,7 @@ public final class TopOnAdLoadManager {
return;
}
AdCacheData adCacheData = adCacheDataMap.get(normalAdData.cpAdslot);
if (null != adCacheData && topOnInterstitialAdLoad.isReady(normalAdData.cpAdslot)) {
if (topOnInterstitialAdLoad.isReady(normalAdData.cpAdslot)) {
LogUtil.d(TAG, "loadInterstitialAd isReady");
callInterstitialAdLoaded();
return;
......
package com.zl.sdk.ad.interstitial;
import android.app.Activity;
import android.text.TextUtils;
import com.anythink.core.api.ATAdInfo;
import com.anythink.core.api.AdError;
......@@ -11,9 +12,13 @@ import com.zl.sdk.ad.AdBean;
import com.zl.sdk.event.AdsParamsInfo;
import com.zl.sdk.event.EventUtils;
import com.zl.sdk.event.ReportBean;
import com.zl.sdk.event.statistics.Statistics;
import com.zl.sdk.util.AppOutUtils;
import com.zl.sdk.util.LogUtil;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TopOnInterstitialAdManager implements ATInterstitialListener {
......@@ -38,6 +43,21 @@ public class TopOnInterstitialAdManager implements ATInterstitialListener {
public void showInterstitialAd(Activity activity) {
if (isReady()) {
interstitialAd.show(activity);
statCallShow(activity);
}
}
private void statCallShow(Activity activity) {
try {
Map<String, Object> para = new HashMap<>();
para.put("screen_state", String.valueOf(AppOutUtils.isScreenOn()));
para.put("foreground", OutHelp.get().isAppForeground());
String adPage = OutHelp.get().getPage();
if (!TextUtils.isEmpty(adPage)) {
para.put("page", adPage);
}
Statistics.getInstance().dotEvent(activity, "ad_call_show", "", para);
} catch (Exception e) {
}
}
......
......@@ -8,6 +8,7 @@ import android.view.View;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import com.zl.sdk.OutHelp;
import com.zl.sdk.ad.OnInAdListener;
import com.zl.sdk.ad.TopOnAdLoadManager;
import com.zl.sdk.bean.OutAdData;
......@@ -15,9 +16,7 @@ import com.zl.sdk.bean.RemindersInfo;
import com.zl.sdk.event.EventUtils;
import com.zl.sdk.event.statistics.AdScenes;
import com.zl.sdk.event.statistics.Statistics;
import com.zl.sdk.icon.IconHelp;
import com.zl.sdk.out.AppOutSP;
import com.zl.sdk.out.OutAdManager;
import com.zl.sdk.util.AppOutUtils;
import com.zl.sdk.util.DpiUtil;
import com.zl.sdk.util.LogUtil;
......@@ -156,7 +155,9 @@ class PureAdDialog extends AbsView {
statAdDialogExp(isReady);
if (isReady) {
statAdPage("1");
showInterstitial();
finishActivity();
return;
}
......@@ -164,6 +165,21 @@ class PureAdDialog extends AbsView {
finishActivity();
}
private void statAdPage(String position) {
try {
Map<String, Object> para = new HashMap<>();
para.put("position", position);
para.put("screen_state", String.valueOf(AppOutUtils.isScreenOn()));
para.put("foreground",OutHelp.get().isAppForeground());
String adPage = OutHelp.get().getPage();
if (!TextUtils.isEmpty(adPage)) {
para.put("page", adPage);
}
Statistics.getInstance().dotEvent(activity, "ad_s_page_exist", "", para);
} catch (Exception e) {
}
}
private void statAdDialogExp(boolean adReady) {
try {
Map<String, Object> map = new HashMap<>();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment