package com.demo.library_flutter.nativeview;
|
|
import android.app.Activity;
|
import android.app.ActivityManager;
|
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.TTAdConstant;
|
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.ui.MyActivityManager;
|
import com.demo.library_ad.TTAdManagerHolder;
|
import com.idlefish.flutterboost.FlutterBoost;
|
|
import java.util.List;
|
import java.util.Map;
|
|
import androidx.annotation.NonNull;
|
import io.flutter.plugin.common.BinaryMessenger;
|
import io.flutter.plugin.common.MessageCodec;
|
import io.flutter.plugin.common.MethodCall;
|
import io.flutter.plugin.common.MethodChannel;
|
import io.flutter.plugin.platform.PlatformView;
|
import io.flutter.plugin.platform.PlatformViewFactory;
|
|
class CSJExpressNativeView implements PlatformView {
|
private Map<String, Object> params;
|
private TTAdNative mTTAdNative;
|
private MethodChannel methodChannel;
|
|
public CSJExpressNativeView(int viewId, Map<String, Object> params, Context context, BinaryMessenger binaryMessenger) {
|
this.params = params;
|
try {
|
TTAdManager ttAdManager = TTAdManagerHolder.get();
|
mTTAdNative = ttAdManager.createAdNative(context);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
methodChannel = new MethodChannel(binaryMessenger, "ad-csj-express-view-" + viewId);
|
methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
|
@Override
|
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
|
if ("refresh".equalsIgnoreCase(call.method)) {
|
//刷新
|
if (fl_container != null && adSlot != null) {
|
loadAd(adSlot, fl_container);
|
}
|
|
}
|
}
|
});
|
}
|
|
private AdSlot adSlot = null;
|
private FrameLayout fl_container;
|
|
@Override
|
public View getView() {
|
if (fl_container == null) {
|
fl_container = new FrameLayout(getView().getContext());
|
}
|
if (adSlot == null) {
|
float width = Float.parseFloat(params.get("width") + "");
|
float height = Float.parseFloat(params.get("height") + "");
|
String pid = params.get("pid") + "";
|
adSlot = new AdSlot.Builder()
|
.setCodeId(pid)
|
.setSupportDeepLink(true)
|
.setExpressViewAcceptedSize(width, height)
|
.setAdCount(1) //请求广告数量为1到3条
|
.build();
|
}
|
loadAd(adSlot, fl_container);
|
return fl_container;
|
}
|
|
private void loadAd(AdSlot adSlot, FrameLayout container) {
|
mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
|
@Override
|
public void onError(int i, String s) {
|
//加载失败
|
methodChannel.invokeMethod("loadFail", s);
|
}
|
|
@Override
|
public void onNativeExpressAdLoad(List<TTNativeExpressAd> list) {
|
|
if (list != null && list.size() > 0) {
|
|
if (FlutterBoost.instance().currentActivity() != null) {
|
list.get(0).setDislikeCallback(FlutterBoost.instance().currentActivity(), new TTAdDislike.DislikeInteractionCallback() {
|
@Override
|
public void onShow() {
|
|
}
|
|
@Override
|
public void onSelected(int i, String s, boolean b) {
|
//关闭广告
|
methodChannel.invokeMethod("close", null);
|
}
|
|
@Override
|
public void onCancel() {
|
|
}
|
});
|
}
|
list.get(0).render();
|
fl_container.removeAllViews();
|
if (list.get(0).getExpressAdView().getParent() != null) {
|
((ViewGroup) list.get(0).getExpressAdView().getParent()).removeAllViews();
|
}
|
fl_container.addView(list.get(0).getExpressAdView());
|
}
|
}
|
});
|
|
}
|
|
@Override
|
public void dispose() {
|
|
}
|
}
|