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
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
540
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
210
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
4
3.5k
The Rails Doctrine Decade
koic
2
590
気持ちぃ〜角丸 Squircle
ryu1013
0
310
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
300
R8 の設定見直しでアプリサイズ削減
andpad
0
220
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
180
sbt 2.0: takeoff
eed3si9n
0
160
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
430
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Mobile First: as difficult as doing things right
swwweet
225
10k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Done Done
chrislema
187
17k
Music & Morning Musume
bryan
48
7.4k
Building Adaptive Systems
keathley
44
3.2k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
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ΞυϑϦδϡΫ Ҏ্ɺ Ͳ͏͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