看板 KnucklesNote
作者 標題 [Xcode][Swift3] 加入 MoPub 廣告中介服務
時間 2017-05-25 Thu. 02:26:59
====================================
最後沒辦法安裝成功,以下僅供參考
====================================
使用 MoPub 在 ListView 列表中加上原生廣告(Native Ads)
在 MoPub 網站新增廣告單元
在 MoPub 網站 https://www.mopub.com/
註冊一個帳號後登入
新增一個 App
新增一個 Native 的廣告單元
這邊我們設定廣告顯示位置為5 (從0開始算,也就是在第6列)
按儲存後,取得 Ad Unit ID
在 Xcode 安裝 MoPub SDK
參考 https://github.com/mopub/mopub-ios-sdk/wiki
裡的 Getting Started
使用套件管理程式 CocoaPods 來安裝
CocoaPods 的安裝方法可參考這篇
[Xcode][Swift3] 安裝套件管理工具 CocoaPods - KnucklesNote板 - Disp BBS
在 Podfile 新增這行
pod 'mopub-ios-sdk'
然後使用終端機在專案目錄執行 pod install
目前安裝的版本為 4.14.0
新增 BridgingHeader
因為 mopub 是用 Objective-C 寫的,要在 Swift 中使用的話,要加上 BridgingHeader
之前沒加過的話,點 command+n 新增檔案,選「Header File」
檔案名稱輸入「BridgingHeader」
在專案設定的「Build Settings」,選「All」,
在右邊的搜尋框輸入「bridging」,
在下面出現的 Objective-C Bridging Header 輸入「$(PROJECT_NAME)/BridgingHeader.h」
在搜尋框輸入「search path」,
在下面出現的 User Header Search Paths 右邊的值點兩下
在跳出的輸入框新增「Pods」,右邊選「recursive」
讓 Xcode 會去 Pods 目錄中尋找 Header 檔案
修改 BridgingHeader.h
在 #define ... 與 #endif 之間加上
#import "MoPubSDK/MoPub-Bridging-Header.h"
加上 MoPub Native Ads
新增一個 NativeAdView.swift 檔
將內容改為
import UIKit
class NativeAdView: UIView, MPNativeAdRendering {
var titleLabel: UILabel!
var mainTextLabel: UILabel!
var callToActionLabel: UILabel!
var iconImageView: UIImageView!
var mainImageView: UIImageView!
private var privacyInformationIconImageView: UIImageView!
override func layoutSubviews() {
super.layoutSubviews()
}
func nativeMainTextLabel() -> UILabel! {
return self.mainTextLabel
}
func nativeTitleTextLabel() -> UILabel! {
return self.titleLabel
}
func nativeCallToActionTextLabel() -> UILabel! {
return self.callToActionLabel
}
func nativeIconImageView() -> UIImageView! {
return self.iconImageView
}
func nativeMainImageView() -> UIImageView! {
return self.mainImageView
}
func nativePrivacyInformationIconImageView() -> UIImageView! {
return self.privacyInformationIconImageView
}
}
class NativeAdView: UIView, MPNativeAdRendering {
var titleLabel: UILabel!
var mainTextLabel: UILabel!
var callToActionLabel: UILabel!
var iconImageView: UIImageView!
var mainImageView: UIImageView!
private var privacyInformationIconImageView: UIImageView!
override func layoutSubviews() {
super.layoutSubviews()
}
func nativeMainTextLabel() -> UILabel! {
return self.mainTextLabel
}
func nativeTitleTextLabel() -> UILabel! {
return self.titleLabel
}
func nativeCallToActionTextLabel() -> UILabel! {
return self.callToActionLabel
}
func nativeIconImageView() -> UIImageView! {
return self.iconImageView
}
func nativeMainImageView() -> UIImageView! {
return self.mainImageView
}
func nativePrivacyInformationIconImageView() -> UIImageView! {
return self.privacyInformationIconImageView
}
}
修改要加上 NativeAds 的 TableViewController
例如 HotTextViewController.swift
在 class HotTextViewController: 後面加上 MPTableViewAdPlacerDelegate
加上成員變數
var placer: MPTableViewAdPlacer!
加上成員函數
func initAdPlacer() {
let settings: MPStaticNativeAdRendererSettings = MPStaticNativeAdRendererSettings()
settings.renderingViewClass = NativeAdView.self
settings.viewSizeHandler = { (maxWidth: CGFloat) -> CGSize in
return CGSize(width: maxWidth, height: 312.0)
}
let config: MPNativeAdRendererConfiguration = MPStaticNativeAdRenderer.rendererConfiguration(with: settings)
self.placer = MPTableViewAdPlacer(tableView: self.tableView, viewController: self, rendererConfigurations: [config])
self.placer.delegate = self
let targeting: MPNativeAdRequestTargeting = MPNativeAdRequestTargeting()
targeting.desiredAssets = Set([kAdIconImageKey, kAdCTATextKey, kAdTextKey, kAdTitleKey])
self.placer.loadAds(forAdUnitID: "your_ad_unit_id", targeting: targeting)
}
let settings: MPStaticNativeAdRendererSettings = MPStaticNativeAdRendererSettings()
settings.renderingViewClass = NativeAdView.self
settings.viewSizeHandler = { (maxWidth: CGFloat) -> CGSize in
return CGSize(width: maxWidth, height: 312.0)
}
let config: MPNativeAdRendererConfiguration = MPStaticNativeAdRenderer.rendererConfiguration(with: settings)
self.placer = MPTableViewAdPlacer(tableView: self.tableView, viewController: self, rendererConfigurations: [config])
self.placer.delegate = self
let targeting: MPNativeAdRequestTargeting = MPNativeAdRequestTargeting()
targeting.desiredAssets = Set([kAdIconImageKey, kAdCTATextKey, kAdTextKey, kAdTitleKey])
self.placer.loadAds(forAdUnitID: "your_ad_unit_id", targeting: targeting)
}
在 viewDidLoad() 裡加上
initAdPlacer()
(未完待續)
--
※ 作者: Knuckles 時間: 2017-05-25 02:26:59
※ 編輯: Knuckles 時間: 2017-09-12 02:01:18
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 324
回列表(←)
分享