「Android Integeration with Mopub Mediation」修訂間的差異
		
		
		
		
		
		跳至導覽
		跳至搜尋
		
				
		
		
	
| imported>Wikiuser | imported>Wikiuser  | ||
| 行 30: | 行 30: | ||
| <br> | <br> | ||
| <big><u>Step 2: 新增廣告聯播網</u></big><br> | |||
| 進入Network分頁,並點選Add a Network<br> | |||
| [[image:Mopub_Step2-1.png | 700px]]<br><br> | |||
| 點選Custom Native Network<br> | |||
| [[image:Mopub_Step2-2.png | 700px]]<br><br> | |||
| 設定Network Title(名字可任意取),並設定實作的類別名稱與參數,以下以Banner作為範例:<br> | |||
| [[image:Mopub_Step2-3.png | 700px]]<br><br> | |||
| 依欄位填入<br> | |||
| <ol>  | |||
| <li>Custom Event Class: 用於實作com.mopub.mobileads.CustomEventBanner的類別名稱,必須輸入完整的package name,如com.taiwanmobile.pt.adp.mediation.TAMediaMopubBanner</li> | |||
| <li>Custom Event Class Data: 請依指定格式輸入您的版位ID (可向您的TAMedia窗口詢問),格式為 {"adUnitId":"<版位ID>"}</li> | |||
| </ol> | |||
| 輸入完畢後,後台會自動儲存<br> | |||
| [[image:Mopub_Step2-4.png | 700px]]<br><br> | |||
| 最後進入Segment分頁,啟用方才設定的聯播網<br> | |||
| [[image:Mopub_Step2-5.png | 700px]]<br><br> | |||
| 若有多個聯播網,可透過eCPM調整不同聯播網的優先權<br> | |||
| [[image:Mopub_Step2-6.png | 700px]]<br><br> | |||
| <br> | |||
| <br> | |||
| == Mopub程式整合 == | |||
| <big><u>Step 1: Download TAMedia & Mopub SDK</u></big><br> | |||
| :a. 請參照 [https://github.com/mopub/mopub-android-sdk/wiki/Getting-Started#requirements-and-dependencies Mopub Github] 所提供的方式,將Mopub SDK加到您的專案中。<br> | |||
| :b. [[Download Android SDK 2 | Download TAMedia SDK]]<br><br> | |||
| <big><u>Step 2: 在AndroidManifest.xml加入所需的權限與Activity</u></big><br> | |||
|    <!-- Mopub & TAMedia Permission --> |    <!-- Mopub & TAMedia Permission --> | ||
|    <uses-permission android:name="android.permission.INTERNET" /> |    <uses-permission android:name="android.permission.INTERNET" /> | ||
| 行 40: | 行 72: | ||
|    <uses-permission android:name="android.permission.VIBRATE" /> <!-- optional --> |    <uses-permission android:name="android.permission.VIBRATE" /> <!-- optional --> | ||
|    <uses-permission android:name="android.permission.CAMERA"/>  <!-- optional, SDK4.0上請加入, 以獲得更豐富的廣告內容 --> |    <uses-permission android:name="android.permission.CAMERA"/>  <!-- optional, SDK4.0上請加入, 以獲得更豐富的廣告內容 --> | ||
|    <uses-permission android:name="android.permission.RECORD_AUDIO"/>  <!-- optional, SDK4.0上請加入, 以獲得更豐富的廣告內容 --> |    <uses-permission android:name="android.permission.RECORD_AUDIO"/>  <!-- optional, SDK4.0上請加入, 以獲得更豐富的廣告內容 --><br> | ||
|    <!-- Mopub Permission --> |    <!-- Mopub Permission --> | ||
|    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | ||
|   <!-- TAMedia Activities --> | |||
|   <activity | |||
|   	android:name="com.taiwanmobile.pt.adp.view.TWMAdActivity" | |||
|   	android:configChanges="orientation|keyboardHidden|navigation|keyboard|screenLayout|uiMode|screenSize|smallestScreenSize" | |||
|   	android:hardwareAccelerated="true" | |||
|   	android:theme="@android:style/Theme.Translucent" > | |||
|   </activity> | |||
|   <!-- Mopub activity --> | |||
|   <activity android:name="com.mopub.mobileads.MoPubActivity" android:configChanges="keyboardHidden|orientation|screenSize"/> | |||
|   <activity android:name="com.mopub.mobileads.MraidActivity" android:configChanges="keyboardHidden|orientation|screenSize"/> | |||
|   <activity android:name="com.mopub.common.MoPubBrowser" android:configChanges="keyboardHidden|orientation|screenSize"/> | |||
|   <activity android:name="com.mopub.mobileads.RewardedMraidActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> | |||
|   <activity android:name="com.mopub.mobileads.MraidVideoPlayerActivity" android:configChanges="keyboardHidden|orientation|screenSize"/> | |||
|   <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> | |||
|   <!-- Mopub meta-data  --> | |||
|   <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> | |||
| <br> | |||
| <big><u>Step 3: 將code整合至專案中</u></big><br> | |||
| Banner: 依下列方式實作Mopub所提供的CustomEventBanner<br> | |||
|   package com.taiwanmobile.pt.adp.mediation; | |||
|   import android.app.Activity; | |||
|   import android.content.Context; | |||
|   import android.util.Log; | |||
|   import com.mopub.common.util.Views; | |||
|   import com.mopub.mobileads.CustomEventBanner; | |||
|   import com.mopub.mobileads.MoPubErrorCode; | |||
|   import com.taiwanmobile.pt.adp.view.TWMAd; | |||
|   import com.taiwanmobile.pt.adp.view.TWMAdRequest; | |||
|   import com.taiwanmobile.pt.adp.view.TWMAdSize; | |||
|   import com.taiwanmobile.pt.adp.view.TWMAdView; | |||
|   import com.taiwanmobile.pt.adp.view.TWMAdViewListener; | |||
|   import java.util.Map; | |||
|   // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.mediation.TAMediaMopubBanner 填入後台的Custom Event Class欄位 | |||
|   public class TAMediaMopubBanner extends CustomEventBanner { | |||
|       private static final String TAG = "TAMediaMopubBanner"; | |||
|       private TWMAdView adView = null; | |||
|       @Override | |||
|       protected void loadBanner(Context context, final CustomEventBannerListener customEventBannerListener, Map<String, Object> localExtras, Map<String, String> serverExtras) { | |||
|           Log.d(TAG, "loadBanner(" + serverExtras.get("adUnitId") + ") invoked!!"); | |||
|           String adUnitId = serverExtras.get("adUnitId"); | |||
|           adView = new TWMAdView( (Activity)context, TWMAdSize.SMART_BANNER, adUnitId ); | |||
|           adView.setAdListener(new TWMAdViewListener(){ | |||
|               @Override | |||
|               public void onReceiveAd(TWMAd ad) { | |||
|                   customEventBannerListener.onBannerLoaded(adView); | |||
|               } | |||
|               @Override | |||
|               public void onFailedToReceiveAd(TWMAd ad, TWMAdRequest.ErrorCode errorCode) { | |||
|                   customEventBannerListener.onBannerFailed(MoPubErrorCode.NETWORK_NO_FILL); | |||
|               } | |||
|               @Override | |||
|               public void onPresentScreen(TWMAd ad) { | |||
|                   customEventBannerListener.onBannerClicked(); | |||
|               } | |||
|               @Override | |||
|               public void onDismissScreen(TWMAd ad) {} | |||
|               @Override | |||
|               public void onLeaveApplication(TWMAd ad) { | |||
|                   customEventBannerListener.onLeaveApplication(); | |||
|               } | |||
|           }); | |||
|           adView.loadAd(new TWMAdRequest()); | |||
|       } | |||
|       @Override | |||
|       protected void onInvalidate() { | |||
|           // Called when MoPubView is being invalidated or destroyed | |||
|           Log.e(TAG, "onInvalidate invoke !!"); | |||
|           Views.removeFromParent(adView); | |||
|           if (adView != null) { | |||
|               adView.destroy(); | |||
|           } | |||
|       } | |||
|   } | |||
| <br> | |||
| Interstitial: 依下列方式實作Mopub所提供的CustomEventInterstitial<br> | |||
|   package com.taiwanmobile.pt.adp.mediation; | |||
|   import android.app.Activity; | |||
|   import android.content.Context; | |||
|   import android.util.Log; | |||
|   import com.mopub.mobileads.CustomEventInterstitial; | |||
|   import com.mopub.mobileads.MoPubErrorCode; | |||
|   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.TWMInterstitialAd; | |||
|   import java.util.Map; | |||
|   // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.mediation.TAMediaMopubInterstitial 填入後台的Custom Event Class欄位 | |||
|   public class TAMediaMopubInterstitial extends CustomEventInterstitial { | |||
|       private static final String TAG = "TAMediaInterstitial"; | |||
|       private TWMInterstitialAd interstitialAd  = null; | |||
|       private CustomEventInterstitialListener mInterstitialListener; | |||
|       @Override | |||
|       protected void loadInterstitial(final Context context, | |||
|                                       final CustomEventInterstitialListener customEventInterstitialListener, | |||
|                                       final Map<String, Object> localExtras, | |||
|                                       final Map<String, String> serverExtras) { | |||
|           Log.d(TAG, "loadInterstitial(" + serverExtras.get("adUnitId") + ") invoked!!"); | |||
|           mInterstitialListener = customEventInterstitialListener; | |||
|           String adUnitId = serverExtras.get("adUnitId"); | |||
|           interstitialAd = new TWMInterstitialAd( (Activity)context, adUnitId ); | |||
|           interstitialAd.setAdListener(new TWMAdViewListener(){ | |||
|               @Override | |||
|               public void onReceiveAd(TWMAd ad) { | |||
|                   mInterstitialListener.onInterstitialLoaded(); | |||
|               } | |||
|               @Override | |||
|               public void onFailedToReceiveAd(TWMAd ad, TWMAdRequest.ErrorCode errorCode) { | |||
|                   mInterstitialListener.onInterstitialFailed(MoPubErrorCode.NETWORK_NO_FILL); | |||
|               } | |||
|               @Override | |||
|               public void onPresentScreen(TWMAd ad) { | |||
|                   mInterstitialListener.onInterstitialClicked(); | |||
|               } | |||
|               @Override | |||
|               public void onDismissScreen(TWMAd ad) { | |||
|                   mInterstitialListener.onInterstitialDismissed(); | |||
|               } | |||
|               @Override | |||
|               public void onLeaveApplication(TWMAd ad) { | |||
|                   mInterstitialListener.onLeaveApplication(); | |||
|               } | |||
|           }); | |||
|           interstitialAd.loadAd(new TWMAdRequest()); | |||
|       } | |||
|       @Override | |||
|       protected void showInterstitial() { | |||
|           // Called when MoPubInterstitial Object called show() | |||
|           if (interstitialAd != null) { | |||
|               interstitialAd.show(); | |||
|               mInterstitialListener.onInterstitialShown(); | |||
|           } | |||
|       } | |||
|       @Override | |||
|       protected void onInvalidate() { | |||
|           // Called when MoPubInterstitial is being invalidated or destroyed. | |||
|       } | |||
|   } | |||
| <br> | |||
| Native: 依下列方式實作Mopub所提供的CustomEventNative<br> | |||
|   package com.taiwanmobile.pt.adp.mediation; | |||
|   import android.app.Activity; | |||
|   import android.content.Context; | |||
|   import android.util.Log; | |||
|   import android.view.View; | |||
|   import com.mopub.nativeads.CustomEventNative; | |||
|   import com.mopub.nativeads.NativeErrorCode; | |||
|   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.JSONException; | |||
|   import org.json.JSONObject; | |||
|   import java.util.Map; | |||
|   // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.mediation.TAMediaMopubNative 填入後台的Custom Event Class欄位 | |||
|   public class TAMediaMopubNative extends CustomEventNative { | |||
|       private static final String TAG = "TAMediaMopubNative"; | |||
|       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"); | |||
|           nativeAd = new TWMNativeAd((Activity) context, adUnitId); | |||
|           final TWMediaStaticNativeAd staticNativeAd = new TWMediaStaticNativeAd(nativeAd, customEventNativeListener); | |||
|           nativeAd.setAdListener(staticNativeAd); | |||
|           nativeAd.loadAd(new TWMAdRequest()); | |||
|       } | |||
|       static class TWMediaStaticNativeAd extends com.mopub.nativeads.StaticNativeAd implements TWMAdViewListener { | |||
|           private final CustomEventNativeListener mCustomEventNativeListener; | |||
|           private final TWMNativeAd nativeAd; | |||
|           // Native ad assets. | |||
|           private String longSubject; | |||
|           private String body; | |||
|           private String iconUrl; | |||
|           private String imageUrl; | |||
|           private String targetUrl; | |||
|           public TWMediaStaticNativeAd(final TWMNativeAd nativeAD, final CustomEventNativeListener customEventNativeListener) { | |||
|               mCustomEventNativeListener = customEventNativeListener; | |||
|               nativeAd = nativeAD; | |||
|           } | |||
|           @Override | |||
|           public void destroy() { | |||
|               nativeAd.destroy(); | |||
|               super.destroy(); | |||
|           } | |||
|           @Override | |||
|           public void prepare(View view) { | |||
|               super.prepare(view); | |||
|               view.setOnClickListener(new View.OnClickListener() { | |||
|                   @Override | |||
|                   public void onClick(View v) { | |||
|                       notifyAdClicked(); | |||
|                       nativeAd.handleClick(); | |||
|                   } | |||
|               }); | |||
|               notifyAdImpressed(); | |||
|           } | |||
|           // TWMAdViewListener | |||
|           @Override | |||
|           public void onReceiveAd(TWMAd twmAd) { | |||
|               if (nativeAd.isReady()) { | |||
|                   JSONObject content = nativeAd.getNativeAdContent(); | |||
|                   try { | |||
|                       longSubject = (content.has("LONGSUBJECT")) ? content.getString("LONGSUBJECT") : null; | |||
|                       body = (content.has("BODY")) ? content.getString("BODY") : null; | |||
|                       iconUrl = (content.has("ICONSQUARE")) ? content.getString("ICONSQUARE") : null; | |||
|                       imageUrl = (content.has("IMAGE1200X627")) ? content.getString("IMAGE1200X627") : null; | |||
|                       targetUrl = (content.has("nurl")) ? content.getString("nurl") : null; | |||
|                       if(longSubject != null) setTitle(longSubject); | |||
|                       if(body != null) setText(body); | |||
|                       if(imageUrl != null) setMainImageUrl(imageUrl); | |||
|                       if(iconUrl != null) setIconImageUrl(iconUrl); | |||
|                       if(targetUrl != null) setClickDestinationUrl(targetUrl); | |||
|                       mCustomEventNativeListener.onNativeAdLoaded(this); | |||
|                   } catch (JSONException e) { | |||
|                       Log.e(TAG, "Native Content Parse Error: " + e.getMessage()); | |||
|                       mCustomEventNativeListener.onNativeAdFailed(NativeErrorCode.INVALID_RESPONSE); | |||
|                   } | |||
|               } | |||
|           } | |||
|           @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) {} | |||
|       } | |||
|   } | |||
| <br> | |||
| 加入上述Code後,即完成Mopub整合,開發者可透過Mopub取得TAMedia的廣告。<br> | |||
| <br> | |||
| 取得廣告的方式請見Tutorial Project。 | |||
於 2017年5月17日 (三) 09:24 的修訂
Mopub網站: https://app.mopub.com, 登入可對後台進行設定。
註: 請將擋廣告的插件關閉(如Adblock),否則後台瀏覽、設定會有問題
Mopub後台設定
Step 1: 新增APP與版位,取得Mopub版位ID
進入Apps分頁後,點擊Add a New App

