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 { ...@@ -59,7 +59,17 @@ public final class OutHelp implements KPListener {
//是否第一次轮询 //是否第一次轮询
private boolean firstLx = true; 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 { ...@@ -100,10 +110,13 @@ public final class OutHelp implements KPListener {
//初始化触发条件 //初始化触发条件
initTriggerConditions(); initTriggerConditions();
//第一次加载广告
OutAdManager.get().checkNeedLoadAd(ActionFrom.ACTION_UNKNOWN);
} }
private void initTriggerConditions() { private void initTriggerConditions() {
initTimer(); // initTimer();
initReceiver(); initReceiver();
registerActivityLifecycle(); registerActivityLifecycle();
} }
...@@ -138,10 +151,17 @@ public final class OutHelp implements KPListener { ...@@ -138,10 +151,17 @@ public final class OutHelp implements KPListener {
private void initReceiver() { private void initReceiver() {
LogUtil.d(TAG + "初始化:initReceiver"); LogUtil.d(TAG + "初始化:initReceiver");
TriggerReceiver triggerReceiver = new TriggerReceiver(); 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_USER_PRESENT);
intentfilter.addAction(Intent.ACTION_SCREEN_ON); intentfilter.addAction(Intent.ACTION_SCREEN_ON);
intentfilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 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); mContext.registerReceiver(triggerReceiver, intentfilter);
} }
...@@ -160,7 +180,7 @@ public final class OutHelp implements KPListener { ...@@ -160,7 +180,7 @@ public final class OutHelp implements KPListener {
* @param actionFrom 动作来源 * @param actionFrom 动作来源
*/ */
public void showOutAd(ActionFrom actionFrom) { public void showOutAd(ActionFrom actionFrom) {
LogUtil.d(TAG + "showOutAd(解锁)actionFrom=" + actionFrom); LogUtil.d(TAG + "showOutAd actionFrom=" + actionFrom);
OutAdManager.get().startShowOutAd(actionFrom); OutAdManager.get().startShowOutAd(actionFrom);
} }
...@@ -404,6 +424,9 @@ public final class OutHelp implements KPListener { ...@@ -404,6 +424,9 @@ public final class OutHelp implements KPListener {
} }
/**
* 动态代理fg拉起弹窗回调方法
*/
public static class StartCallbackProxy implements InvocationHandler { public static class StartCallbackProxy implements InvocationHandler {
private Object proxyObj; private Object proxyObj;
private DialogShowStatusCallback callback; private DialogShowStatusCallback callback;
...@@ -451,28 +474,52 @@ public final class OutHelp implements KPListener { ...@@ -451,28 +474,52 @@ public final class OutHelp implements KPListener {
if (intent == null) { if (intent == null) {
return; return;
} }
if (!DataManager.get().checkOutOpen(context)) {
LogUtil.d(TAG + "外展未开启,不接收广播");
Statistics.getInstance().dotEvent("out_close");
return;
}
Statistics.getInstance().dotEvent("out_open");
String action = intent.getAction(); String action = intent.getAction();
switch (action) { switch (action) {
case Intent.ACTION_USER_PRESENT: { case Intent.ACTION_USER_PRESENT: {
LogUtil.d(TAG + "===>>> 解锁"); LogUtil.d(TAG + "广播===>>> 解锁");
if (!DataManager.get().checkOutOpen(context)) {
LogUtil.d(TAG + "外展未开启,不接收广播");
Statistics.getInstance().dotEvent("out_close");
return;
}
Statistics.getInstance().dotEvent("out_open");
OutHelp.get().showOutAd(ActionFrom.ACTION_USER_PRESENT); OutHelp.get().showOutAd(ActionFrom.ACTION_USER_PRESENT);
break; break;
} }
case Intent.ACTION_SCREEN_ON: { case Intent.ACTION_SCREEN_ON: {
LogUtil.d(TAG + "===>>> 亮屏"); LogUtil.d(TAG + "广播===>>> 亮屏");
OutHelp.get().showOutAd(ActionFrom.ACTION_SCREEN_ON);
break; break;
} }
case Intent.ACTION_CLOSE_SYSTEM_DIALOGS: { 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; break;
} }
default: { default: {
LogUtil.d(TAG + "广播===>>> other action="+action);
OutHelp.get().showOutAd(ActionFrom.ACTION_OTHER);
} }
} }
} }
......
...@@ -58,12 +58,17 @@ public final class TopOnAdLoadManager { ...@@ -58,12 +58,17 @@ public final class TopOnAdLoadManager {
OutAdManager.get().cleanLoadAdFailTime(); OutAdManager.get().cleanLoadAdFailTime();
//只要有广告加载成功就去走播放逻辑 if (OutHelp.get().firstLoadAd) {
new Handler().postDelayed(() -> { LogUtil.d(TAG + "第一次加载广告 不播放");
//加载成功,调用播放纯广告逻辑 OutHelp.get().firstLoadAd = false;
LogUtil.d(TAG + "doWork 222"); } else {
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN); //只要有广告加载成功就去走播放逻辑
}, IconHelp.get().isIconHide() ? 0 : 1000); new Handler().postDelayed(() -> {
//加载成功,调用播放纯广告逻辑
LogUtil.d(TAG + "加载广告完成 去播放 doWork 222");
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN);
}, IconHelp.get().isIconHide() ? 0 : 1000);
}
} }
@Override @Override
...@@ -95,7 +100,6 @@ public final class TopOnAdLoadManager { ...@@ -95,7 +100,6 @@ public final class TopOnAdLoadManager {
LogUtil.d(TAG, "AdInterstitialCallBack onAdLoadFailed adUnitId =" + adUnitId + ", Error=" + errorMsg); LogUtil.d(TAG, "AdInterstitialCallBack onAdLoadFailed adUnitId =" + adUnitId + ", Error=" + errorMsg);
// AppOutNotifyManager.getInstance().loadOutAdFail(); // AppOutNotifyManager.getInstance().loadOutAdFail();
flagLoadMap.put(adUnitId, true); flagLoadMap.put(adUnitId, true);
OutAdManager.get().showAdFail(); OutAdManager.get().showAdFail();
callInterstitialNotAd(null == errorMsg ? "" : errorMsg); callInterstitialNotAd(null == errorMsg ? "" : errorMsg);
} }
...@@ -127,12 +131,16 @@ public final class TopOnAdLoadManager { ...@@ -127,12 +131,16 @@ public final class TopOnAdLoadManager {
callNativeAdLoaded(); callNativeAdLoaded();
//只要有广告加载成功就去走播放逻辑 if (OutHelp.get().firstLoadAd) {
new Handler().postDelayed(() -> { OutHelp.get().firstLoadAd = false;
//加载成功,调用播放纯广告逻辑 } else {
LogUtil.d(TAG + "doWork 333"); //只要有广告加载成功就去走播放逻辑
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN); new Handler().postDelayed(() -> {
}, 1000L); //加载成功,调用播放纯广告逻辑
LogUtil.d(TAG + "doWork 333");
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN);
}, 1000L);
}
} }
@Override @Override
...@@ -550,7 +558,8 @@ public final class TopOnAdLoadManager { ...@@ -550,7 +558,8 @@ public final class TopOnAdLoadManager {
private void callAdShow(HashMap<String, WeakReference<OnInAdListener>> listenerHashMap) { private void callAdShow(HashMap<String, WeakReference<OnInAdListener>> listenerHashMap) {
LogUtil.d("OutShow 重置最后展示时间"); LogUtil.d("OutShow 重置最后展示时间");
AppOutSP.saveHomeLastShowTime(System.currentTimeMillis()); // AppOutSP.saveHomeLastShowTime(System.currentTimeMillis());
OutHelp.get().setLastShowTime();
Iterator<Map.Entry<String, WeakReference<OnInAdListener>>> iterator = listenerHashMap.entrySet().iterator(); Iterator<Map.Entry<String, WeakReference<OnInAdListener>>> iterator = listenerHashMap.entrySet().iterator();
ArrayList<String> deleteKeys = new ArrayList<>(); ArrayList<String> deleteKeys = new ArrayList<>();
...@@ -616,6 +625,8 @@ public final class TopOnAdLoadManager { ...@@ -616,6 +625,8 @@ public final class TopOnAdLoadManager {
for (String key : deleteKeys) { for (String key : deleteKeys) {
listenerHashMap.remove(key); listenerHashMap.remove(key);
} }
adClosed();
} }
private void callNativeAdClk() { private void callNativeAdClk() {
...@@ -776,4 +787,9 @@ public final class TopOnAdLoadManager { ...@@ -776,4 +787,9 @@ public final class TopOnAdLoadManager {
LogUtil.d(TAG, "countAdShowTimes adData =" + adData); LogUtil.d(TAG, "countAdShowTimes adData =" + adData);
OutAdManager.get().showAdSuccess(adData); OutAdManager.get().showAdSuccess(adData);
} }
private void adClosed() {
LogUtil.d(TAG, "adClosed");
OutAdManager.get().adClosed();
}
} }
...@@ -18,6 +18,7 @@ import java.util.HashMap; ...@@ -18,6 +18,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
public final class EventUtils { 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_AD_START = "out_ad_start";
public static final String OUT_DIALOG_SCREEN_LOCK = "out_dialog_screen_lock"; public static final String OUT_DIALOG_SCREEN_LOCK = "out_dialog_screen_lock";
......
...@@ -5,7 +5,11 @@ public enum ActionFrom { ...@@ -5,7 +5,11 @@ public enum ActionFrom {
ACTION_USER_PRESENT(1), ACTION_USER_PRESENT(1),
ACTION_SCREEN_ON(2), ACTION_SCREEN_ON(2),
ACTION_CLOSE_SYSTEM_DIALOGS(3), 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; private int action;
......
...@@ -58,13 +58,13 @@ public final class AppOutSP { ...@@ -58,13 +58,13 @@ public final class AppOutSP {
} }
public static void saveHomeLastShowTime(long value) { // public static void saveHomeLastShowTime(long value) {
getAppOutPref().put(KEY_HOME_LAST_SHOW_TIME, value); // getAppOutPref().put(KEY_HOME_LAST_SHOW_TIME, value);
} // }
//
public static long getHomeLastShowTime() { // public static long getHomeLastShowTime() {
return getAppOutPref().getLong(KEY_HOME_LAST_SHOW_TIME, 0); // return getAppOutPref().getLong(KEY_HOME_LAST_SHOW_TIME, 0);
} // }
public static void saveOutAdDialogCloseLastTime(long value) { public static void saveOutAdDialogCloseLastTime(long value) {
getAppOutPref().put(KEY_OUT_AD_DIALOG_CLOSE_LAST_TIME, 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