Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
アドフリくんSDKをSwift4で組み込む
Search
studioshin
June 25, 2018
Programming
340
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アドフリくんSDKをSwift4で組み込む
studioshin
June 25, 2018
More Decks by studioshin
See All by studioshin
HealthKitをSwift4でいじってみた
studioshin
0
600
8年前にObjective-Cで書いたアプリをゼロからSwift3で書き直した話
studioshin
0
410
Other Decks in Programming
See All in Programming
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
130
速習iPhone Duo対応
yuukiw00w
2
840
JRuby: Past, Present, and Future
headius
0
210
アクセシビリティから考える情報設計
high_g_engineer
0
420
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
170
カツオ、ご期待ください
suneo3476
0
110
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
4.2k
iOSDCのペンライトを自動制御したい!
akkeylab
0
100
MCP Appsでつくるチャット駆動な地図アプリ
nakamori1024
0
110
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
270
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
260
すこし踏み込む CancellationToken
htkym
2
1.3k
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
440
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
290
Ethics towards AI in product and experience design
skipperchong
2
390
Paper Plane (Part 1)
katiecoart
PRO
2
11k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
740
So, you think you're a good person
axbom
PRO
2
2.2k
Exploring anti-patterns in Rails
aemeredith
4
520
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
Transcript
ΞυϑϦ͘ΜSDKΛSwift4ͰΈࠐΉ ΠϯλʔεςΠγϟϧ ωΠςΟϒ ಈըΠϯλʔεςΠγϟϧ ಈըωΠςΟϒ ಈըϦϫʔυ όφʔ *OΞυϑϦδϡΫ
ΞυϑϦ͘Μ4%,ͷಋೖ IUUQTBEGVSJLVOKQBEGVSJLVO ·ͣΞΧϯτొ
ΠϯλʔεςΠγϟϧ ωΠςΟϒ όφʔ
ΞυϑϦ͘Μ4%,ͷಋೖ μϯϩʔυϖʔδ͔Β4%,Λμϯϩʔυ ࠂΛ࡞ͬͯɺࠂ*%Λൃߦ͢Δɻ
ΞυϑϦ͘Μ4%,ͷಋೖ ϓϩδΣΫτʹ4%,ΛՃ 4%,Λυϥοάˍυϩοϓɻ
ΞυϑϦ͘Μ4%,ͷಋೖ ϑϨʔϜϫʔΫΛՃ
ΞυϑϦ͘Μ4%,ͷಋೖ ϒϦοδϔομͷՃ 0CKFDUJWF$ͷదͳΫϥ εΛՃɻ͋ͱͰফ͢ɻ
ΞυϑϦ͘Μ4%,ͷಋೖ ϒϦοδϔομͷՃ ίϯύΠϧઃఆʹϒϦοδ ϔομ͕Ճ͞ΕΔɻ
όφʔʗΠϯλʔεςΠγϟϧ
όφʔʗΠϯλʔεςΠγϟϧࠂͷදࣔ ϒϦοδϔομهೖ #import <adfurikunsdk/AdfurikunView.h> #import <adfurikunsdk/AdfurikunPopupView.h>
func makeBannerAd() { let adfurikunView = AdfurikunView(frame: CGRect(x: 0, y:
0, width: 320, height: 50)) self.view.addSubview(adfurikunView) adfurikunView.appID = “ࠂID” adfurikunView.transitionDulation = 0.5 adfurikunView.testModeEnable() // ςετϞʔυ adfurikunView.startShowAd() adfurikunView.center = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height - 25) } όφʔࠂͷදࣔ 6*7JFX$POUSPMMFSʹදࣔ͢Δఆ
όφʔࠂͷදࣔ
ΠϯλʔεςΠγϟϧࠂͷදࣔ 6*7JFX$POUSPMMFSʹදࣔ͢Δఆ var adfurikunInter: AdfurikunPopupView! func makeInterstisialAd() { self.adfurikunInter =
AdfurikunPopupView() self.adfurikunInter.appID = “ࠂID” self.adfurikunInter.testModeEnable() // ςετϞʔυ self.adfurikunInter.setSchedule(1) self.adfurikunInter.preloadAd() } @IBAction func showInterstisialAd(_ sender: Any) { self.view.addSubview(self.adfurikunInter) self.adfurikunInter.center = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height/2) self.adfurikunInter.preloadShowAd() }
ΠϯλʔεςΠγϟϧࠂͷදࣔ 6*7JFX$POUSPMMFSʹදࣔ͢Δఆ
ωΠςΟϰ
ωΠςΟϒࠂͷදࣔ ϒϦοδϔομهೖ #import <adfurikunsdk/AdfurikunNativeAd.h> #import <adfurikunsdk/AdfurikunNativeAdInfo.h>
ωΠςΟϒࠂͷදࣔ var adfurikunNative: AdfurikunNativeAd! var nativeLinkURL: URL? //ࠂϦϯΫ var imageView:
UIImageView! //ࠂը૾ var titleLabel: UILabel! //ࠂλΠτϧ var textLabel: UILabel! //ࠂςΩετ var nativeAdView: UIView! //ࠂදࣔϏϡʔ ࠂදࣔ༻ͷϓϩύςΟΛఆٛ
ωΠςΟϒࠂͷදࣔ func nativeAd(size: CGSize) -> UIView { let adView =
UIView(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height)) self.nativeAdView = adView adView.backgroundColor = UIColor.white //ը૾ self.imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: size.height, height: size.height)) imageView.contentMode = .scaleAspectFit adView.addSubview(imageView) //λΠτϧ self.titleLabel = UILabel(frame: CGRect(x: size.height + 5.0, y: 0, width: size.width - (size.height + 5.0), height: size.height * 0.3)) titleLabel.numberOfLines = 2 titleLabel.minimumScaleFactor = 0.5 adView.addSubview(titleLabel) //ςΩετ self.textLabel = UILabel(frame: CGRect(x: size.height + 5.0, y: size.height * 0.3, width: size.width - (size.height + 5.0), height: size.height * 0.7)) textLabel.numberOfLines = 4 textLabel.minimumScaleFactor = 0.5 adView.addSubview(textLabel) ࠂදࣔ༻ͷϏϡʔΛ࡞Δ
ωΠςΟϒࠂͷදࣔ self.adfurikunNative = AdfurikunNativeAd(“ࠂID”) self.adfurikunNative.delegate = self self.adfurikunNative.getNativeAd() return adView
} ࠂදࣔ༻ͷϏϡʔΛ࡞Δ σϦήʔτΛઃఆ AdfurikunNativeAdDelegate
ωΠςΟϒࠂͷදࣔ func apiDidFinishLoading(_ nativeAdInfo: AdfurikunNativeAdInfo, adnetworkKey networkKey: String!) { if
let url = URL(string: nativeAdInfo.img_url) { let task = URLSession.shared.dataTask(with: url) { data, response, error in if let d = data, error == nil{ DispatchQueue.main.async { self.imageView.image = UIImage(data: d) //ը૾ self.titleLabel.text = nativeAdInfo.title //λΠτϧ self.textLabel.text = nativeAdInfo.text //ςΩετ //ϦϯΫ if let url = nativeAdInfo.link_url { self.nativeLinkURL = URL(string: url) } //λοϓδΣενϟʔ let tapGesture = UITapGestureRecognizer(target: self.nativeAdView, action: #selector(self.naitiveAdTap(_:))) self.nativeAdView.addGestureRecognizer(tapGesture) } } } task.resume() } } func apiDidFailWithError(_ err: Int32, adnetworkKey: String!) { print("Native Ad error: \(adnetworkKey)=\(err)") } σϦήʔτϝιουͰϦιʔεΛऔಘ ϝΠϯεϨουͰઃఆ AdfurikunNativeAdDelegate λοϓΛݕͰ͖ΔΑ͏ʹ ͢Δɻ
ωΠςΟϒࠂͷදࣔ @objc func naitiveAdTap(_ tap: UITapGestureRecognizer) { if let url
= self.nativeLinkURL, UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:], completionHandler: { (ok) in AdfurikunNativeAdInfo.makeInstance().recClick() }) } } ࠂΫϦοΫͷ௨
ωΠςΟϒࠂͷදࣔ
ಈըΠϯλʔεςΠγϟϧ ಈըωΠςΟϒ ಈըϦϫʔυ
ΞυϑϦ͘Μಈը4%,ͷಋೖ μϯϩʔυϖʔδ͔Β4%,Λμϯϩʔυ ֤ΞυωοτϫʔΫͷઃఆɺ ͜ͷϚχϡΞϧΛ͝ཡ͍ͩ͘͞ɻ ʢ͜͜ͰׂѪ͠·͢ʣ $PDPB1PETΛ͏ํ๏ָ͕ʂ
ΞυϑϦ͘Μಈը4%,ͷಋೖ ϓϩδΣΫτʹ4%,ΛՃ 4%,Λυϥοάˍυϩοϓɻ BEOFUXPSLT
ΞυϑϦ͘Μ4%,ͷಋೖ ϑϨʔϜϫʔΫΛՃ
ϒϦοδϔομهೖ JNQPSU"%'.PWJF3FXBSE"%'NZ.PWJF3FXBSEI JNQPSU"%'.PWJF3FXBSE"%'NZ.PWJF*OUFSTUJUJBMI JNQPSU"%'.PWJF3FXBSE"%'NZ.PWJF/BUJWFI JNQPSU"%'.PWJF3FXBSE"%'NZ.PWJF/BUJWF"E7JFXI JNQPSU"%'.PWJF3FXBSE"%'NZ.PWJF/BUJWF"E'MFYI JNQPSU"%'.PWJF3FXBSE"%'.PWJF0QUJPOTI ΞυϑϦ͘Μಈը4%,ͷಋೖ
ಈըωΠςΟϰ
ಈըωΠςΟϒࠂͷදࣔ var adfurikunMovieNativeView: ADFmyMovieNativeAdView! var videoNativeAdView: UIView! //ಈըωΠςΟϰࠂදࣔϏϡʔ ࠂදࣔ༻ͷϓϩύςΟΛఆٛ
ಈըωΠςΟϒࠂͷදࣔ if ADFmyMovieNativeAdView.isSupportedOSVersion() { ADFmyMovieNativeAdView.configure(withAppID: “ࠂID”) } ॳظԽ ىಈޙʹ࣮ߦ
ಈըωΠςΟϒࠂͷදࣔ func makeVideoNativeView(size: CGSize) -> UIView { let rect =
CGRect(x: 0, y: 0, width: size.width, height: size.height) let adView: UIView = UIView(frame: rect) if ADFmyMovieNativeAdView.isSupportedOSVersion() { self.adfurikunMovieNativeView = ADFmyMovieNativeAdView(appID: “ࠂID”, layoutPattern: .default) self.adfurikunMovieNativeView.autoLoad = true self.adfurikunMovieNativeView.loadAndNotify(to: self) } self.videoNativeAdView = adView return adView } ࠂදࣔ༻ͷϏϡʔΛ࡞Δ σϦήʔτΛઃఆ ADFmyMovieNativeAdViewDelegate
ಈըωΠςΟϒࠂͷදࣔ //ࠂͷऔಘޭ func onNativeMovieAdViewLoadFinish(_ appID: String) { if let adv
= self.adfurikunMovieNativeView.getAdView() { adv.bounds = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height) self.addSubview(adv) adv.center = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2) self.adfurikunMovieNativeView.setVideoDelegate(self) self.adfurikunMovieNativeView.playVideo() } } //ࠂͷऔಘࣦഊ func onNativeMovieAdViewLoadError(_ error: ADFMovieError, appID: String) { print("ωΠςΟϰࠂͷऔಘࣦഊ:\(error.errorMessage)") } ಈըͷऔಘ σϦήʔτΛઃఆ ADFmyNativeAdViewVideoDelegate ADFmyMovieNativeAdViewDelegate
ಈըωΠςΟϒࠂͷදࣔ ಈըͷ࠶ੜ֬ೝσϦήʔτ //ࠂͷ࠶ੜ։࢝ func onNativeMovieAdViewPlayStart(_ appID: String) { print("ࠂͷ࠶ੜ։࢝:\(appID)") }
//ࠂͷ࠶ੜྃ func onNativeMovieAdViewPlayFinish(_ appID: String, isVideo: Bool) { print("ࠂͷ࠶ੜྃ:\(appID) isVideo=\(isVideo)") } //ࠂͷ࠶ੜࣦഊ func onNativeMovieAdViewPlayFail(_ appID: String, error: ADFMovieError) { print("ࠂͷ࠶ੜࣦഊ:\(appID) \(error.errorMessage)") } ADFmyNativeAdViewVideoDelegate
ಈըΠϯλʔεςΠγϟϧ
ಈըΠϯλʔεςΠγϟϧࠂͷදࣔ if ADFmyMovieInterstitial.isSupportedOSVersion() { ADFmyMovieInterstitial.initWithAppID(“ࠂID”, viewController: self) } if let
ad = ADFmyMovieInterstitial.getInstance(“ࠂID”, delegate: self) { if ad.isPrepared() { ad.play(withPresenting: self) } } ॳظԽ දࣔ ىಈޙʹ࣮ߦ σϦήʔτΛઃఆ ADFmyMovieRewardDelegate
// ࠂͷදࣔ४උ͕ऴΘͬͨ func adsFetchCompleted(_ isTestMode_inApp: Bool) { } // ࠂͷද͕ࣔ։͔࢝ͨ͠
func adsDidShow(_ adnetworkKey: String) { } // ࠂͷදࣔΛ࠷ޙ·ͰऴΘ͔ͬͨ func adsDidCompleteShow() { } // ಈըࠂ࠶ੜΤϥʔ࣌ͷΠϕϯτ func adsPlayFailed() { } // ࠂΛดͨ࣌͡ͷΠϕϯτ func adsDidHide() { } ಈըΠϯλʔεςΠγϟϧࠂͷදࣔ σϦήʔτϝιου ADFmyMovieRewardDelegate σϦήʔτͷϓϩτίϧɺ ಈըϦϫʔυͱಉ͡ʂ ಈըϦϫʔυͷ߹ɺ͜ͷσϦήʔτϝιο υ͕ݺΕͨ࣌ͰɺใुΛ༩͑Δɻ
ಈըϦϫʔυ
ಈըϦϫʔυࠂͷදࣔ ࠂදࣔ༻ͷϓϩύςΟΛఆٛ var adfurikunMovieReward: ADFmyMovieReward!
ॳظԽ දࣔ ಈըϦϫʔυࠂͷදࣔ if ADFmyMovieReward.isSupportedOSVersion() { ADFmyMovieReward.initWithAppID(“ࠂID”, viewController: self) self.adfurikunMovieReward
= ADFmyMovieReward.getInstance(“ࠂID”, delegate: self) } ىಈޙʹ࣮ߦ if self.adfurikunMovieReward.isPrepared() == true { self.adfurikunMovieReward.play() } else { print("ADF ࠂͷऔಘ͕͍ྃͯ͠·ͤΜ") } σϦήʔτΛઃఆ ADFmyMovieRewardDelegate
// ࠂͷදࣔ४උ͕ऴΘͬͨ func adsFetchCompleted(_ isTestMode_inApp: Bool) { } // ࠂͷද͕ࣔ։͔࢝ͨ͠
func adsDidShow(_ adnetworkKey: String) { } // ࠂͷදࣔΛ࠷ޙ·ͰऴΘ͔ͬͨ func adsDidCompleteShow() { } // ಈըࠂ࠶ੜΤϥʔ࣌ͷΠϕϯτ func adsPlayFailed() { } // ࠂΛดͨ࣌͡ͷΠϕϯτ func adsDidHide() { } ಈըϦϫʔυࠂͷදࣔ σϦήʔτϝιου ADFmyMovieRewardDelegate ͜ͷσϦήʔτϝιου͕ݺΕͨ࣌Ͱɺ ใुΛ༩͑Δɻ
ΞυϑϦ͘ΜSDKΛSwift4ͰΈࠐΉ *OΞυϑϦδϡΫ Ҏ্ɺ Ͳ͏͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