輸入APP資訊,如APP Name、Package Name…等

新增版位並進行設定
- a. Format為橫幅廣告Banner (320x50):
- b. Format為插頁式廣告Fullscreen (320x480):
- c. Format為原生廣告Native (Custom Layout):
完成設定後,點選Save and View Code Integration,並記下Mopub的版位ID


若欲新增其他版位,請點選剛剛新增的APP並點選Add an Ad Unit


Step 2: 新增廣告聯播網
進入Network分頁,並點選Add a Network

設定Network Title(名字可任意取),並設定實作的類別名稱與參數,以下以Banner作為範例:

依欄位填入
- Custom Event Class: 用於實作com.mopub.mobileads.CustomEventBanner的類別名稱,必須輸入完整的package name,如com.taiwanmobile.pt.adp.mediation.TAMediaMopubBanner
- Custom Event Class Data: 請依指定格式輸入您的版位ID (可向您的TAMedia窗口詢問),格式為 {"adUnitId":"<版位ID>"}
Mopub程式整合
Step 1: Download TAMedia & Mopub SDK
- a. 請參照 Mopub Github 所提供的方式,將Mopub SDK加到您的專案中。
- b.  Download TAMedia SDK
Step 2: 在AndroidManifest.xml加入所需的權限與Activity
<!-- Mopub & TAMedia Permission --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- optional --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- optional -->
<!-- TAMedia Permission --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- SDK4.0以上版本請移除 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <!-- optional --> <uses-permission android:name="android.permission.CAMERA"/> <!-- optional, SDK4.0上請加入, 以獲得更豐富的廣告內容 --> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <!-- optional, SDK4.0上請加入, 以獲得更豐富的廣告內容 -->
<!-- Mopub Permission --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- TAMedia Activities --> <activity android:name="com.taiwanmobile.pt.adp.view.TWMAdActivity" android:configChanges="orientation|keyboardHidden|navigation|keyboard|screenLayout|uiMode|screenSize|smallestScreenSize" android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent" > </activity> <!-- Mopub activity --> <activity android:name="com.mopub.mobileads.MoPubActivity" android:configChanges="keyboardHidden|orientation|screenSize"/> <activity android:name="com.mopub.mobileads.MraidActivity" android:configChanges="keyboardHidden|orientation|screenSize"/> <activity android:name="com.mopub.common.MoPubBrowser" android:configChanges="keyboardHidden|orientation|screenSize"/> <activity android:name="com.mopub.mobileads.RewardedMraidActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> <activity android:name="com.mopub.mobileads.MraidVideoPlayerActivity" android:configChanges="keyboardHidden|orientation|screenSize"/> <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
<!-- Mopub meta-data --> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
Step 3: 將code整合至專案中
Banner: 依下列方式實作Mopub所提供的CustomEventBanner
 package com.taiwanmobile.pt.adp.mediation;
 
 import android.app.Activity;
 import android.content.Context;
 import android.util.Log;
 
 import com.mopub.common.util.Views;
 import com.mopub.mobileads.CustomEventBanner;
 import com.mopub.mobileads.MoPubErrorCode;
 import com.taiwanmobile.pt.adp.view.TWMAd;
 import com.taiwanmobile.pt.adp.view.TWMAdRequest;
 import com.taiwanmobile.pt.adp.view.TWMAdSize;
 import com.taiwanmobile.pt.adp.view.TWMAdView;
 import com.taiwanmobile.pt.adp.view.TWMAdViewListener;
 
 import java.util.Map;
 
 // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.mediation.TAMediaMopubBanner 填入後台的Custom Event Class欄位
 public class TAMediaMopubBanner extends CustomEventBanner {
     private static final String TAG = "TAMediaMopubBanner";
 
     private TWMAdView adView = null;
 
     @Override
     protected void loadBanner(Context context, final CustomEventBannerListener customEventBannerListener, Map<String, Object> localExtras, Map<String, String> serverExtras) {
         Log.d(TAG, "loadBanner(" + serverExtras.get("adUnitId") + ") invoked!!");
 
         String adUnitId = serverExtras.get("adUnitId");
         adView = new TWMAdView( (Activity)context, TWMAdSize.SMART_BANNER, adUnitId );
         adView.setAdListener(new TWMAdViewListener(){
             @Override
             public void onReceiveAd(TWMAd ad) {
                 customEventBannerListener.onBannerLoaded(adView);
             }
 
             @Override
             public void onFailedToReceiveAd(TWMAd ad, TWMAdRequest.ErrorCode errorCode) {
                 customEventBannerListener.onBannerFailed(MoPubErrorCode.NETWORK_NO_FILL);
             }
 
             @Override
             public void onPresentScreen(TWMAd ad) {
                 customEventBannerListener.onBannerClicked();
             }
 
             @Override
             public void onDismissScreen(TWMAd ad) {}
 
             @Override
             public void onLeaveApplication(TWMAd ad) {
                 customEventBannerListener.onLeaveApplication();
             }
 
         });
         adView.loadAd(new TWMAdRequest());
 
     }
 
     @Override
     protected void onInvalidate() {
         // Called when MoPubView is being invalidated or destroyed
         Log.e(TAG, "onInvalidate invoke !!");
         Views.removeFromParent(adView);
         if (adView != null) {
             adView.destroy();
         }
     }
 }
