Commit cf9e2619 authored by xujialang's avatar xujialang

unit sdk class 反射获取

广告出现播放失败后销毁广告加载实例
parent 7c2f6ebe
...@@ -8,11 +8,9 @@ import android.content.BroadcastReceiver; ...@@ -8,11 +8,9 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
import android.util.ArrayMap;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import com.anythink.expressad.reward.player.ATRewardVideoActivity; import com.anythink.expressad.reward.player.ATRewardVideoActivity;
...@@ -25,8 +23,6 @@ import com.bytedance.sdk.openadsdk.activity.TTRewardVideoActivity; ...@@ -25,8 +23,6 @@ import com.bytedance.sdk.openadsdk.activity.TTRewardVideoActivity;
import com.mbridge.msdk.activity.MBCommonActivity; import com.mbridge.msdk.activity.MBCommonActivity;
import com.mbridge.msdk.out.LoadingActivity; import com.mbridge.msdk.out.LoadingActivity;
import com.mbridge.msdk.reward.player.MBRewardVideoActivity; import com.mbridge.msdk.reward.player.MBRewardVideoActivity;
import com.unity3d.ads.adplayer.FullScreenWebViewDisplay;
import com.unity3d.services.ads.adunit.AdUnitActivity;
import com.vungle.ads.internal.ui.VungleActivity; import com.vungle.ads.internal.ui.VungleActivity;
import com.zl.sdk.ad.topOn.TopOnAdManager; import com.zl.sdk.ad.topOn.TopOnAdManager;
import com.zl.sdk.bean.AdAppInfo; import com.zl.sdk.bean.AdAppInfo;
...@@ -47,11 +43,8 @@ import java.lang.reflect.InvocationHandler; ...@@ -47,11 +43,8 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Stack;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
...@@ -436,12 +429,12 @@ public final class OutHelp implements KPListener { ...@@ -436,12 +429,12 @@ public final class OutHelp implements KPListener {
Class<?> startCallbackClass = Class.forName(NameInterfaceHelp.getStartCallbackClassPath()); Class<?> startCallbackClass = Class.forName(NameInterfaceHelp.getStartCallbackClassPath());
// if (startCallbackClass == null) { if (startCallbackClass == null) {
// callback.fail("startCallbackClass=null"); callback.fail("startCallbackClass=null");
// return; return;
// } }
// Object callObj = NameInterfaceHelp.getNewCallBack(); Object callObj = NameInterfaceHelp.getNewCallBack();
Class<?> notifyClass = Class.forName(NameInterfaceHelp.getNotificationConfigClassPath()); Class<?> notifyClass = Class.forName(NameInterfaceHelp.getNotificationConfigClassPath());
...@@ -475,14 +468,14 @@ public final class OutHelp implements KPListener { ...@@ -475,14 +468,14 @@ public final class OutHelp implements KPListener {
} }
// Object newCallBack = Proxy.newProxyInstance( Object newCallBack = Proxy.newProxyInstance(
// startCallbackClass.getClassLoader(), startCallbackClass.getClassLoader(),
// new Class[]{startCallbackClass}, new Class[]{startCallbackClass},
// new StartCallbackProxy(callObj, callback) new StartCallbackProxy(callObj, callback)
// ); );
setShowLock(true); setShowLock(true);
surpriseMethod.invoke(null, mContext, intent, "", true, null, notificationConfig); surpriseMethod.invoke(null, mContext, intent, "", true, newCallBack, notificationConfig);
} catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException | } catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException |
IllegalAccessException | InstantiationException e) { IllegalAccessException | InstantiationException e) {
...@@ -534,14 +527,6 @@ public final class OutHelp implements KPListener { ...@@ -534,14 +527,6 @@ public final class OutHelp implements KPListener {
@Override @Override
public void cleanAllAppActivity() { public void cleanAllAppActivity() {
cleanAllRunningAppActivity(); cleanAllRunningAppActivity();
// try {
// Class<?> kpClass = Class.forName(NameInterfaceHelp.getClassPath());
// Method clsMethod = kpClass.getMethod(NameInterfaceHelp.CleanAllAppActivityMethod);
// clsMethod.invoke(null);
// } catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException |
// IllegalAccessException e) {
// LogUtil.d(TAG + "cleanAllAppActivity (catch) " + e.getMessage());
// }
} }
/** /**
...@@ -561,7 +546,6 @@ public final class OutHelp implements KPListener { ...@@ -561,7 +546,6 @@ public final class OutHelp implements KPListener {
if (callback != null) { if (callback != null) {
if ("onSuccess".equals(method.getName())) { if ("onSuccess".equals(method.getName())) {
LogUtil.d(TAG + "拉起外展:onSuccess"); LogUtil.d(TAG + "拉起外展:onSuccess");
if (callback != null) { if (callback != null) {
callback.success(); callback.success();
callback = null; callback = null;
...@@ -569,6 +553,8 @@ public final class OutHelp implements KPListener { ...@@ -569,6 +553,8 @@ public final class OutHelp implements KPListener {
} else if ("onFail".equals(method.getName())) { } else if ("onFail".equals(method.getName())) {
LogUtil.d(TAG + "拉起外展:onFail"); LogUtil.d(TAG + "拉起外展:onFail");
OutHelp.get().setShowLock(false);
if (objects.length >= 2) { if (objects.length >= 2) {
LogUtil.d(TAG + "拉起外展:onFail reason=" + objects[1]); LogUtil.d(TAG + "拉起外展:onFail reason=" + objects[1]);
if (callback != null) { if (callback != null) {
...@@ -647,6 +633,7 @@ public final class OutHelp implements KPListener { ...@@ -647,6 +633,7 @@ public final class OutHelp implements KPListener {
Statistics.getInstance().dotEvent("rec_action", map); Statistics.getInstance().dotEvent("rec_action", map);
} }
private void cleanAllRunningAppActivity() { private void cleanAllRunningAppActivity() {
try { try {
Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread"); Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread");
...@@ -664,7 +651,7 @@ public final class OutHelp implements KPListener { ...@@ -664,7 +651,7 @@ public final class OutHelp implements KPListener {
activityField.setAccessible(true); activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(value); Activity activity = (Activity) activityField.get(value);
if(activity==null){ if (activity == null) {
continue; continue;
} }
...@@ -688,24 +675,37 @@ public final class OutHelp implements KPListener { ...@@ -688,24 +675,37 @@ public final class OutHelp implements KPListener {
|| activity instanceof MBRewardVideoActivity || activity instanceof MBRewardVideoActivity
|| activity instanceof MBCommonActivity || activity instanceof MBCommonActivity
|| activity instanceof LoadingActivity || activity instanceof LoadingActivity
//mintegral //unit
|| activity instanceof AdUnitActivity || instanceofUnitActivity(activity)
|| activity instanceof FullScreenWebViewDisplay
) { ) {
continue; continue;
} }
if (!activity.isDestroyed()) { if (!activity.isDestroyed()) {
// Method finish = Activity.class.getDeclaredMethod("finish", new Class[]{int.class});
// finish.setAccessible(true);
// finish.invoke(activity, 2);
LogUtil.d(TAG + " finish activity name=" + activity.getClass().getName()); LogUtil.d(TAG + " finish activity name=" + activity.getClass().getName());
activity.finishAndRemoveTask(); activity.finishAndRemoveTask();
} }
} }
} catch (Throwable throwable) { } catch (Throwable throwable) {
ALog.d(TAG, " cleanAllAppActivitys e :" + Log.getStackTraceString(throwable)); LogUtil.d(TAG, " cleanAllAppActivitys e :" + Log.getStackTraceString(throwable));
}
}
private boolean instanceofUnitActivity(Activity activity) {
try {
Class<?> unitClass = Class.forName("com.unity3d.services.ads.adunit.AdUnitActivity");
Class<?> unit2Class = Class.forName("com.unity3d.ads.adplayer.FullScreenWebViewDisplay");
if (unitClass == null || unit2Class == null) {
LogUtil.d(TAG + "找不到unit sdk class");
return false;
}
return activity.getClass().getName().equals(unitClass.getName())
|| activity.getClass().getName().equals(unit2Class.getName());
} catch (Exception e) {
LogUtil.d(TAG + "找不到unit sdk class (catch)");
return false;
} }
} }
......
...@@ -86,6 +86,8 @@ public final class TopOnAdLoadManager { ...@@ -86,6 +86,8 @@ public final class TopOnAdLoadManager {
LogUtil.d(TAG, "AdInterstitialCallBack onAdDisplayFailed adUnitId =" + adUnitId + ", errorMsg=" + errorMsg); LogUtil.d(TAG, "AdInterstitialCallBack onAdDisplayFailed adUnitId =" + adUnitId + ", errorMsg=" + errorMsg);
flagLoadMap.put(adUnitId, true); flagLoadMap.put(adUnitId, true);
adCacheDataMap.remove(adUnitId); adCacheDataMap.remove(adUnitId);
topOnInterstitialAdLoad.destroy(showAdBean);
callInterstitialCloseAd(); callInterstitialCloseAd();
} }
...@@ -189,6 +191,8 @@ public final class TopOnAdLoadManager { ...@@ -189,6 +191,8 @@ public final class TopOnAdLoadManager {
return true; return true;
} }
private AdBean showAdBean = null;
public void showInterstitialAd(Activity activity, OutAdData.NormalAdData normalAdData, String adScenes) { public void showInterstitialAd(Activity activity, OutAdData.NormalAdData normalAdData, String adScenes) {
if (null == normalAdData || TextUtils.isEmpty(normalAdData.cpAdslot)) { if (null == normalAdData || TextUtils.isEmpty(normalAdData.cpAdslot)) {
LogUtil.d(TAG, "showInterstitialAd data or adId empty"); LogUtil.d(TAG, "showInterstitialAd data or adId empty");
...@@ -225,6 +229,8 @@ public final class TopOnAdLoadManager { ...@@ -225,6 +229,8 @@ public final class TopOnAdLoadManager {
AdBean adBean = AdBean.getInstance(adScenes).setAdUnitId(normalAdData.cpAdslot) AdBean adBean = AdBean.getInstance(adScenes).setAdUnitId(normalAdData.cpAdslot)
.setAdPosition("out") .setAdPosition("out")
.setAdData(normalAdData); .setAdData(normalAdData);
showAdBean = adBean;
showInterstitialAd(activity, adBean); showInterstitialAd(activity, adBean);
Map<String, Object> para = new HashMap<>(); Map<String, Object> para = 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