package com.demo.library_flutter.nativeview;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.FrameLayout;
|
|
import com.bytedance.sdk.openadsdk.AdSlot;
|
import com.bytedance.sdk.openadsdk.TTAdDislike;
|
import com.bytedance.sdk.openadsdk.TTAdManager;
|
import com.bytedance.sdk.openadsdk.TTAdNative;
|
import com.bytedance.sdk.openadsdk.TTNativeExpressAd;
|
import com.demo.lib.common.util.common.DimenUtils;
|
import com.demo.lib.common.util.ui.MyActivityManager;
|
import com.demo.library_ad.TTAdManagerHolder;
|
import com.qq.e.ads.cfg.VideoOption;
|
import com.qq.e.ads.nativ.ADSize;
|
import com.qq.e.ads.nativ.NativeExpressAD;
|
import com.qq.e.ads.nativ.NativeExpressADView;
|
import com.qq.e.comm.util.AdError;
|
|
import java.util.List;
|
import java.util.Map;
|
|
import androidx.annotation.NonNull;
|
import io.flutter.plugin.common.BinaryMessenger;
|
import io.flutter.plugin.common.MethodCall;
|
import io.flutter.plugin.common.MethodChannel;
|
import io.flutter.plugin.platform.PlatformView;
|
|
class GDTExpressNativeView implements PlatformView {
|
private Map<String, Object> params;
|
private NativeExpressAD nativeExpressAD;
|
private MethodChannel methodChannel;
|
|
public GDTExpressNativeView(int viewId, Map<String, Object> params, BinaryMessenger binaryMessenger) {
|
this.params = params;
|
methodChannel = new MethodChannel(binaryMessenger, "ad-gdt-express-view-" + viewId);
|
methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
|
@Override
|
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
|
if ("refresh".equalsIgnoreCase(call.method)) {
|
//刷新
|
loadAd();
|
}
|
}
|
});
|
}
|
|
private FrameLayout fl_container;
|
private NativeExpressADView nativeExpressADView;
|
|
@Override
|
public View getView() {
|
if (fl_container == null) {
|
fl_container = new FrameLayout(getView().getContext());
|
}
|
|
if (nativeExpressAD == null) {
|
float width = Float.parseFloat(params.get("width") + "");
|
float height = Float.parseFloat(params.get("height") + "");
|
String pid = params.get("pid") + "";
|
nativeExpressAD = new NativeExpressAD(getView().getContext(), new ADSize(DimenUtils.dipToPixels((int) width, getView().getContext()), ADSize.AUTO_HEIGHT), pid, new NativeExpressAD.NativeExpressADListener() {
|
@Override
|
public void onADLoaded(List<NativeExpressADView> list) {
|
if (nativeExpressADView != null) {
|
nativeExpressADView.destroy();
|
}
|
nativeExpressADView = list.get(0);
|
nativeExpressADView.render();
|
if (fl_container.getChildCount() > 0) {
|
fl_container.removeAllViews();
|
}
|
if (nativeExpressADView.getParent() != null) {
|
((ViewGroup) nativeExpressADView.getParent()).removeAllViews();
|
}
|
// 需要保证 View 被绘制的时候是可见的,否则将无法产生曝光和收益。
|
fl_container.addView(nativeExpressADView);
|
}
|
|
@Override
|
public void onRenderFail(NativeExpressADView nativeExpressADView) {
|
methodChannel.invokeMethod("loadFail", "渲染失败");
|
}
|
|
@Override
|
public void onRenderSuccess(NativeExpressADView nativeExpressADView) {
|
|
}
|
|
@Override
|
public void onADExposure(NativeExpressADView nativeExpressADView) {
|
|
}
|
|
@Override
|
public void onADClicked(NativeExpressADView nativeExpressADView) {
|
|
}
|
|
@Override
|
public void onADClosed(NativeExpressADView nativeExpressADView) {
|
methodChannel.invokeMethod("close", null);
|
}
|
|
@Override
|
public void onADLeftApplication(NativeExpressADView nativeExpressADView) {
|
|
}
|
|
@Override
|
public void onNoAD(AdError adError) {
|
methodChannel.invokeMethod("loadFail", adError.getErrorMsg());
|
}
|
});
|
|
nativeExpressAD.setVideoOption(new VideoOption.Builder()
|
.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频
|
.setAutoPlayMuted(true) // 自动播放时为静音
|
.build());
|
}
|
loadAd();
|
return fl_container;
|
}
|
|
private void loadAd() {
|
if (nativeExpressAD != null) {
|
nativeExpressAD.loadAD(1);
|
}
|
}
|
|
@Override
|
public void dispose() {
|
|
}
|
}
|