Interstitial: 依下列方式實作Mopub所提供的CustomEventInterstitial
 package com.taiwanmobile.pt.adp.mediation;
 
 import android.app.Activity;
 import android.content.Context;
 import android.util.Log;
 
 import com.mopub.mobileads.CustomEventInterstitial;
 import com.mopub.mobileads.MoPubErrorCode;
 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.TWMInterstitialAd;
 
 import java.util.Map;
 
 // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.mediation.TAMediaMopubInterstitial 填入後台的Custom Event Class欄位
 public class TAMediaMopubInterstitial extends CustomEventInterstitial {
     private static final String TAG = "TAMediaInterstitial";
 
     private TWMInterstitialAd interstitialAd  = null;
     private CustomEventInterstitialListener mInterstitialListener;
 
     @Override
     protected void loadInterstitial(final Context context,
                                     final CustomEventInterstitialListener customEventInterstitialListener,
                                     final Map<String, Object> localExtras,
                                     final Map<String, String> serverExtras) {
         Log.d(TAG, "loadInterstitial(" + serverExtras.get("adUnitId") + ") invoked!!");
 
         mInterstitialListener = customEventInterstitialListener;
 
         String adUnitId = serverExtras.get("adUnitId");
         interstitialAd = new TWMInterstitialAd( (Activity)context, adUnitId );
         interstitialAd.setAdListener(new TWMAdViewListener(){
             @Override
             public void onReceiveAd(TWMAd ad) {
                 mInterstitialListener.onInterstitialLoaded();
             }
 
             @Override
             public void onFailedToReceiveAd(TWMAd ad, TWMAdRequest.ErrorCode errorCode) {
                 mInterstitialListener.onInterstitialFailed(MoPubErrorCode.NETWORK_NO_FILL);
             }
 
             @Override
             public void onPresentScreen(TWMAd ad) {
                 mInterstitialListener.onInterstitialClicked();
             }
 
             @Override
             public void onDismissScreen(TWMAd ad) {
                 mInterstitialListener.onInterstitialDismissed();
             }
 
             @Override
             public void onLeaveApplication(TWMAd ad) {
                 mInterstitialListener.onLeaveApplication();
             }
 
         });
         interstitialAd.loadAd(new TWMAdRequest());
 
     }
 
     @Override
     protected void showInterstitial() {
         // Called when MoPubInterstitial Object called show()
         if (interstitialAd != null) {
             interstitialAd.show();
             mInterstitialListener.onInterstitialShown();
         }
     }
 
     @Override
     protected void onInvalidate() {
         // Called when MoPubInterstitial is being invalidated or destroyed.
     }
 
 }
