「Android Native Ads SDK8」修訂間的差異

出自TAMedia
跳至導覽 跳至搜尋
imported>Wikiuser
(新頁面: 回Android首頁<br> = SDK8 版本更新說明 = 原生廣告改用 UIView 的方式呈現,因此可自由設計排版,該 UIView 必須為 TADN...)
 
imported>Wikiuser
行 1: 行 1:
[[Android SDK Developer Guide v2|回Android首頁]]<br>
:您也可以將TWMAdView宣告於佈局XML中,在Kotlin程式內透過findViewById取得TWMAdView
<androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <!-- 廣告 -->
                <com.taiwanmobile.pt.adp.view.TWMNativeAdView
                    android:id="@+id/nativeAdView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    >
                    <LinearLayout
                        android:id="@+id/container"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:minHeight="50dp"
                        android:orientation="vertical"
                        android:paddingLeft="20dp"
                        android:paddingRight="20dp">     
                        <ImageView
                            android:id="@+id/iv_icon_square"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="10dp"
                            android:contentDescription="@string/test" />
                        <ImageView
                            android:id="@+id/iv_icon_rect"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:contentDescription="@string/test"
                            android:layout_marginTop="10dp" />
                        <TextView
                            android:id="@+id/tv_short_subject"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="10dp" />
                        <TextView
                            android:id="@+id/tv_long_subject"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="10dp"
                            tools:text="long subject" />
                        <TextView
                            android:id="@+id/tv_body"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="10dp"
                            tools:text="body" />
                        <com.taiwanmobile.pt.adp.nativead.TWMMediaView
                            android:id="@+id/ad_media"
                            android:layout_width="300dp"
                            android:layout_height="200dp"
                            android:layout_marginTop="10dp" />
                        <TextView
                            android:id="@+id/tv_call_to_action"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:padding="5dp"
                            android:textSize="20sp"
                            android:textColor="@color/cardview_light_background"
                            />
                    </LinearLayout>
                </com.taiwanmobile.pt.adp.view.TWMNativeAdView>
            </androidx.constraintlayout.widget.ConstraintLayout>


= SDK8 版本更新說明 =
原生廣告改用 UIView 的方式呈現,因此可自由設計排版,該 UIView 必須為 TADNativeAdView,內部的元件不一定要全部加入。<br>
例如:可以只加入 longSubjectLabel,而不加入 shortSubjectLabel。<br>


= 原生廣告說明 =
:*宣告原生性廣告版位
通常您會在 TADNativeAdView 裡面加入 TADNativeMediaView,用以顯示大圖或影片。<br>
TWMNativeAd以簡單且單純的方式, 提供廣告內容供開發商使用,可在收到onReceivedAd()呼叫nativeAdContent()取得原生廣告內容, 並解析


*顯示圖片或影片邏輯:
<source lang="java" collapse="false" title="Native Ad">
:-如果原生廣告內容包含影音和圖片,SDK 將使用影音來展示廣告。<br>
  // 第一個參數為Activity or Context, 第二個參數請輸入您的版位ID
