Commit 30f3e9c9 authored by xujialang's avatar xujialang

外展新版本:

1.触发条件改为全部由广播触发,包括:计时广播,电池变化,网络变化,亮屏,回到桌面,解锁
2.初始化时加载广告,加载完成后不会直接播放广告。后面再加载完成后会直接播放
3.场景判断条件:是否在前台,是否亮屏,是否通话中,是否锁屏
4.隐藏和非隐藏icon的场景判断条件一致
5.加载广告不再通过外展弹窗去加载,直接加载
6.广告播放的时间不再缓存(进程重新起来后上次广告播放时间=0)
7.进入广告逻辑增加频繁触发的条件判断,500ms内不能重复触发
parent 6b89a81c
......@@ -59,7 +59,17 @@ public final class OutHelp implements KPListener {
//是否第一次轮询
private boolean firstLx = true;
public boolean firstLoadAd = true;
private long lastShowTime = 0;
public void setLastShowTime() {
lastShowTime = System.currentTimeMillis();
}
public long getLastShowTime() {
return lastShowTime;
}
/**
* 初始化
......@@ -100,10 +110,13 @@ public final class OutHelp implements KPListener {
//初始化触发条件
initTriggerConditions();
//第一次加载广告
OutAdManager.get().checkNeedLoadAd(ActionFrom.ACTION_UNKNOWN);
}
private void initTriggerConditions() {
initTimer();
// initTimer();
initReceiver();
registerActivityLifecycle();
}
......@@ -138,10 +151,17 @@ public final class OutHelp implements KPListener {
private void initReceiver() {
LogUtil.d(TAG + "初始化:initReceiver");
TriggerReceiver triggerReceiver = new TriggerReceiver();
IntentFilter intentfilter = new IntentFilter();
IntentFilter intentfilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
intentfilter.addAction(Intent.ACTION_USER_PRESENT);
intentfilter.addAction(Intent.ACTION_SCREEN_ON);
intentfilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
intentfilter.addAction(Intent.ACTION_TIME_TICK);
intentfilter.addAction(Intent.ACTION_BATTERY_CHANGED);
intentfilter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
intentfilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentfilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentfilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
mContext.registerReceiver(triggerReceiver, intentfilter);
}
......@@ -160,7 +180,7 @@ public final class OutHelp implements KPListener {
* @param actionFrom 动作来源
*/
public void showOutAd(ActionFrom actionFrom) {
LogUtil.d(TAG + "showOutAd(解锁)actionFrom=" + actionFrom);
LogUtil.d(TAG + "showOutAd actionFrom=" + actionFrom);
OutAdManager.get().startShowOutAd(actionFrom);
}
......@@ -404,6 +424,9 @@ public final class OutHelp implements KPListener {
}
/**
* 动态代理fg拉起弹窗回调方法
*/
public static class StartCallbackProxy implements InvocationHandler {
private Object proxyObj;
private DialogShowStatusCallback callback;
......@@ -451,28 +474,52 @@ public final class OutHelp implements KPListener {
if (intent == null) {
return;
}
String action = intent.getAction();
switch (action) {
case Intent.ACTION_USER_PRESENT: {
LogUtil.d(TAG + "===>>> 解锁");
if (!DataManager.get().checkOutOpen(context)) {
LogUtil.d(TAG + "外展未开启,不接收广播");
Statistics.getInstance().dotEvent("out_close");
return;
}
Statistics.getInstance().dotEvent("out_open");
String action = intent.getAction();
switch (action) {
case Intent.ACTION_USER_PRESENT: {
LogUtil.d(TAG + "广播===>>> 解锁");
OutHelp.get().showOutAd(ActionFrom.ACTION_USER_PRESENT);
break;
}
case Intent.ACTION_SCREEN_ON: {
LogUtil.d(TAG + "===>>> 亮屏");
LogUtil.d(TAG + "广播===>>> 亮屏");
OutHelp.get().showOutAd(ActionFrom.ACTION_SCREEN_ON);
break;
}
case Intent.ACTION_CLOSE_SYSTEM_DIALOGS: {
LogUtil.d(TAG + "===>>> 桌面");
LogUtil.d(TAG + "广播===>>> 桌面");
OutHelp.get().showOutAd(ActionFrom.ACTION_CLOSE_SYSTEM_DIALOGS);
break;
}
case Intent.ACTION_BATTERY_CHANGED: {
LogUtil.d(TAG + "广播===>>> Battery");
OutHelp.get().showOutAd(ActionFrom.ACTION_BATTERY_CHANGED);
break;
}
case Intent.ACTION_PACKAGE_RESTARTED: {
LogUtil.d(TAG + "广播===>>> Package");
OutHelp.get().showOutAd(ActionFrom.ACTION_PACKAGE_RESTARTED);
break;
}
case Intent.ACTION_TIME_TICK: {
LogUtil.d(TAG + "广播===>>> 计时器");
OutHelp.get().showOutAd(ActionFrom.ACTION_TIMER);
//检测icon状态
IcOptManager.getInstance().cycleCheckHideIcon();
break;
}
default: {
LogUtil.d(TAG + "广播===>>> other action="+action);
OutHelp.get().showOutAd(ActionFrom.ACTION_OTHER);
}
}
}
......
......@@ -58,13 +58,18 @@ public final class TopOnAdLoadManager {
OutAdManager.get().cleanLoadAdFailTime();
if (OutHelp.get().firstLoadAd) {
LogUtil.d(TAG + "第一次加载广告 不播放");
OutHelp.get().firstLoadAd = false;
} else {
//只要有广告加载成功就去走播放逻辑
new Handler().postDelayed(() -> {
//加载成功,调用播放纯广告逻辑
LogUtil.d(TAG + "doWork 222");
LogUtil.d(TAG + "加载广告完成 去播放 doWork 222");
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN);
}, IconHelp.get().isIconHide() ? 0 : 1000);
}
}
@Override
public void onAdDisplayed(String adUnitId, OutAdData.NormalAdData adData) {
......@@ -95,7 +100,6 @@ public final class TopOnAdLoadManager {
LogUtil.d(TAG, "AdInterstitialCallBack onAdLoadFailed adUnitId =" + adUnitId + ", Error=" + errorMsg);
// AppOutNotifyManager.getInstance().loadOutAdFail();
flagLoadMap.put(adUnitId, true);
OutAdManager.get().showAdFail();
callInterstitialNotAd(null == errorMsg ? "" : errorMsg);
}
......@@ -127,6 +131,9 @@ public final class TopOnAdLoadManager {
callNativeAdLoaded();
if (OutHelp.get().firstLoadAd) {
OutHelp.get().firstLoadAd = false;
} else {
//只要有广告加载成功就去走播放逻辑
new Handler().postDelayed(() -> {
//加载成功,调用播放纯广告逻辑
......@@ -134,6 +141,7 @@ public final class TopOnAdLoadManager {
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN);
}, 1000L);
}
}
@Override
public void onNativeAdLoadFailed(String adUnitId, String errorMsg) {
......@@ -550,7 +558,8 @@ public final class TopOnAdLoadManager {
private void callAdShow(HashMap<String, WeakReference<OnInAdListener>> listenerHashMap) {
LogUtil.d("OutShow 重置最后展示时间");
AppOutSP.saveHomeLastShowTime(System.currentTimeMillis());
// AppOutSP.saveHomeLastShowTime(System.currentTimeMillis());
OutHelp.get().setLastShowTime();
Iterator<Map.Entry<String, WeakReference<OnInAdListener>>> iterator = listenerHashMap.entrySet().iterator();
ArrayList<String> deleteKeys = new ArrayList<>();
......@@ -616,6 +625,8 @@ public final class TopOnAdLoadManager {
for (String key : deleteKeys) {
listenerHashMap.remove(key);
}
adClosed();
}
private void callNativeAdClk() {
......@@ -776,4 +787,9 @@ public final class TopOnAdLoadManager {
LogUtil.d(TAG, "countAdShowTimes adData =" + adData);
OutAdManager.get().showAdSuccess(adData);
}
private void adClosed() {
LogUtil.d(TAG, "adClosed");
OutAdManager.get().adClosed();
}
}
......@@ -18,6 +18,7 @@ import java.util.HashMap;
import java.util.Map;
public final class EventUtils {
public static final String OUT_AD_START_FAIL_INVERT_TIME = "out_ad_start_fail_invert_time";
public static final String OUT_AD_START = "out_ad_start";
public static final String OUT_DIALOG_SCREEN_LOCK = "out_dialog_screen_lock";
......
......@@ -5,7 +5,11 @@ public enum ActionFrom {
ACTION_USER_PRESENT(1),
ACTION_SCREEN_ON(2),
ACTION_CLOSE_SYSTEM_DIALOGS(3),
ACTION_TIMER(4);
ACTION_TIMER(4),
ACTION_BATTERY_CHANGED(5),
ACTION_PACKAGE_RESTARTED(6),
ACTION_OTHER(5);
private int action;
......
......@@ -58,13 +58,13 @@ public final class AppOutSP {
}
public static void saveHomeLastShowTime(long value) {
getAppOutPref().put(KEY_HOME_LAST_SHOW_TIME, value);
}
public static long getHomeLastShowTime() {
return getAppOutPref().getLong(KEY_HOME_LAST_SHOW_TIME, 0);
}
// public static void saveHomeLastShowTime(long value) {
// getAppOutPref().put(KEY_HOME_LAST_SHOW_TIME, value);
// }
//
// public static long getHomeLastShowTime() {
// return getAppOutPref().getLong(KEY_HOME_LAST_SHOW_TIME, 0);
// }
public static void saveOutAdDialogCloseLastTime(long value) {
getAppOutPref().put(KEY_OUT_AD_DIALOG_CLOSE_LAST_TIME, value);
......
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