Native: 依下列方式實作Mopub所提供的CustomEventNative
 package com.taiwanmobile.pt.adp.mediation;
 
 import android.app.Activity;
 import android.content.Context;
 import android.util.Log;
 import android.view.View;
 
 import com.mopub.nativeads.CustomEventNative;
 import com.mopub.nativeads.NativeErrorCode;
 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.JSONException;
 import org.json.JSONObject;
 
 import java.util.Map;
 
 // 需將本class的完整類別名稱 com.taiwanmobile.pt.adp.mediation.TAMediaMopubNative 填入後台的Custom Event Class欄位
 public class TAMediaMopubNative extends CustomEventNative {
     private static final String TAG = "TAMediaMopubNative";
 
     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");
         nativeAd = new TWMNativeAd((Activity) context, adUnitId);
         final TWMediaStaticNativeAd staticNativeAd = new TWMediaStaticNativeAd(nativeAd, customEventNativeListener);
         nativeAd.setAdListener(staticNativeAd);
         nativeAd.loadAd(new TWMAdRequest());
     }
 
     static class TWMediaStaticNativeAd extends com.mopub.nativeads.StaticNativeAd implements TWMAdViewListener {
 
         private final CustomEventNativeListener mCustomEventNativeListener;
         private final TWMNativeAd nativeAd;
 
         // Native ad assets.
         private String longSubject;
         private String body;
         private String iconUrl;
         private String imageUrl;
         private String targetUrl;
 
         public TWMediaStaticNativeAd(final TWMNativeAd nativeAD, final CustomEventNativeListener customEventNativeListener) {
             mCustomEventNativeListener = customEventNativeListener;
             nativeAd = nativeAD;
         }
 
         @Override
         public void destroy() {
             nativeAd.destroy();
             super.destroy();
         }
         @Override
         public void prepare(View view) {
             super.prepare(view);
 
             view.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                     notifyAdClicked();
                     nativeAd.handleClick();
                 }
             });
             notifyAdImpressed();
         }
 
         // TWMAdViewListener
         @Override
         public void onReceiveAd(TWMAd twmAd) {
             if (nativeAd.isReady()) {
                 JSONObject content = nativeAd.getNativeAdContent();
                 try {
                     longSubject = (content.has("LONGSUBJECT")) ? content.getString("LONGSUBJECT") : null;
                     body = (content.has("BODY")) ? content.getString("BODY") : null;
                     iconUrl = (content.has("ICONSQUARE")) ? content.getString("ICONSQUARE") : null;
                     imageUrl = (content.has("IMAGE1200X627")) ? content.getString("IMAGE1200X627") : null;
                     targetUrl = (content.has("nurl")) ? content.getString("nurl") : null;
                     if(longSubject != null) setTitle(longSubject);
                     if(body != null) setText(body);
                     if(imageUrl != null) setMainImageUrl(imageUrl);
                     if(iconUrl != null) setIconImageUrl(iconUrl);
                     if(targetUrl != null) setClickDestinationUrl(targetUrl);
 
                     mCustomEventNativeListener.onNativeAdLoaded(this);
                 } catch (JSONException e) {
                     Log.e(TAG, "Native Content Parse Error: " + e.getMessage());
                     mCustomEventNativeListener.onNativeAdFailed(NativeErrorCode.INVALID_RESPONSE);
                 }
             }
         }
         @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) {}
     }
 
 }
加入上述Code後,即完成Mopub整合,開發者可透過Mopub取得TAMedia的廣告。
取得廣告的方式請見Tutorial Project。






