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 params; private NativeExpressAD nativeExpressAD; private MethodChannel methodChannel; public GDTExpressNativeView(int viewId, Map 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 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() { } }