:-而 [https://iportal.mybook.taiwanmobile.com/TAmedia/ios/downloadPage/8.0.0/docs/Classes/TADNativeAdOptions.html#/c:@M@TAMediaAdsFramework@objc(cs)TADNativeAdOptions(py)mediaPreferImage TADAdOptions.mediaPreferImage] 設置為 true時,則 SDK 將始終使用圖片來展示廣告。<br>
  var twmNativeAd: TWMNativeAd  = TWMNativeAd(this, AD_UNIT_ID);
:-可從 [https://iportal.mybook.taiwanmobile.com/TAmedia/ios/downloadPage/8.0.0/docs/Classes/TADNativeAdMediaContent.html#/c:@M@TAMediaAdsFramework@objc(cs)TADNativeAdMediaContent(py)isVideoContent TADNativeAdMediaContent.isVideoContent] 得知顯示影片或圖片。<br>
  twmNativeAd.setAdListener(object : TWMAdViewListener {
    override fun onReceiveAd(paramTWMAd: TWMAd) {
        // 表示本次請求收到廣告,
        // 呼叫getNativeAdContent()取得廣告內容
        val adContent: JSONObject = twmNativeAd.getNativeAdContent()
    }


*TADNativeMediaView 在螢幕的可視範圍自動播放影片,反之則自動暫停。<br>
    override fun onFailedToReceiveAd(paramTWMAd: TWMAd?, paramErrorCode: ErrorCode?) {
*更多原生廣告客製化功能,詳見:[https://iportal.mybook.taiwanmobile.com/TAmedia/ios/downloadPage/8.0.0/docs/Classes/TADNativeAdOptions.html TADNativeAdOptions]
        // 表示本次請求發生錯誤, 並沒有廣告內容可供使用
    }


*原生廣告物件關係圖:
    override fun onPresentScreen(paramTWMAd: TWMAd) {
[[檔案: TADNativeAd Releationship.png |600px]]<br>
        // native ad 並不使用本介面功能
*UML:
    }
[[檔案: NativeAdUML.png |800px]]<br>


= 舊版本升級 SDK8 =
    override fun onDismissScreen(paramTWMAd: TWMAd) {
<b><span style="color:#ff0000">※TADNativeAd 裡的 getNativeAdContent、handleClick 已被棄用</span></b><br>
        // native ad 並不使用本介面功能
<b>說明:</b><br>
    }
*原本 <b>getNativeAdContent</b> 取得的 NSDictionary,改以 <b> adContent (TADNativeAdContent)</b> 物件存取<br>
 
*新增 <b>callToAction</b><br>
    override fun onLeaveApplication(paramTWMAd: TWMAd) {
        // native ad 並不使用本介面功能
    }
  })
// 透過TWMAdRequest載入廣告
twmNativeAd.loadAd(TWMAdRequest())
</source>
 
(Optional) 在載入廣告前,可以透過TWMAdRequest設置使用者生日,讓您的APP獲得更多元的廣告內容<br>
{| class="wikitable"
{| class="wikitable"
!
!<b>SDK8 之前</b>
!<b>SDK8</b>
!<b>說明</b>
|-
|<b>來源</b>
|getNativeAdContent
|adContent
|
|-
|<b>格式</b>
|NSDictionary
|TADNativeAdContent
|
|-
|rowspan="11"|<b>內部參數</b>
|LONGSUBJECT
|longSubject
|長標題 long subject  ,※預設值為空字串
|-
|SHORTSUBJECT
|shortSubject
|短標題  short subject ,※預設值為空字串
|-
|BODY
|body
|內文 body ,※預設值為空字串
|-
|ICONSQUARE
|iconSquare
|小圖示 方 icon square ,※預設值為空字串
|-
|ICONRECTANGLE
|iconRect
|小圖示 長 icon rectangle,※預設值為空字串
|-
|VIDEO
|mediaContent.videoUrl
|影片 video,※預設值為空字串
|-
|IMAGE960X640
|mediaContent.image960x640
|大圖 960x640,※預設值為空字串
|-
|IMAGE1200X627
|mediaContent.image1200x627
|大圖 1200x627,※預設值為空字串
|-
|IMAGE1280X720
|N/A
|大圖 1280x720,※預設值為空字串
|-
|nurl
|N/A
|廣告檔次Target URL, 當廣告發生點擊時回報的url
|-
|-
|N/A
! 使用Date !! 使用Calendar
|callToAction
|外開廣告網頁的文字, ※預設值為空字串
|-
|-
| style="width:60%; padding:1%;"|
  val adRequest = TWMAdRequest()
  try {
  <b>//定義好時間字串的格式</b>
  val sdf = SimpleDateFormat("yyyy/MM/dd", Locale.getDefault())
  <b>//將字串轉成Date型</b>
  val birthDate: Date = sdf.parse("1992/01/01")
  <b>// 將生日加入request</b>
  request.setBirthday(birthDate)
  }catch (e: Exception) {}
 
  <b>// 透過TWMAdRequest載入廣告</b>
  twmNativeAd.loadAd(request)
| style="width:40%; padding: 1%;"|
  <b>// 創建Calerdar並設定生日 (注意! 月份的編號是由0至11)</b>
  val birthDate = Calendar.getInstance()
  <b>// 設定生日為1992/01/01</b>
  birthDate[1992, 0] = 1
 
  <b>// 將生日加入request</b>
  val request = TWMAdRequest()
  request.setBirthday(birthDate)
 
  <b>// 透過TWMAdRequest載入廣告</b>
  twmNativeAd.loadAd(request)
|}
|}
*<b>handleClick</b> 不需實作,改由 TADNativeAdView 內處理廣告點擊事件<br>


= SDK8串接 =
onReceiveAd(載入廣告完成)後,透過nativeAdContent取得的內容如下 :
請依照  開始使用Getting Started 章節進行SDK 的安裝<br>
<source>
並以下述描述串接 原生廣告 SDK 到 APP<br><br>
/*
  "LONGSUBJECT": "長標題 long subject ,※預設值為空字串",
  "SHORTSUBJECT": "短標題 short subject ,※預設值為空字串",
  "BODY": "內文 body ,※預設值為空字串",
  "ICONSQUARE": "小圖示 方 icon square ,※預設值為空字串",
  "ICONRECTANGLE": "小圖示 長 icon rectangle,※預設值為空字串",
  "VIDEO": "影片 mediaContent,※預設值為空字串",
  "IMAGE960X640": "大圖 960x640,※預設值為空字串",
  "IMAGE1200X627": "大圖 1200x627,※預設值為空字串" 
*/


== 設計廣告排版 ==
private var twmNativeAd: TWMNativeAd? = null
可以依照想要的樣子,設計原生廣告的排版<br>
此處以 xib 為例 (也可以用程式碼的方式產生 View)<br>
<br>
新增一個含有 View 的 xib 檔,並取名為 TestNativeAdView<br>
[[檔案: TestNativeAdView CreateFile.png |450px]]<br><br><br>


將內部 UIView 的 custom class 指定為 TADNativeAdView<br>
override fun onReceiveAd(ad: TWMAd) {
[[檔案: TestNativeAdView class.png |600px]]<br><br><br>
加入要顯示的 UILabel,UIImageView<br>
<b>Media View 為 custom class TADNativeMediaView 的 UIView</b><br>
[[檔案: TestNativeAdView TADNativeMediaView.png |600px]]<br><br><br>
連結 outlet<br>
[[檔案: TestNativeAdView outlet.png |600px]]<br>


== 新增頁面並導入 SDK ==
        val nAd: TWMNativeAdContent? = twmNativeAd?.nativeAdContent
新增一個 swift 檔案,檔案名稱為 NativeAdViewController.swift<br>
import TAMediaAdsFramework,並繼承 UIViewController


== 建立廣告物件 ==
        nAd?.longSubject.let { longSubject ->
新增 resultLabel 的 IBOutlet,與 xib 連結,用來顯示請求廣告的結果訊息(非必要)<br>
            mTextViewLongTitle?.text = longSubject
新增 TADNativeAd,TADNativeAdView 變數
            mNativeView?.setLongSubjectView(mTextViewLongTitle)
        }


    import UIKit
        nAd?.shortSubject.let { ShortSubject ->
    import TAMediaAdsFramework
            mTextViewShortTitle?.text = ShortSubject
   
            mNativeView?.setLongSubjectView(mTextViewShortTitle)
    class NativeAdViewController: UIViewController {
         }
        @IBOutlet weak var resultLabel: UILabel!
        var nativeAd: TADNativeAd?
         var nativeAdView: TADNativeAdView?
    }


== 請求廣告 ==
        nAd?.body.let { body ->
實作 RequestAd,並完成 requestAd、clearAd<br>
            mTextViewContent?.text = body
在 '''YOUR_AD_UNIT_ID''' 填入您的廣告 ID
            mNativeView?.setBodyView(mTextViewContent)
        }


    class NativeAdViewController: UIViewController {
         nAd?.iconSquare?.getDrawable().let{ squareDrawable ->
         ....
             mImageView120x120?.setImageDrawable(squareDrawable)
       
             mNativeView?.setSquareIconView(mImageView120x120)
        override func viewDidLoad() {
             super.viewDidLoad()
             requestAd()
         }
         }
       
 
         private func requestAd() {
         nAd?.iconRect?.getDrawable().let{ rectDrawable ->
             clearAd()
             mImageView96x64?.setImageDrawable(rectDrawable)
            self.resultLabel.text = "Loading..."
             mNativeView?.setRectangleIconView(mImageView96x64)
           
            let request = TADRequest()
            nativeAd = TADNativeAd(adUnitId: "YOUR_AD_UNIT_ID")
             nativeAd?.delegate = self
            nativeAd?.load(request)
         }
         }
       
        private func clearAd() {
            if nativeAd != nil {
                nativeAd?.delegate = nil
                nativeAd = nil
            }
        }
    }
== 接收廣告事件 ==
實作 TADNativeAdDelegate,可以在收到原生廣告事件後,做相對應的處理


<source>
         nAd?.callToAction.let{ mCTA ->
    extension NativeAdViewController: TADNativeAdDelegate {
             mTextViewCTA?.text = mCTA
         // 廣告取得成功
             mNativeView?.setCallToActionView(mTextViewCTA)
        func nativeAdDidReceive(_ ad: TADNativeAd!) {
            self.resultLabel.text = "Received AD"
            setupNativeAdView(ad: ad)
        }
       
        // 廣告取得失敗
        func nativeAd(_ ad: TADNativeAd!, didFailToReceiveAdWithError error: TADRequestError!) {
             self.resultLabel.text = "Error:\(error.localizedDescription)"
        }
       
        // 廣告已有效曝光
        func nativeAdDidImpression(_ ad: TADNativeAd!) {
             print("nativeAdDidImpression")
        }
       
        // 點擊廣告
        func nativeAdDidClick(_ ad: TADNativeAd!) {
            print("nativeAdDidClick")
        }
       
        // 應用程式即將進入背景執行或中止運作前被呼叫
        func nativeAdWillLeaveApplication(_ ad: TADNativeAd!) {
            print("nativeAdWillLeaveApplication")
         }
         }
    }
</source>
== 顯示廣告 ==
在 NativeAdViewController 加入 func setupNativeAdView(ad: TADNativeAd)<br>
以將廣告內容顯示在畫面上


<source>
         nAd?.mediaContent?.let{ content ->
    class NativeAdViewController: UIViewController {
            when(mAdMediaPreferImageSizeBig) {
         ....
                true ->  {content.setMainImageSize(TWMMediaContent.ImageSize.BIG)}
       
                false -> {content.setMainImageSize(TWMMediaContent.ImageSize.SMALL)}
        private func setupNativeAdView(ad: TADNativeAd) {
            // 如果是用 addSubview 的方式加入 nativeAdView, 則先移除掉之前加的 view
            nativeAdView?.removeFromSuperview()
            // 使用 loadNib 引入 TADNativeAdView, 並從裡面取得 TADNativeMediaView
            guard let adView: TADNativeAdView = Bundle.main.loadNibNamed("TestNativeAdView", owner: nil, options: nil)?.first as? TADNativeAdView, let mediaView = adView.mediaView else {
                return
             }
             }
             // 從原生廣告物件取得文字, 填入畫面裡的 UILabel
             mVideo?.setMediaContent(content)
            adView.longSubjectLabel?.text = ad.adContent.longSubject
             mNativeView?.setMediaView(mVideo)
            adView.shortSubjectLabel?.text = ad.adContent.shortSubject
            adView.bodyLabel?.text = ad.adContent.body
            // 從原生廣告物件取得圖片, 填入畫面裡的 UIImageView
            adView.squareImgeView?.image = ad.adContent.iconSquare?.image
            adView.rectangleImgeView?.image = ad.adContent.iconSquare?.image
            // 從原生廣告物件取得外開廣告網頁的文字, 填入畫面裡的 UIView (可以為 UILabel/UIButton等..)
             (adView.callToActionView as? UILabel)?.text = ad.adContent.callToAction
            // 使用 UIImage 設定 media view 裡的 main image
            mediaView.setMainImage(image: ad.adContent.mediaContent?.image1200x627?.image)
           
            // 設定 main image 的圖片顯示方式
            mediaView.setMainImage(contentMode: .scaleAspectFit)
            // 從原生廣告物件取得 media content, 填入 media view, 由 media content 內部決定該顯示圖片或影音廣告
            mediaView.mediaContent = ad.adContent.mediaContent
            adView.nativeAd = ad
           
            // 將原生廣告加到畫面上
            adView.center = CGPoint(x: self.view.center.x, y: self.view.center.y)
            nativeAdView = adView
            self.view.addSubview(adView)
         }
         }
        mNativeView?.setNativeAd(twmNativeAd)
     }
     }
</source>
</source>


= 客製化選項(可選) =


== TADRequest ==
設置請求廣告的可選控制項,參考[https://iportal.mybook.taiwanmobile.com/TAmedia/ios/downloadPage/8.0.0/docs/Classes/TADRequest.html#/c:objc(cs)TADRequest(py)testDevices TADRequest]<br>
<b>範例:</b><br>
    class NativeAdViewController: UIViewController {
        ....
       
        private func requestAd() {
            ....
            let request = TADRequest()
            request.showLog = true
            request.gender = .unknown
            ....
        }
       
        ....
    }


== TADNativeAdOptions ==
<b><span style="color:#ff0000">(SDK5以上) 請在Activity的生命週期中加入下述的呼叫, 以正確release twmNativeAd</span></b>
用於NativeAd的可選控制項,參考[https://iportal.mybook.taiwanmobile.com/TAmedia/ios/downloadPage/8.0.0/docs/Classes/TADNativeAdOptions.html TADNativeAdOptions]<br>
  override fun onDestroy() {
<b>範例:</b><br>
        twmNativeAd?.destroy()
    class NativeAdViewController: UIViewController {
        super.onDestroy()
        ....
  }
       
 
        private func requestAd() {
            ....
            let request = TADRequest()
            let option = TADNativeAdOptions()
            option.mediaPreferImage = true
            ....   
            nativeAd?.load(request, withOption: option)
            ....
        }
       
        ....
    }


== TADVideoStatusDelegate ==
原生性廣告內容與廣告版位關係表
影片播放事件回報,如有需要收到原生影音廣告的播放事件,參考[https://iportal.mybook.taiwanmobile.com/TAmedia/ios/downloadPage/8.0.0/docs/Protocols/TADVideoStatusDelegate.html TADVideoStatusDelegate]<br>
<br>
<b>範例:</b><br>
<b><span style="color:#ff0000">※重要, 下表所描述的廣告素材有可能因廣告主未提供素材, 而以空字串提供, 使用上請特別留意</span></b>
{| width="100%" border="1"
|-
| align="center" | 素材 \  版位
| align="center" | 限制條件
| align="center" | 條列式
| align="center" | 圖片式 (橫 16:9)
| align="center" | 圖片式 (橫 3:2)
| align="center" | 小圖式
| align="center" | 影音式
|-
| align="center" | 長標題<br/>(LONGSUBJECT)
| align="center" | 25字內
| align="center" | V
| align="center" | V
| align="center" | V
| align="center" |
| align="center" | V
|-
| align="center" | 短標題<br/>(SHORTSUBJECT)
| align="center" | 10字內
| align="center" | V
| align="center" | V
| align="center" | V
| align="center" | V
| align="center" |
|-
| align="center" | 內文<br/>(BODY)
| align="center" | 70字內
| align="center" | V
| align="center" | V
| align="center" | V
| align="center" |
| align="center" | V
|-
| align="center" | 小圖 (方)<br/>(ICONSQUARE)
| align="center" | 120x120<br/>jpg/png
| align="center" | V
| align="center" |
| align="center" |
| align="center" | V
| align="center" | V
|-
| align="center" | 小圖 (長)<br/>(ICONRECTANGLE)
| align="center" | 96x64<br/>jpg/png
| align="center" | V
| align="center" |
| align="center" |
| align="center" |
| align="center" | V
|-
| align="center" | 影片<br/>(VIDEO)
| align="center" | MP4, 10mb
| align="center" |
| align="center" |
| align="center" |
| align="center" |
| align="center" | V
|-
| align="center" | 大圖 (橫 3:2)<br/>(IMAGE960X640)
| align="center" | 960x640<br/>jpg/png
| align="center" |
| align="center" |
| align="center" | V
| align="center" |
| align="center" | V
|-
| align="center" | 大圖<br/>(IMAGE1200X627)
| align="center" | 1200x627<br/>jpg/png
| align="center" | V
| align="center" | V
| align="center" | V
| align="center" | V
| align="center" | V
|}


<source>
<br><br>
    class NativeAdViewController: UIViewController {
[[Android SDK Developer Guide 2 | 回首頁]]
        ....
       
        private func setupNativeAdView(ad: TADNativeAd) {
            ....
       
            if ad.adContent.mediaContent?.isVideoContent == true {
                mediaView.statusDelegate = self
            }
            ....
        }
    }
   
    extension NativeAdViewController: TADVideoStatusDelegate {
        func didStartVideo() {
            print("didStartVideo")
        }
        ....
    }
</source>

於 2021年8月26日 (四) 11:23 的修訂

您也可以將TWMAdView宣告於佈局XML中,在Kotlin程式內透過findViewById取得TWMAdView
<androidx.constraintlayout.widget.ConstraintLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
               <com.taiwanmobile.pt.adp.view.TWMNativeAdView
                   android:id="@+id/nativeAdView"
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   app:layout_constraintTop_toTopOf="parent"
                   app:layout_constraintLeft_toLeftOf="parent"
                   >
                   <LinearLayout
                       android:id="@+id/container"
                       android:layout_width="match_parent"
                       android:layout_height="wrap_content"
                       android:layout_gravity="center"
                       android:minHeight="50dp"
                       android:orientation="vertical"
                       android:paddingLeft="20dp"
                       android:paddingRight="20dp">       
                       <ImageView
                           android:id="@+id/iv_icon_square"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginTop="10dp"
                           android:contentDescription="@string/test" />
                       <ImageView
                           android:id="@+id/iv_icon_rect"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:contentDescription="@string/test"
                           android:layout_marginTop="10dp" />
                       <TextView
                           android:id="@+id/tv_short_subject"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginTop="10dp" />
                       <TextView
                           android:id="@+id/tv_long_subject"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginTop="10dp"
                           tools:text="long subject" />
                       <TextView
                           android:id="@+id/tv_body"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:layout_marginTop="10dp"
                           tools:text="body" />
                       <com.taiwanmobile.pt.adp.nativead.TWMMediaView
                           android:id="@+id/ad_media"
                           android:layout_width="300dp"
                           android:layout_height="200dp"
                           android:layout_marginTop="10dp" />
                       <TextView
                           android:id="@+id/tv_call_to_action"
                           android:layout_width="wrap_content"
                           android:layout_height="wrap_content"
                           android:padding="5dp"
                           android:textSize="20sp"
                           android:textColor="@color/cardview_light_background"
                           />
                   </LinearLayout>
               </com.taiwanmobile.pt.adp.view.TWMNativeAdView>
           </androidx.constraintlayout.widget.ConstraintLayout>


  • 宣告原生性廣告版位

TWMNativeAd以簡單且單純的方式, 提供廣告內容供開發商使用,可在收到onReceivedAd()呼叫nativeAdContent()取得原生廣告內容, 並解析

  // 第一個參數為Activity or Context, 第二個參數請輸入您的版位ID
  var twmNativeAd: TWMNativeAd  = TWMNativeAd(this, AD_UNIT_ID);
  twmNativeAd.setAdListener(object : TWMAdViewListener {
     override fun onReceiveAd(paramTWMAd: TWMAd) {
        // 表示本次請求收到廣告,
        // 呼叫getNativeAdContent()取得廣告內容
        val adContent: JSONObject = twmNativeAd.getNativeAdContent()
     }

     override fun onFailedToReceiveAd(paramTWMAd: TWMAd?, paramErrorCode: ErrorCode?) {
        // 表示本次請求發生錯誤, 並沒有廣告內容可供使用
     }

     override fun onPresentScreen(paramTWMAd: TWMAd) {
        // native ad 並不使用本介面功能
     }

     override fun onDismissScreen(paramTWMAd: TWMAd) {
        // native ad 並不使用本介面功能
     }

     override fun onLeaveApplication(paramTWMAd: TWMAd) {
        // native ad 並不使用本介面功能
     }
  })
 // 透過TWMAdRequest載入廣告
 twmNativeAd.loadAd(TWMAdRequest())

(Optional) 在載入廣告前,可以透過TWMAdRequest設置使用者生日,讓您的APP獲得更多元的廣告內容

使用Date 使用Calendar
 val adRequest = TWMAdRequest()
 try {
 	//定義好時間字串的格式
 	val sdf = SimpleDateFormat("yyyy/MM/dd", Locale.getDefault())
 	//將字串轉成Date型
 	val birthDate: Date = sdf.parse("1992/01/01")
 	// 將生日加入request
 	request.setBirthday(birthDate)
 }catch (e: Exception) {}
 
 // 透過TWMAdRequest載入廣告
 twmNativeAd.loadAd(request)
 // 創建Calerdar並設定生日 (注意! 月份的編號是由0至11)
 val birthDate = Calendar.getInstance()
 // 設定生日為1992/01/01
 birthDate[1992, 0] = 1
 
 // 將生日加入request
 val request = TWMAdRequest()
 request.setBirthday(birthDate)
 
 // 透過TWMAdRequest載入廣告
 twmNativeAd.loadAd(request)

onReceiveAd(載入廣告完成)後,透過nativeAdContent取得的內容如下 :

/*
  "LONGSUBJECT": "長標題 long subject ,※預設值為空字串",
  "SHORTSUBJECT": "短標題 short subject ,※預設值為空字串",
  "BODY": "內文 body ,※預設值為空字串",
  "ICONSQUARE": "小圖示 方 icon square ,※預設值為空字串",
  "ICONRECTANGLE": "小圖示 長 icon rectangle,※預設值為空字串",
  "VIDEO": "影片 mediaContent,※預設值為空字串",
  "IMAGE960X640": "大圖 960x640,※預設值為空字串",
  "IMAGE1200X627": "大圖 1200x627,※預設值為空字串"  
*/

private var twmNativeAd: TWMNativeAd? = null

override fun onReceiveAd(ad: TWMAd) {

        val nAd: TWMNativeAdContent? = twmNativeAd?.nativeAdContent

        nAd?.longSubject.let { longSubject ->
            mTextViewLongTitle?.text = longSubject
            mNativeView?.setLongSubjectView(mTextViewLongTitle)
        }

        nAd?.shortSubject.let { ShortSubject ->
            mTextViewShortTitle?.text = ShortSubject
            mNativeView?.setLongSubjectView(mTextViewShortTitle)
        }

        nAd?.body.let { body ->
            mTextViewContent?.text = body
            mNativeView?.setBodyView(mTextViewContent)
        }

        nAd?.iconSquare?.getDrawable().let{ squareDrawable ->
            mImageView120x120?.setImageDrawable(squareDrawable)
            mNativeView?.setSquareIconView(mImageView120x120)
        }

        nAd?.iconRect?.getDrawable().let{ rectDrawable ->
            mImageView96x64?.setImageDrawable(rectDrawable)
            mNativeView?.setRectangleIconView(mImageView96x64)
        }

        nAd?.callToAction.let{ mCTA ->
            mTextViewCTA?.text = mCTA
            mNativeView?.setCallToActionView(mTextViewCTA)
        }

        nAd?.mediaContent?.let{ content ->
            when(mAdMediaPreferImageSizeBig) {
                true ->  {content.setMainImageSize(TWMMediaContent.ImageSize.BIG)}
                false -> {content.setMainImageSize(TWMMediaContent.ImageSize.SMALL)}
            }
            mVideo?.setMediaContent(content)
            mNativeView?.setMediaView(mVideo)
        }

        mNativeView?.setNativeAd(twmNativeAd)
    }


(SDK5以上) 請在Activity的生命週期中加入下述的呼叫, 以正確release twmNativeAd

 override fun onDestroy() {
       twmNativeAd?.destroy()
       super.onDestroy()
 }


原生性廣告內容與廣告版位關係表
※重要, 下表所描述的廣告素材有可能因廣告主未提供素材, 而以空字串提供, 使用上請特別留意

素材 \ 版位 限制條件 條列式 圖片式 (橫 16:9) 圖片式 (橫 3:2) 小圖式 影音式
長標題
(LONGSUBJECT)
25字內 V V V V
短標題
(SHORTSUBJECT)
10字內 V V V V
內文
(BODY)
70字內 V V V V
小圖 (方)
(ICONSQUARE)
120x120
jpg/png
V V V
小圖 (長)
(ICONRECTANGLE)
96x64
jpg/png
V V
影片
(VIDEO)
MP4, 10mb V
大圖 (橫 3:2)
(IMAGE960X640)
960x640
jpg/png
V V
大圖
(IMAGE1200X627)
1200x627
jpg/png
V V V V V



回首頁