Android Mopub Native
於 2019年7月11日 (四) 03:47 由 imported>Wikiuser 所做的修訂
請建立一個Class並繼承Mopub所提供的CustomEventNative
Class實作內容如下:
package com.taiwanmobile.pt.adp.nativeads; import android.content.Context; import android.support.annotation.NonNull; import android.util.Log; import android.view.View; import com.mopub.nativeads.CustomEventNative; import com.mopub.nativeads.NativeErrorCode; import com.mopub.nativeads.StaticNativeAd; import com.taiwanmobile.pt.adp.view.TWMAd; import com.taiwanmobile.pt.adp.view.TWMAdRequest; import com.taiwanmobile.pt.adp.view.TWMAdViewListener; import com.taiwanmobile.pt.adp.view.TWMNativeAd; import org.json.JSONObject; import java.util.Map; // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.nativeads.TAMediaMopubNative 填入後台的Custom Event Class欄位 public class TAMediaMopubNative extends CustomEventNative { private static final String TAG = "TAMediaMopubNative"; private static final String TAM_NATIVE_KEY_TITLE = "LONGSUBJECT"; private static final String TAM_NATIVE_KEY_TEXT = "BODY"; private static final String TAM_NATIVE_KEY_MAIN_IMAGE_URL = "IMAGE1200X627"; private static final String TAM_NATIVE_KEY_ICON_URL = "ICONSQUARE"; private static final String TAM_NATIVE_KEY_DESTINATION_URL = "nurl"; private static final String TAM_NATIVE_KEY_CALLTOACTION = "CTA"; private TWMNativeAd nativeAd; @Override protected void loadNativeAd(final Context context, final CustomEventNativeListener customEventNativeListener, final Map<String, Object> localExtras, final Map<String, String> serverExtras) { Log.d(TAG, "loadNativeAd(" + serverExtras.get("adUnitId") + ") invoked!!"); String adUnitId = serverExtras.get("adUnitId"); //後台設定的adUnitId會透過此Key值取得 nativeAd = new TWMNativeAd(context, adUnitId); final TWMediaStaticNativeAd staticNativeAd = new TWMediaStaticNativeAd( nativeAd, customEventNativeListener ); nativeAd.setAdListener(staticNativeAd); nativeAd.loadAd(new TWMAdRequest()); } private static synchronized void mapStaticNativeAd( @NonNull final StaticNativeAd mopubSupportedAd, @NonNull final TWMNativeAd twmNative) throws Exception { if (twmNative.isReady()) { JSONObject content = twmNative.getNativeAdContent(); String longSubject = (content.has(TAM_NATIVE_KEY_TITLE)) ? content.getString(TAM_NATIVE_KEY_TITLE) : null; String body = (content.has(TAM_NATIVE_KEY_TEXT)) ? content.getString(TAM_NATIVE_KEY_TEXT) : null; String iconUrl = (content.has(TAM_NATIVE_KEY_ICON_URL)) ? content.getString(TAM_NATIVE_KEY_ICON_URL) : null; String imageUrl = (content.has(TAM_NATIVE_KEY_MAIN_IMAGE_URL)) ? content.getString(TAM_NATIVE_KEY_MAIN_IMAGE_URL) : null; String targetUrl = (content.has(TAM_NATIVE_KEY_DESTINATION_URL)) ? content.getString(TAM_NATIVE_KEY_DESTINATION_URL) : null; String callToAction = (content.has(TAM_NATIVE_KEY_CALLTOACTION)) ? content.getString(TAM_NATIVE_KEY_CALLTOACTION) : null; if (longSubject != null) mopubSupportedAd.setTitle(longSubject); if (body != null) mopubSupportedAd.setText(body); if (imageUrl != null) mopubSupportedAd.setMainImageUrl(imageUrl); if (iconUrl != null) mopubSupportedAd.setIconImageUrl(iconUrl); if (targetUrl != null) mopubSupportedAd.setClickDestinationUrl(targetUrl); if (callToAction != null) mopubSupportedAd.setCallToAction(callToAction); } } static class TWMediaStaticNativeAd extends StaticNativeAd implements TWMAdViewListener { private final CustomEventNativeListener mCustomEventNativeListener; private final TWMNativeAd nativeAd; public TWMediaStaticNativeAd(final TWMNativeAd nativeAD, final CustomEventNativeListener customEventNativeListener) { mCustomEventNativeListener = customEventNativeListener; nativeAd = nativeAD; } @Override public void prepare(final View view) { super.prepare(view); // Set click event to all view. view.setOnClickListener(clickListener); } @Override public void clear(View view) { view.setOnClickListener(null); super.clear(view); } @Override public void destroy() { nativeAd.destroy(); super.destroy(); } // TWMAdViewListener @Override public void onReceiveAd(TWMAd twmAd) { try { mapStaticNativeAd(this, nativeAd); if(mCustomEventNativeListener != null) mCustomEventNativeListener.onNativeAdLoaded(this); } catch (Exception e) { Log.e(TAG, "Native Content Parse Error: " + e.getMessage()); if(mCustomEventNativeListener != null) mCustomEventNativeListener.onNativeAdFailed(NativeErrorCode.NETWORK_INVALID_STATE); } } @Override public void onFailedToReceiveAd(TWMAd twmAd, TWMAdRequest.ErrorCode errorCode) { mCustomEventNativeListener.onNativeAdFailed(NativeErrorCode.NETWORK_NO_FILL); } @Override public void onPresentScreen(TWMAd twmAd) {} @Override public void onDismissScreen(TWMAd twmAd) {} @Override public void onLeaveApplication(TWMAd twmAd) {} private View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View v) { notifyAdClicked(); nativeAd.handleClick(); } }; } }