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
Privacy Sandbox on Android / DroidKaigi 2024
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
7pairs
September 12, 2024
Technology
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Privacy Sandbox on Android / DroidKaigi 2024
7pairs
September 12, 2024
More Decks by 7pairs
See All by 7pairs
Pythonによる契約プログラミング入門 / PyCon JP 2025
7pairs
7
4.8k
テキストマイニングによるプロ野球の順位予想 / Baseball Play Study 2020 Winter
7pairs
0
590
2020年の振り返りとBaseball Play Studyの振り返り / Jisyupy 29
7pairs
0
410
Because Python is there. / Jisyupy 27
7pairs
0
540
野球好きのための快適なプレゼンテーション環境の構築 / Baseball Play Study 2019 Winter
7pairs
0
1.1k
ちゃんと実装してちゃんとテストしよう / PyCon mini Hiroshima 2019
7pairs
2
1.1k
Pie Meets Py / PyCon JP 2019
7pairs
3
6k
テキストマイニングによる新外国人選手の分析 / Baseball Play Study 2019 Spring
7pairs
0
3.1k
テキストマイニングによる応援歌の分析 / Baseball Play Study 2018 Winter
7pairs
0
2.4k
Other Decks in Technology
See All in Technology
DORA_Metrics.pdf
wagnerfusca
1
140
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
3
21k
20260930_Gemma4_Hands-on
tsho
0
160
AIエージェントを安全で速い現場監督にする:Jev・Obsidian・メタハーネス
x5gtrn
PRO
0
140
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
240
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
190
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
610
企業の現実世界をグラフで写し取る
sansantech
PRO
0
200
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
240
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
120
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
3
660
AIに会社の文脈を理解させる技術~上流工程・非エンジニアにも広げるハーネスエンジニアリング実践~
ochtum
0
190
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Language of Interfaces
destraynor
162
27k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Six Lessons from altMBA
skipperchong
29
4.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Limits of Empathy - UXLibs8
cassininazir
1
690
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
910
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Transcript
Privacy Sandbox on Android ୩ ५ (HASEBA Junya) / @7pairs
DroidKaigi 2024 Day 1 (September 12, 2024)
1SJWBDZ4BOECPYPO"OESPJEൃදࢿྉ IUUQTTQFBLFSEFDLDPNQBJSTESPJELBJHJ
͡Ίʹ ‣ ຊηογϣϯൃදऀ͕ಠࣗʹௐࠪͨ͠༰Λ·ͱΊͨͷͰ͢ ‣ ݄࣌Ͱެ։͞Ε͍ͯΔ 1SJWBDZ4BOECPYPO"OESPJEʹؔ͢ΔใΛલఏͱ͍ͯ͠·͢ ‣ ݱࡏͷ1SJWBDZ4BOECPYPO"OESPJE༷ͷఏҊஈ֊ͳͷͰ ͷมԽʹΑͬͯࠓޙํ͕มΘΔՄೳੑ͋Γ·͢
͡Ίʹ ‣ ຊηογϣϯൃදऀ͕ಠࣗʹௐࠪͨ͠༰Λ·ͱΊͨͷͰ͢ ‣ ݄࣌Ͱެ։͞Ε͍ͯΔ 1SJWBDZ4BOECPYPO"OESPJEʹؔ͢ΔใΛલఏͱ͍ͯ͠·͢ ‣ ݱࡏͷ1SJWBDZ4BOECPYPO"OESPJE༷ͷఏҊஈ֊ͳͷͰ ͷมԽʹΑͬͯࠓޙํ͕มΘΔՄೳੑ͋Γ·͢
ࠓޙํ͕มΘΔՄೳੑʜʜʁ ‣ ݄ʹ1SJWBDZ4BOECPYGPSUIF8FC͕ํసΛൃද ‣ IUUQTQSJWBDZTBOECPYDPNJOUMFO@VTOFXTQSJWBDZTBOECPYVQEBUF ‣ பͷͻͱͭͩͬͨαʔυύʔςΟ$PPLJFͷഇࢭΛஅ೦ ‣ ഇࢭͷऔΓΈ͔ͳΓߤ͍ͯͨ͠ ‣
աڈʹΘͨͬͯԆظΛ܁Γฦ͍ͯͨ͠ ‣ ͨͩ͠1SJWBDZ4BOECPYࣗମࠓޙܧଓͯ͠։ൃΛ͓͜ͳ͏
ࠓޙํ͕มΘΔՄೳੑʜʜʁ ‣ ݄ʹ1SJWBDZ4BOECPYGPSUIF8FC͕ํసΛൃද ‣ IUUQTQSJWBDZTBOECPYDPNJOUMFO@VTOFXTQSJWBDZTBOECPYVQEBUF ‣ பͷͻͱͭͩͬͨαʔυύʔςΟ$PPLJFͷഇࢭΛஅ೦ ‣ ഇࢭͷऔΓΈ͔ͳΓߤ͍ͯͨ͠ ‣
աڈʹΘͨͬͯԆظΛ܁Γฦ͍ͯͨ͠ ‣ ͨͩ͠1SJWBDZ4BOECPYࣗମࠓޙܧଓͯ͠։ൃΛ͓͜ͳ͏
ొஃΩϟϯηϧճආ🎉
ࣗݾհ val speaker = Person( name = "長谷場 潤也 (HASEBA
Junya)" sns = "7pairs" icon = AppCompatResources.getDrawable(context, R.drawable.tkg) company = "株式会社アイモバイル" job = "広告SDK (Android / iOS)" languages = setOf("Python", "Clojure") favorites = setOf("U-NEXT Pirates", "埼玉西武ライオンズ") )
ஶॻհ IUUQTOFYUQVCMJTIJOHKQCPPLIUNM
ຊηογϣϯͷΰʔϧ ‣ 1SJWBDZ4BOECPYPO"OESPJEͷ ओཁͳίϯϙʔωϯτʹ͍͍ͭͯͬͯͨͩ͘ ‣ 1SJWBDZ4BOECPYPO"OESPJEͷಋೖʹΑͬͯ Έͳ͞ΜͷΞϓϦʹͨΒ͞ΕΔӨڹʹ͍͍ͭͯͬͯͨͩ͘ ‣ ͜ͷ͋ͱͷ"GUFS1BSUZͰࢲ͕΅ͬͪʹͳΒͳ͍
ຊηογϣϯͰऔΓ্͛ͳ͍͜ͱ ‣ 1SJWBDZ4BOECPYGPSUIF8FCͷৄࡉ ‣ ࠂ৴ͷΈʹؔ͢Δৄࡉ ‣ આ໌Λ؆ུԽ͢ΔͨΊʹ͋͑ͯলུ͍ͯ͠ΔՕॴ͕͋Γ·͢ ‣ ࠂؔ࿈ͷࣄۀऀ͕͓͜ͳ͏1SJWBDZ4BOECPYରԠͷৄࡉ
"HFOEB ᶃ 1SJWBDZ4BOECPYͱʁ ᶄ 1SJWBDZ4BOECPYPO"OESPJEͱʁ ᶅ 1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ ᶆ 1SJWBDZ4BOECPYPO"OESPJE͕Ҿ͖ى͜͢มԽ ᶇ
·ͱΊ
"HFOEB ᶃ 1SJWBDZ4BOECPYͱʁ ᶄ 1SJWBDZ4BOECPYPO"OESPJEͱʁ ᶅ 1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ ᶆ 1SJWBDZ4BOECPYPO"OESPJE͕Ҿ͖ى͜͢มԽ ᶇ
·ͱΊ
1SJWBDZ4BOECPYͱʁ ‣ (PPHMF͕ఏҊ͍ͯ͠Δ৽͍͠8FCࠂ৴ͷΈ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͠ͳ͕Β ޮՌͷߴ͍ࠂΛ৴͢ΔͨΊͷίϯϙʔωϯτ܈
1SJWBDZ4BOECPYͷඪ Ϣʔβʔ の ϓϥΠόγʔอޢ を ڧԽ͠ た ৽ͨ な
ٕज़ の ߏங ύϒϦογϟʔ や ։ൃऀ に Α る ແྉΦϯϥΠϯίϯςϯπఏڙ の ܧଓ ۀք の օ༷ と ڞʹ ΠϯλʔωοτϢʔβʔ の ϓϥΠόγʔ を อޢ͢ る ৽ͨ な ج४ を ߏங ˞IUUQTQSJWBDZTBOECPYDPNJOUMKB@KQΑΓ
1SJWBDZ4BOECPYͷඪ Ϣʔβʔ の ϓϥΠόγʔอޢ を ڧԽ͠ た ৽ͨ な
ٕज़ の ߏங ύϒϦογϟʔ や ։ൃऀ に ΑΔແྉΦϯϥΠϯίϯςϯπఏڙ の ܧଓ ۀք の օ༷ と ڞʹ ΠϯλʔωοτϢʔβʔ の ϓϥΠόγʔ を อޢ͢ る ৽ͨ な ج४ を ߏங ˞IUUQTQSJWBDZTBOECPYDPNJOUMKB@KQΑΓ
ϢʔβʔͷϓϥΠόγʔอޢ ‣ ΞϓϦ8FCαΠτͳͲͷίϯςϯπ Ϣʔβʔ͕҆৺ͯ͠ར༻Ͱ͖ΔͷͰͳ͚ΕͳΒͳ͍ ‣ ݱࡏݸਓͷಛఆʹͭͳ͕Γ͔Ͷͳ͍Έ͕ར༻͞Ε͍ͯΔ ‣ "OESPJEʹ͓͚Δࠂ*% ‣
8FCʹ͓͚ΔαʔυύʔςΟ$PPLJF ‣ ସػೳΛఏڙͯ͜͠ΕΒͷΈΛഇࢭ͢Δ͜ͱΛࢦ͢
ϢʔβʔͷϓϥΠόγʔอޢ ‣ ΞϓϦ8FCαΠτͳͲͷίϯςϯπ Ϣʔβʔ͕҆৺ͯ͠ར༻Ͱ͖ΔͷͰͳ͚ΕͳΒͳ͍ ‣ ݱࡏݸਓͷಛఆʹͭͳ͕Γ͔Ͷͳ͍Έ͕ར༻͞Ε͍ͯΔ ‣ "OESPJEʹ͓͚Δࠂ*% ʹݻ༗ͷ*%
ৄࡉͷͪ΄Ͳ ‣ 8FCʹ͓͚ΔαʔυύʔςΟ$PPLJF ݄ʹഇࢭΛஅ೦ ‣ ସػೳΛఏڙͯ͜͠ΕΒͷΈΛഇࢭ͢Δ͜ͱΛࢦ͢
ແྉΦϯϥΠϯίϯςϯπఏڙͷܧଓ ‣ ίϯςϯπΛແྉͰఏڙ͢Δʹ͋ͨΓࠂॏཁͳׂΛՌͨ͢ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͠ͳ͕Β ͜Ε·Ͱͱಉ Ҏ্ ͷޮՌΛ্͛Δࠂ৴ͷΈΛఏڙ͢Δ ‣
8FCࠂಛ༗ͷػೳ ޮՌͷଌఆ ύʔιφϥΠζͳͲ ͷͨΊʹ ϢʔβʔͷϓϥΠόγʔ͕ڴ͔͞Ε͔Ͷͳ͍ͷ͕ݱঢ় ‣ ୯ʹࠂ*%αʔυύʔςΟ$PPLJFΛഇࢭ͚ͨͩ͠Ͱ ޮՌ͕Լ͕ͬͯίϯςϯπఏڙऀؐݩͰ͖Δརӹ͕ݮগ͢Δ
ۀքͷօ༷ͱڞʹ ‣ ఏҊஈ֊ͷ༷Λެ։͍ͯ͠Δ ‣ ͦΕͧΕͷཱ͔ΒͷϑΟʔυόοΫΛ͘ื͍ͬͯΔ ‣ ΞϓϦσϕϩούʔ ࠂΛදࣔͤͯ͞རӹΛಘΔཱ
‣ ࠂ৴ࣄۀऀ ࠂΛ৴͢Δཱ ‣ ܭଌπʔϧࣄۀऀ ࠂͷޮՌΛଌఆ͢Δཱ ‣ ࠂओ ࠂΛग़ߘ͢Δཱ
(PPHMFɺ"OESPJEͰʮϓϥΠόγʔαϯυϘοΫεʯಋೖͷෳܭը *5NFEJB/&84݄ IUUQTXXXJUNFEJBDPKQOFXTBSUJDMFTOFXTIUNM (PPHMFϓϥΠόγʔΛकΔࠂʹ͍ͭͯɺlଞ ͷϓϥοτϑΥʔϜzͷΑ͏ͳʮ։ൃऀࠂओͷ ͨΊͷطଘπʔϧΛ੍ͨͩݶ͢Δํ๏ޮՌ͕ͳ ͘ɺ։ൃऀࠂओʹɺ·ͣସͷํ๏Λఏڙ ͠ͳ͚ΕͳΒͳ͍ʯͱɺ҉ʹ தུ
Λ൷ͨ͠ɻ
"HFOEB ᶃ 1SJWBDZ4BOECPYͱʁ ᶄ 1SJWBDZ4BOECPYPO"OESPJEͱʁ ᶅ 1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ ᶆ 1SJWBDZ4BOECPYPO"OESPJE͕Ҿ͖ى͜͢มԽ ᶇ
·ͱΊ
1SJWBDZ4BOECPYPO"OESPJEͱʁ ‣ 1SJWBDZ4BOECPYͷऔΓΈͷ͏ͪ "OESPJEΞϓϦΛରͱͨ͠ίϯϙʔωϯτ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͢ΔͨΊ ࠂ*%ʹཔΒͳ͍ࠂ৴ͷΈΛߏங͢Δ ‣ ͜Ε·Ͱࠂ*%Λ࣮ͬͯݱ͍ͯͨ͠ ࠂޮՌͷଌఆύʔιφϥΠζͷͨΊͷସٕज़Λఏڙ͢Δ
ରԠγεςϜΠϝʔδ 1SJWBDZ4BOECPYରԠͷ04 ίʔυωʔϜʴ1SJWBDZ4BOECPY ͷ"1*-FWFMͰެ։த
ࠂ*%ͱʁ ‣ ͦΕͧΕͷ"OESPJEσόΠεʹׂΓͯΒΕͨҰҙͷࣝผࢠ ‣ ϢʔβʔʹΑΔࠂ*%ͷϦηοτ͕Մೳ ‣ ࣝผ൪߸ͷΑ͏ʹ߃ٱతͳ*%Ͱͳ͍ ‣ ࠂͷදࣔޮՌͷଌఆΛతͱͯ͠༻͞ΕΔ
ࠂ*% "OESPJE ‣ <ઃఆ>ˠ<(PPHMF>ˠ<ࠂ>Ͱ ࠂ*%ͷ֬ೝ੍ޚ͕Մೳ ‣ <ࠂ*%ΛϦηοτ͢Δ> ৽͍͠ࠂ*%Λ࠾൪ ‣ <ࠂ*%Λআ͢Δ>
ݱࡏͷࠂ*%Λར༻ෆՄʹ
ࠂ*% ʙ"OESPJE ‣ <ઃఆ>ˠ<(PPHMF>ˠ<ࠂ>Ͱ ࠂ*%ͷ֬ೝ੍ޚ͕Մೳ ‣ <ࠂ*%ΛϦηοτ> ৽͍͠ࠂ*%Λ࠾൪ ‣ <ࠂͷΧελϚΠζΛΦϓτΞτ͢Δ>
ࠂ*%ͷఏڙΛڋ൱
ࠂ*%ͷ༻్ ‣ ࠂͷޮՌΛଌఆ͢Δ ‣ ΫϦοΫͷܭଌ ‣ ίϯόʔδϣϯ Πϯετʔϧ ߪೖͳͲ ͷܭଌ
‣ ࠂΛύʔιφϥΠζ͢Δ ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂͷදࣔ
ొਓհ ‣ ࠂωοτϫʔΫ ‣ 8FCࠂΛ৴͢Δࣄۀऀ ‣ ΞϓϦܭଌπʔϧ ‣ ࠂओͷͨΊʹࠂؔ࿈ͷσʔλΛܭଌ ूܭ͢Δࣄۀऀ
‣ ૬ੑͷྑ͍ࠂΛબͿΈ ‣ ࢦఆ͞Εͨ݅ͷϢʔβʔͱ૬ੑͷྑ͍ࠂΛબͿγεςϜ ܈
ࠂ*%ͷ༻్ ‣ ࠂͷޮՌΛଌఆ͢Δ ‣ ΫϦοΫͷܭଌ ‣ ίϯόʔδϣϯ Πϯετʔϧ ߪೖͳͲ ͷܭଌ
‣ ࠂΛύʔιφϥΠζ͢Δ ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂͷදࣔ
ΫϦοΫͷܭଌᶃ ࠂͷϦΫΤετ ‣ <ࠂ4%,> ࠂ*%ΛؚΉܗͰ ࠂͷ৴ΛϦΫΤετ͢Δ ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ࠂ*%
ΫϦοΫͷܭଌᶄ ࠂͷදࣔ ‣ <ࠂωοτϫʔΫ> දࣔ͢ΔࠂΛฦ͢ ‣ <ࠂ4%,> ΞϓϦͷը໘ʹࠂΛදࣔ͢Δ ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ
ΫϦοΫͷܭଌᶅ ࠂͷΫϦοΫ ‣ <Ϣʔβʔ> ࠂΛΫϦοΫ͢Δ ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ࠂΛ ΫϦοΫ
ΫϦοΫͷܭଌᶆ ΫϦοΫͷ௨ᶃ ‣ <ࠂ4%,> ࠂ*%ΛؚΉܗͰ ࠂͷΫϦοΫΛ௨͢Δ ‣ <ࠂωοτϫʔΫ> ΫϦοΫ͕ൃੜͨ͠σόΠεͷ ࠂ*%ΛѲ͢Δ
ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ࠂ*%
ΫϦοΫͷܭଌᶇ ΫϦοΫͷ௨ᶄ ‣ <ࠂωοτϫʔΫ> ࠂ*%ΛؚΉܗͰϦμΠϨΫτ͢Δ ‣ <ΞϓϦܭଌπʔϧ> ΫϦοΫ͕ൃੜͨ͠σόΠεͷ ࠂ*%ΛѲ͢Δ ˞ϦμΠϨΫτͰͳ͘
ɹ4%,͔ΒใΛૹ৴͢Δέʔε͋Γ·͢ ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ࠂ*%
ΫϦοΫͷܭଌᶈ ετΞͷදࣔ ‣ <ΞϓϦܭଌπʔϧ> ϦμΠϨΫτ͢Δ ‣ <1MBZ4UPSF> ֘ΞϓϦͷϖʔδ͕දࣔ͞ΕΔ ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ
ࠂ*%ͷ༻్ ‣ ࠂͷޮՌΛଌఆ͢Δ ‣ ΫϦοΫͷܭଌ ‣ ίϯόʔδϣϯ Πϯετʔϧ ߪೖͳͲ ͷܭଌ
‣ ࠂΛύʔιφϥΠζ͢Δ ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂͷදࣔ
ίϯόʔδϣϯͷܭଌᶃ ΞϓϦͷॳճىಈ ‣ <Ϣʔβʔ> ࠂܦ༝ͰΠϯετʔϧͨ͠ ΞϓϦΛىಈ͢Δ ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ΞϓϦΛ ىಈ
ίϯόʔδϣϯͷܭଌᶄ Ռͷ௨ᶃ ‣ <ΞϓϦܭଌπʔϧ4%,> ࠂ*%ΛؚΉܗͰ ίϯόʔδϣϯΛ௨͢Δ ‣ <ΞϓϦܭଌπʔϧ> ίϯόʔδϣϯ͕ൃੜͨ͠ σόΠεͷࠂ*%ΛѲ͢Δ
ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ࠂ*%
ίϯόʔδϣϯͷܭଌᶅ Ռͷ௨ᶄ ‣ <ΞϓϦܭଌπʔϧ> ࠂ*%ΛؚΉܗͰ ίϯόʔδϣϯΛ௨͢Δ ‣ <ࠂωοτϫʔΫ> ίϯόʔδϣϯ͕ൃੜͨ͠ σόΠεͷࠂ*%ΛѲ͢Δ
ࠂωοτϫʔΫ ΞϓϦܭଌπʔϧ ࠂ*%
ࠂ*%ͷ༻్ ‣ ࠂͷޮՌΛଌఆ͢Δ ‣ ΫϦοΫͷܭଌ ‣ ίϯόʔδϣϯ Πϯετʔϧ ߪೖͳͲ ͷܭଌ
‣ ࠂΛύʔιφϥΠζ͢Δ ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂͷදࣔ
ύʔιφϥΠζᶃ ࠂͷϦΫΤετ ‣ <ࠂ4%,> ࠂ*%ΛؚΉܗͰ ࠂͷ৴ΛϦΫΤετ͢Δ ࠂωοτϫʔΫ Ϣʔβʔͱ ૬ੑͷྑ͍ࠂΛ બͿΈ
ࠂ*%
ύʔιφϥΠζᶄ ࠂͷબ ‣ <ࠂωοτϫʔΫ> ֘ͷࠂ*%ͱ ૬ੑͷྑ͍ࠂΛબఆ͢Δ ࠂωοτϫʔΫ ࠂ*% Ϣʔβʔͱ ૬ੑͷྑ͍ࠂΛ
બͿΈ
ύʔιφϥΠζᶅ ࠂͷදࣔ ‣ <ࠂωοτϫʔΫ> બఆ͞ΕͨࠂΛฦ͢ ‣ <ࠂ4%,> ΞϓϦͷը໘ʹࠂΛදࣔ͢Δ ࠂωοτϫʔΫ Ϣʔβʔͱ
૬ੑͷྑ͍ࠂΛ બͿΈ
ࠂ*%ͷ ‣ ϦηοτແޮԽͷखॱ͕͔ΓͮΒ͘ ͦͷखஈ͕ఏڙ͞Ε͍ͯΔ͜ͱΛΒͳ͍Ϣʔβʔଟ͍ ‣ ͝ͱͷ*%ͳͷͰෳͷΞϓϦΛ·͕͕ͨͬͨͰ͖ͯ͠·͏ ‣ ࠂʹؔͷͳ͍໘ͰߦಈΛ͞ΕΔ͓ͦΕ͕͋Δ ‣ ࠂؔ࿈ͷ4%,Ͱͳͯ͘ࠂ*%Λऔಘ
ར༻Ͱ͖Δ
ࠂ*%ͷऔಘᶃ ґଘؔͷՃ // dependenciesにGoogle Play Servicesの参照を追加する implementation "com.google.android.gms:play-services:+" // AD_IDのパーミッションを追加する
<uses-permission android:name= "com.google.android.gms.permission.AD_ID" /> // 広告IDを取得する Thread(Runnable { val info = AdvertisingIdClient .getAdvertisingIdInfo(context) if (info != null && !info.isLimitAdTrackingEnabled) { val id = info.getId() // 広告IDを使った処理 } }).start() ‣ (PPHMF͕ఏڙ͍ͯ͠Δ (PPHMF1MBZ4FSWJDFTͷ ϥΠϒϥϦΛར༻͢Δ
ࠂ*%ͷऔಘᶄ ݖݶͷՃ // dependenciesにGoogle Play Servicesの参照を追加する implementation "com.google.android.gms:play-services:+" // AD_IDのパーミッションを追加する
<uses-permission android:name= "com.google.android.gms.permission.AD_ID" /> // 広告IDを取得する Thread(Runnable { val info = AdvertisingIdClient .getAdvertisingIdInfo(context) if (info != null && !info.isLimitAdTrackingEnabled) { val id = info.getId() // 広告IDを使った処理 } }).start() ‣ "OESPJEҎ߱Ͱ "OESPJE.BOJGFTUYNMʹ "%@*%ͷݖݶ͕ඞཁ ‣ ϢʔβʔʹΑΔ ࣮ߦ࣌ͷڐෆཁ
ࠂ*%ͷऔಘᶅ *%ͷऔಘॲཧ // dependenciesにGoogle Play Servicesの参照を追加する implementation "com.google.android.gms:play-services:+" // AD_IDのパーミッションを追加する
<uses-permission android:name= "com.google.android.gms.permission.AD_ID" /> // 広告IDを取得する Thread(Runnable { val info = AdvertisingIdClient .getAdvertisingIdInfo(context) if (info != null && !info.isLimitAdTrackingEnabled) { val id = info.getId() // 広告IDを使った処理 } }).start() ‣ (PPHMF1MBZ4FSWJDFTͷ "EWFSUJTJOH*E$MJFOUΛ ར༻͢Δ
1SJWBDZ4BOECPYPO"OESPJEͱʁ ࠶ܝ ‣ 1SJWBDZ4BOECPYͷऔΓΈͷ͏ͪ "OESPJEΞϓϦΛରͱͨ͠ίϯϙʔωϯτ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͢ΔͨΊ ࠂ*%ʹཔΒͳ͍ࠂ৴ͷΈΛߏங͢Δ ‣ ͜Ε·Ͱࠂ*%Λ࣮ͬͯݱ͍ͯͨ͠
ࠂޮՌͷଌఆύʔιφϥΠζͷͨΊͷସٕज़Λఏڙ͢Δ
1SJWBDZ4BOECPYPO"OESPJEͱʁ ࠶ܝ ‣ 1SJWBDZ4BOECPYͷऔΓΈͷ͏ͪ "OESPJEΞϓϦΛରͱͨ͠ίϯϙʔωϯτ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͢ΔͨΊ ࠂ*%ʹཔΒͳ͍ࠂ৴ͷΈΛߏங͢Δ ‣ ͜Ε·Ͱࠂ*%Λ࣮ͬͯݱ͍ͯͨ͠
ࠂޮՌͷଌఆύʔιφϥΠζͷͨΊͷସٕज़Λఏڙ͢Δ
ࠂ*%ͷকདྷతͳഇࢭ ‣ ஈ֊తͳ੍ݶ1SJWBDZ4BOECPYͷൃදҎલ͔Β࢝·͍ͬͯΔ ‣ Ҏ߱ϢʔβʔͷڐՄ͕ͳ͍ࠂ*%ͷΞΫηεʹର͠ ΦʔϧθϩΛฦ͢Α͏ʹͳ͍ͬͯΔ ‣ ۩ମతͳഇࢭͷఔ·ͩ໌Β͔ʹͳ͍ͬͯͳ͍ ‣ ݄͔Βؒഇࢭ͠ͳ͍
͏ա͍͗ͯ·͕͢ ‣ େ͖ͳมߋ͕ೖΔ߹ेͳࠂظؒΛ͏͚Δ
ࠂ*%ͷସٕज़ ‣ ࠂ*%ʹཔΒͣʹޮՌͷߴ͍ࠂΛ৴͢ΔͨΊͷΈͱͯ͠ ҎԼͷछྨͷίϯϙʔωϯτΛఏڙ͢Δ ‣ 5PQJDT ‣ 1SPUFDUFE"VEJFODF"1* ‣ "UUSJCVUJPO3FQPSUJOH
‣ 4%,3VOUJNF
"HFOEB ᶃ 1SJWBDZ4BOECPYͱʁ ᶄ 1SJWBDZ4BOECPYPO"OESPJEͱʁ ᶅ 1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ ᶆ 1SJWBDZ4BOECPYPO"OESPJE͕Ҿ͖ى͜͢มԽ ᶇ
·ͱΊ
1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ 5PQJDT 1SPUFDUFE"VEJFODF"1* "UUSJCVUJPO3FQPSUJOH 4%,3VOUJNF
1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ 5PQJDT 1SPUFDUFE"VEJFODF"1* "UUSJCVUJPO3FQPSUJOH 4%,3VOUJNF
5PQJDT ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂΛදࣔ͢ΔͨΊͷΈ ‣ ˞ ࠂͷ͕ࣝ͋Δํ͚ͷઆ໌ ɹࠂ*%ΛΘͣʹΦʔσΟΤϯελʔήςΟϯάΛ࣮ݱ͢Δ ‣ σόΠε্ͰͷΞϓϦͷར༻ঢ়گʹͱ͍ͮͯ
γεςϜʹΑͬͯʮτϐοΫʯ͕σόΠεʹׂΓͯΒΕΔ ‣ ࠂͷϦΫΤετʹτϐοΫͷใΛՃ͢Δ͜ͱͰ ֘τϐοΫͱؔ࿈ੑͷߴ͍ࠂΛ৴͢Δ
τϐοΫͱʁ ‣ Ϣʔβʔ͕ڵຯΛ͍࣋ͬͯΔରΛ͋ΒΘ͢ΧςΰϦ ‣ ྨެ։͞Ε͓ͯΓશछྨ ݄ݱࡏ ‣ IUUQTHJUIVCDPNQSJWBDZTBOECPYUPQJDTBOESPJE ‣
ਓछੑผͳͲͷσϦέʔτͳྨଘࡏ͠ͳ͍ ‣ γεςϜʹΑͬͯσόΠε෦ͰׂΓͯΒΕఆظతʹߋ৽͞ΕΔ ‣ ϢʔβʔʹΑΔ֬ೝ আ͕Մೳ
5PQJDTʹΑΔ ύʔιφϥΠζᶃ ‣ <σόΠε> ΞϓϦͷར༻ঢ়گΛऩू͢Δ ‣ <σόΠε> ऩू͞Εͨར༻ঢ়گʹͱ͍ͮͯ τϐοΫΛׂΓͯΔ ࠂωοτϫʔΫ
τϐοΫͱ ૬ੑͷྑ͍ࠂΛ બͿΈ
5PQJDTʹΑΔ ύʔιφϥΠζᶄ ‣ <ࠂ4%,> σόΠεʹׂΓͯΒΕͨ τϐοΫͷͻͱͭΛऔಘ͢Δ ˞औಘͰ͖Δ݅Λຬ͍ͨͯ͠ͳ͍߹ʹ ɹϥϯμϜͳτϐοΫ͕ฦΔ͜ͱ͋Γ·͢ ࠂωοτϫʔΫ τϐοΫͱ
૬ੑͷྑ͍ࠂΛ બͿΈ
5PQJDTʹΑΔ ύʔιφϥΠζᶅ ‣ <ࠂ4%,> τϐοΫΛؚΉܗͰ ࠂͷ৴ΛϦΫΤετ͢Δ ࠂωοτϫʔΫ τϐοΫ τϐοΫͱ ૬ੑͷྑ͍ࠂΛ
બͿΈ
5PQJDTʹΑΔ ύʔιφϥΠζᶆ ‣ <ࠂωοτϫʔΫ> ֘ͷτϐοΫͱ ૬ੑͷྑ͍ࠂΛબఆ͢Δ ˞ࠂ*%Λར༻ͨ͠ख๏ͱҟͳΓ ɹσόΠε Ϣʔβʔ Ͱͳ͘
ɹτϐοΫͱͷ૬ੑ͕ج४ͱͳΓ·͢ ࠂωοτϫʔΫ τϐοΫ τϐοΫͱ ૬ੑͷྑ͍ࠂΛ બͿΈ
5PQJDTʹΑΔ ύʔιφϥΠζᶇ ‣ <ࠂωοτϫʔΫ> બఆ͞ΕͨࠂΛฦ͢ ‣ <ࠂ4%,> ΞϓϦͷը໘ʹࠂΛදࣔ͢Δ ࠂωοτϫʔΫ τϐοΫͱ
૬ੑͷྑ͍ࠂΛ બͿΈ
5PQJDTͷಛ ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂΛ৴Ͱ͖Δ ‣ τϐοΫͷׂΓͯσόΠε෦Ͱ݁͢ΔͨΊ ࠂϦΫΤετ࣌Λআ͍ͯ ֎෦ʹใ͕ૹ৴͞ΕΔ͜ͱͳ͍ ‣ ࠂϦΫΤετ࣌ʹ࠷খݶͷใ͔͠ఏڙ͞Εͳ͍ ‣
΄͔ʹͲΜͳτϐοΫׂ͕ΓͯΒΕ͍ͯΔ͔͑ͳ͍ ‣ ͦͷτϐοΫׂ͕ΓͯΒΕͨཧ༝͑ͳ͍
1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ 5PQJDT 1SPUFDUFE"VEJFODF"1* "UUSJCVUJPO3FQPSUJOH 4%,3VOUJNF
1SPUFDUFE"VEJFODF"1* ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂΛදࣔ͢ΔͨΊͷΈ ‣ ˞ ࠂͷ͕ࣝ͋Δํ͚ͷઆ໌ ɹࠂ*%ΛΘͣʹϦϚʔέςΟϯάΛ࣮ݱ͢Δ ‣ ࠂओͷΞϓϦ͕ϢʔβʔͷߦಈΛͱʹ
ʮΧελϜΦʔσΟΤϯεʯΛఆٛ͢Δ ‣ ΧελϜΦʔσΟΤϯεͱ૬ੑͷྑ͍ࠂΛ ֎෦ʹσʔλΛૹ৴͢Δ͜ͱͳ͘σόΠεͰબఆ͢Δ
ΧελϜΦʔσΟΤϯεͱʁ ‣ ಛఆͷج४ʹͱ͍ͮͯબΕͨϢʔβʔͷάϧʔϓ ‣ ΞϓϦͰͷߦಈ͕τϦΨʔͱͳͬͯఆٛ͞ΕΔ ‣ Ϣʔβʔొ࣌ʹϝʔϧϚΨδϯͷߪಡʹಉҙͨ͠ਓ ‣ ಛఆͷΧςΰϦͷΛߪೖͨ͠ਓ ‣
FUD ‣ ͦΕͧΕͷάϧʔϓʹ߹ΘͤͨࠂΛ৴͢Δͷ͕ૂ͍
1SPUFDUFE"VEJFODF"1*ͷߏཁૉ ‣ $VTUPN"VEJFODF"1* ‣ ΧελϜΦʔσΟΤϯεΛఆٛ͢ΔͨΊͷ"1* ‣ ར༻͢Δͷࠂओ ͷΞϓϦ ‣
"E4FMFDUJPO"1* ‣ ΧελϜΦʔσΟΤϯεͱ૬ੑͷྑ͍ࠂΛબఆ͢ΔͨΊͷ"1* ‣ ར༻͢Δͷࠂ4%,
1SPUFDUFE"VEJFODF"1*ʹΑΔ ύʔιφϥΠζᶃ ‣ <ࠂओͷΞϓϦ> $VTUPN"VEJFODF"1*Λར༻͠ ΞϓϦͰͷߦಈʹԠͨ͡ ΧελϜΦʔσΟΤϯεΛ ఆٛ͢Δ ࠂωοτϫʔΫ Ϣʔβʔͱ
૬ੑͷྑ͍ࠂΛ બͿΈ
1SPUFDUFE"VEJFODF"1*ʹΑΔ ύʔιφϥΠζᶄ ‣ <ࠂ4%,> ࠂͷใΛϦΫΤετ͢Δ ˞දࣔ͞ΕΔީิͱͳΔෳ݅ͷࠂͱ ɹͦͷத͔Βબఆ͢ΔͨΊͷϝλใΛ ɹ͋Θͤͯऔಘ͍ͨͨ͠Ί ɹࠂදࣔΑΓલͷλΠϛϯάͰ ɹϦΫΤετΛ͓͜ͳ͏Մೳੑ͋Γ·͢
ࠂωοτϫʔΫ Ϣʔβʔͱ ૬ੑͷྑ͍ࠂΛ બͿΈ
1SPUFDUFE"VEJFODF"1*ʹΑΔ ύʔιφϥΠζᶅ ‣ <ࠂωοτϫʔΫ> ީิͱͳΔࠂͷใΛฦ͢ ࠂωοτϫʔΫ Ϣʔβʔͱ ૬ੑͷྑ͍ࠂΛ બͿΈ
1SPUFDUFE"VEJFODF"1*ʹΑΔ ύʔιφϥΠζᶆ ‣ <ࠂ4%,> "E4FMFDUJPO"1*ͱڠௐ͠ ΧελϜΦʔσΟΤϯεͱ ૬ੑͷྑ͍ࠂΛબఆ͢Δ ࠂωοτϫʔΫ Ϣʔβʔͱ ૬ੑͷྑ͍ࠂΛ
બͿΈ
1SPUFDUFE"VEJFODF"1*ʹΑΔ ύʔιφϥΠζᶇ ‣ <ࠂ4%,> ΞϓϦͷը໘ʹ બఆ͞ΕͨࠂΛදࣔ͢Δ ࠂωοτϫʔΫ ֎෦ͷΈʹ σʔλΛૹ৴͢Δඞཁ͕ͳ͍ Ϣʔβʔͱ
૬ੑͷྑ͍ࠂΛ બͿΈ
1SPUFDUFE"VEJFODF"1*ͷಛ ‣ Ϣʔβʔͷڵຯʹͱ͍ͮͨࠂΛ৴Ͱ͖Δ ‣ ΧελϜΦʔσΟΤϯεͷఆٛσόΠεͰ͓͜ͳΘΕ ֎෦ʹใ͕ૹ৴͞ΕΔ͜ͱͳ͍ ‣ ࠂબఆͷϓϩηε͕σόΠε ࠂ4%, ʹऔΓࠐ·Ε
બఆʹ͋ͨͬͯ֎෦ʹใ͕ૹ৴͞ΕΔ͜ͱͳ͍
͓·͚ 1SPUFDUFE"QQ4JHOBMT ‣ ʹ1SPUFDUFE"VEJFODF"1*ʹՃ͞Εͨཁૉ ‣ ΞϓϦͰͷϢʔβʔͷߦಈΛγάφϧͱͯ͠Ωϟϓνϟ͢Δ ‣ γάφϧσόΠεͷ֎෦ʹૹ৴͞ΕΔ͜ͱͳ͍ ‣ Ϣʔβʔͷߦಈʹͱ͍ͮͨ૬ੑͷྑ͍ࠂΛબͿͨΊ
σόΠε෦ͰͷࠂબఆʹγάφϧΛར༻͢Δ ˞͓·͚ͱݺͿʹେنͳΈͰ͕͢ৄࡉׂѪ͠·͢
1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ 5PQJDT 1SPUFDUFE"VEJFODF"1* "UUSJCVUJPO3FQPSUJOH 4%,3VOUJNF
"UUSJCVUJPO3FQPSUJOH ‣ ࠂͷޮՌΛଌఆ͢ΔͨΊͷΈ ‣ ΫϦοΫίϯόʔδϣϯ ॳճىಈ ߪೖ ՝ۚͳͲ ͷ ൃੜ࣌ʹ֘ΠϕϯτΛσόΠε্Ͱه͢Δ
‣ ΫϦοΫͱίϯόʔδϣϯͷใσόΠεͷ෦Ͱ݁ͼ͚ͭΒΕΔ ‣ ूܭ͢Δ୯ҐཻͷҟͳΔ &WFOUMFWFMSFQPSUTͱ"HHSFHBUBCMFSFQPSUTͷ छྨͷϨϙʔτ͕͋Δ
&WFOUMFWFMSFQPSUT ‣ ݸʑͷΫϦοΫίϯόʔδϣϯʹରԠͨ͠Ϩϙʔτ ‣ ϢʔβʔΛࣝผͰ͖Δৄࡉͳใؚ·Ε͍ͯͳ͍ ‣ ಛఆͷࠂ্͕͛ͨޮՌΛ͑Δ͜ͱ͕త ‣ ऩूσόΠεͷ෦Ͱ͓͜ͳΘΕ ҰఆൣғͷϥϯμϜͳ࣌ؒͷԆͷ͋ͱ
ࠂωοτϫʔΫࠂओ ΞϓϦܭଌπʔϧ ʹૹ৴͞ΕΔ
"HHSFHBUBCMFSFQPSUT ‣ ෳͷΠϕϯτΛूܭͨ͠ใͷϨϙʔτ ‣ ݸʑͷσόΠεͰऩूͨ͠ใΛ"HHSFHBUJPO4FSWJDFͰू͢Δ ‣ &WFOUMFWFMSFQPSUTΑΓใྔ૿͑Δ͕ ݸʑͷϢʔβʔ͝ͱͷσʔλʹͰ͖ͳ͍ ूͨ͠σʔλͷ··Ͱ͔͠ѻ͑ͳ͍
˞ܭଌͱ͍͏ΑΓࠂઓུܾఆͷͨΊͷσʔλͳͷͰৄࡉׂѪ͠·͢
"UUSJCVUJPO3FQPSUJOHᶃ ࠂͷϦΫΤετ ‣ <ࠂ4%,> ࠂͷ৴ΛϦΫΤετ͢Δ ࠂωοτϫʔΫ
"UUSJCVUJPO3FQPSUJOHᶄ ࠂͷදࣔ ‣ <ࠂωοτϫʔΫ> "UUSJCVUJPO3FQPSUJOHʹ ඞཁͳใΛՃͯ͠ࠂΛฦ͢ ‣ <ࠂ4%,> ΞϓϦͷը໘ʹࠂΛදࣔ͢Δ ࠂωοτϫʔΫ
"UUSJCVUJPO3FQPSUJOHᶅ ΫϦοΫͷܭଌ ‣ <Ϣʔβʔ> ࠂΛΫϦοΫ͢Δ ‣ <ࠂ4%,> "UUSJCVUJPO3FQPSUJOH"1*Ͱ ΫϦοΫͷใΛ σόΠεʹอଘ͢Δ
ࠂωοτϫʔΫ ࠂΛ ΫϦοΫ
"UUSJCVUJPO3FQPSUJOHᶆ ετΞͷදࣔᶃ ‣ <ࠂ4%,> ࠂωοτϫʔΫʹ ϦΫΤετΛૹ৴͢Δ ˞࣮ࡍʹʮͲͷࠂ͕ΫϦοΫ͞Ε͔ͨʯ ɹ͜ͷλΠϛϯάͰѲͰ͖·͢ ࠂωοτϫʔΫ
"UUSJCVUJPO3FQPSUJOHᶇ ετΞͷදࣔᶄ ‣ <ࠂωοτϫʔΫ> ϦμΠϨΫτ͢Δ ‣ <1MBZ4UPSF> ֘ΞϓϦͷϖʔδ͕දࣔ͞ΕΔ ˞"UUSJCVUJPO3FQPSUJOHΛར༻͢Δ্Ͱ ɹඞਢͰͳ͍ͨΊলུ͠·͕ͨ͠
ɹ࣮ࡍʹࠓޙΞϓϦܭଌπʔϧΛ ɹܦ༝͢Δέʔε͕ଟ͍ͱࢥΘΕ·͢ ࠂωοτϫʔΫ
"UUSJCVUJPO3FQPSUJOHᶈ Ռͷه ‣ <Ϣʔβʔ> ࠂܦ༝ͰΠϯετʔϧͨ͠ ΞϓϦΛىಈ͢Δ ‣ <ࠂओͷΞϓϦ> "UUSJCVUJPO3FQPSUJOH"1*Ͱ ίϯόʔδϣϯͷใΛ
σόΠεʹอଘ͢Δ ࠂωοτϫʔΫ ΞϓϦΛ ىಈ
"UUSJCVUJPO3FQPSUJOHᶉ Ϩϙʔτͷૹ৴ ‣ <σόΠε> &WFOUMFWFMSFQPSUTΛૹ৴͢Δ ˞ίϯόʔδϣϯͷൃੜޙͰͳ͘ ɹҰఆൣғͷϥϯμϜͳ͕࣌ؒܦաͨ͋͠ͱʹ ɹૹ৴͞Ε·͢ ࠂωοτϫʔΫ
"UUSJCVUJPO3FQPSUJOHͷಛ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͠ͳ͕ΒࠂͷޮՌΛଌఆͰ͖Δ ‣ σόΠεͷ෦ͰΫϦοΫίϯόʔδϣϯͷܭଌΛ͓͜ͳ͏ ‣ ݸʑͷΠϕϯτ&WFOUMFWFMSFQPSUTͷܗͰఏڙ͞Ε ͦ͜ʹݸਓ͕ಛఆͰ͖ΔΑ͏ͳใؚ·Ε͍ͯͳ͍ ‣ ࠂΩϟϯϖʔϯશମͷޮՌΛΓ͍ͨ߹
ू͞Εͨσʔλͱͯ͠"HHSFHBUBCMFSFQPSUT͕ఏڙ͞ΕΔ
1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ 5PQJDT 1SPUFDUFE"VEJFODF"1* "UUSJCVUJPO3FQPSUJOH 4%,3VOUJNF
େม͓͍ͨͤͨ͠·ͨ͠ Α͏͘ΞϓϦͷ͓͕࢝·Γ·͢
4%,3VOUJNF ‣ ΞϓϦͰαʔυύʔςΟͷ4%,Λ ҆શʹ࣮ߦ͢ΔͨΊͷ৽͍͠ϥϯλΠϜڥ ‣ ϢʔβʔͷϓϥΠόγʔΛอޢ͠ ηΩϡϦςΟͱΞϓϦͷ҆ఆੑΛ্ͤ͞Δͷ͕ૂ͍ ‣ αʔυύʔςΟ4%,ͷఏڙऀͱ 4%,Λར༻͢ΔΞϓϦ։ൃऀͷํʹϝϦοτ͕͋Δ
ैདྷͷ4%,ར༻ํ๏ ‣ ΞϓϦ͔Β4%,Λݺͼग़͢ ‣ ΠϯελϯεΛੜ͢Δ ‣ TUBUJDϝιουΛݺͼग़͢ ‣ ݺͼग़͞Εͨ4%, ΞϓϦͱಉҰϓϩηεͰಈ࡞͢Δ
˞ը૾IUUQTEFWFMPQFSTHPPHMFDPNQSJWBDZTBOECPYSFMFWBODFTELSVOUJNFΑΓ
Կ͕ͳͷ͔ʁ ‣ ηΩϡϦςΟ໘ͷ ‣ 4%,ݺͼग़͠ݩͷΞϓϦ ͷҰ෦ ͱͯ͠ ৼΔ͏͜ͱ͕Ͱ͖ͯ͠·͏ ‣ ҆ఆੑͷ
‣ ΞϓϦͱ4%,͕ಉҰϓϩηε্Ͱಈ࡞͍ͯ͠ΔͨΊ 4%,ͷڍಈ͕ΞϓϦʹӨڹΛٴ΅͢͜ͱ͕͋Δ ͋Δ͍ͦͷٯ
ηΩϡϦςΟ໘ͷ ‣ ΞϓϦͱ4%,ͰϝϞϦۭؒΛڞ༗͍ͯ͠ΔͨΊ ཧ্ ΞϓϦ͕ѻ͍ͬͯΔσʔλΛ4%,͔ΒࢀরͰ͖Δ ‣ ΞϓϦઐ༻ͷετϨʔδྖҬʹ4%,͔ΒΞΫηεͰ͖Δ ‣ 4%,͕ΞϓϦͱಉͷݖݶͰಈ࡞͢Δ ‣
Ϣʔβʔͷڐ͕ඞཁͱͳΔݖݶΛཁ͢Δૢ࡞Ͱ ΞϓϦ͕ڐΛಘΕ4%,͔Βಉ༷ʹ࣮ߦͰ͖Δ
҆ఆੑͷ ‣ 4%,Ͱྫ֎͕ൃੜ͢ΔͱΞϓϦ͕ר͖ࠐ·ΕͯΫϥογϡ͢Δ ‣ ΞϓϦͱ4%,͕ϥΠϑαΠΫϧΛڞ༗͢ΔͨΊ 4%,͕ఏڙऀͷظͲ͓Γʹಈ࡞͠ͳ͍έʔε͕͋Δ ‣ ྫ ΞϓϦ͕όοΫάϥϯυʹճ͞Ε͍ͯΔͱ͖ʹ ɹɹ4%,ͷಈ࡞੍͕ݶ͞Εͯ͠·͏
4%,3VOUJNFͰͷ 4%,ར༻ํ๏ ‣ ΞϓϦͱผͷϓϩηεͰ 4%,͕ಈ࡞͢Δ ‣ ಈ࡞ͷࡍʹ͋Δఔͷ ੍Λड͚Δ ‣ ΞϓϦΠϯλʔϑΣΠεΛ
հͯ͠4%,Λૢ࡞͢Δ ˞ը૾IUUQTEFWFMPQFSTHPPHMFDPNQSJWBDZTBOECPYSFMFWBODFTELSVOUJNFΑΓ
ΞϓϦͱ4%,ͷΓͱΓ ‣ 4EL4BOECPY.BOBHFSMPBE4EL ‣ 4%,ΛΞϓϦͱผͷαϯυϘοΫεͰϩʔυͯ͠ 4%,͕ఏڙ͍ͯ͠Δ"1*Λ௨ͯ͠ૢ࡞͢Δ ‣ 4EL4BOECPY.BOBHFSSFRVFTU4VSGBDF1BDLBHF
‣ 4%,͕ࠂΛඳըͨ͠4VSGBDF1BDLBHFΛड͚औͬͯ ΞϓϦͰఆٛͨ͠4VSGBDF7JFXͷDIJMEͱͯ͠ઃఆ͢Δ
ΞϓϦͱ4%,ͷΓͱΓ ‣ 4EL4BOECPY.BOBHFSMPBE4EL ‣ 4%,ΛΞϓϦͱผͷαϯυϘοΫεͰϩʔυͯ͠ 4%,͕ఏڙ͍ͯ͠Δ"1*Λ௨ͯ͠ૢ࡞͢Δ ‣ 4EL4BOECPY.BOBHFSSFRVFTU4VSGBDF1BDLBHF
‣ 4%,͕ࠂΛඳըͨ͠4VSGBDF1BDLBHFΛड͚औͬͯ ΞϓϦͰఆٛͨ͠4VSGBDF7JFXͷDIJMEͱͯ͠ઃఆ͢Δ
MPBE4EL ࣮αϯϓϧᶃ // SdkSandboxManagerを取得する val manager = applicationContext.getSystemService( SdkSandboxManager::class.java
) // SDKの読み込みを要求する manager.loadSdk( "com.example.adnetwork", Bundle(), { obj: Runnable -> obj.run() }, object : OutcomeReceiver<SandboxedSdk, LoadSdkException> { override fun onResult(sandboxedSdk: SandboxedSdk) { mSandboxedSdk = sandboxedSdk } override fun onError(error: LoadSdkException) {} } ) // SDKを呼び出す // (※IAdNetworkSdkがAIDLで定義されているものとする) val binder: IBinder? = mSandboxedSdk.getInterface() val adNetworkSdk = IAdNetworkSdk.Stub.asInterface(binder) adNetworkSdk.showAd() ‣ HFU4ZTUFN4FSWJDF Ͱ 4EL4BOECPY.BOBHFSΛ औಘ͢Δ
MPBE4EL ࣮αϯϓϧᶄ // SdkSandboxManagerを取得する val manager = applicationContext.getSystemService( SdkSandboxManager::class.java
) // SDKの読み込みを要求する manager.loadSdk( "com.example.adnetwork", Bundle(), { obj: Runnable -> obj.run() }, object : OutcomeReceiver<SandboxedSdk, LoadSdkException> { override fun onResult(sandboxedSdk: SandboxedSdk) { mSandboxedSdk = sandboxedSdk } override fun onError(error: LoadSdkException) {} } ) // SDKを呼び出す // (※IAdNetworkSdkがAIDLで定義されているものとする) val binder: IBinder? = mSandboxedSdk.getInterface() val adNetworkSdk = IAdNetworkSdk.Stub.asInterface(binder) adNetworkSdk.showAd() ‣ MPBE4EL Λݺͼग़͢ ‣ ҾͷίʔϧόοΫͰ 4BOECPYFE4ELΛ ड͚औΔ͜ͱ͕Ͱ͖Δ
MPBE4EL ࣮αϯϓϧᶅ // SdkSandboxManagerを取得する val manager = applicationContext.getSystemService( SdkSandboxManager::class.java
) // SDKの読み込みを要求する manager.loadSdk( "com.example.adnetwork", Bundle(), { obj: Runnable -> obj.run() }, object : OutcomeReceiver<SandboxedSdk, LoadSdkException> { override fun onResult(sandboxedSdk: SandboxedSdk) { mSandboxedSdk = sandboxedSdk } override fun onError(error: LoadSdkException) {} } ) // SDKを呼び出す // (※IAdNetworkSdkがAIDLで定義されているものとする) val binder: IBinder? = mSandboxedSdk.getInterface() val adNetworkSdk = IAdNetworkSdk.Stub.asInterface(binder) adNetworkSdk.showAd() ‣ 4BOECPYFE4EL͔Β *#JOEFSΛऔಘ͢Δ ‣ औಘͨ͠*#JOEFSΛ 4%,ͷΠϯλʔϑΣΠεʹ ม͔ͯ͠Βૢ࡞͢Δ
ΞϓϦͱ4%,ͷΓͱΓ ‣ 4EL4BOECPY.BOBHFSMPBE4EL ‣ 4%,ΛΞϓϦͱผͷαϯυϘοΫεͰϩʔυͯ͠ 4%,͕ఏڙ͍ͯ͠Δ"1*Λ௨ͯ͠ૢ࡞͢Δ ‣ 4EL4BOECPY.BOBHFSSFRVFTU4VSGBDF1BDLBHF
‣ 4%,͕ࠂΛඳըͨ͠4VSGBDF1BDLBHFΛड͚औͬͯ ΞϓϦͰఆٛͨ͠4VSGBDF7JFXͷDIJMEͱͯ͠ઃఆ͢Δ
4VSGBDF1BDLBHF ࣮αϯϓϧᶃ // SdkSandboxManagerを取得する val manager = applicationContext.getSystemService( SdkSandboxManager::class.java )
// SurfacePackageを要求する Handler(Looper.getMainLooper()).post { val params = Bundle() params.putInt(EXTRA_WIDTH_IN_PIXELS, mClientView.getWidth()) params.putInt(EXTRA_HEIGHT_IN_PIXELS, mClientView.getHeight()) params.putInt(EXTRA_DISPLAY_ID, getDisplay()?.getDisplayId()!!) params.putBinder(EXTRA_HOST_TOKEN, mClientView.getHostToken()) manager.requestSurfacePackage( "com.example.adnetwork", params, { obj: Runnable -> obj.run() }, object : OutcomeReceiver<Bundle?, RequestSurfacePackageException?> { override fun onResult(response: Bundle) { Handler(Looper.getMainLooper()).post { val surfacePackage: SurfacePackage? = response.getParcelable( EXTRA_SURFACE_PACKAGE, SurfacePackage::class.java) mClientView.setChildSurfacePackage(surfacePackage!!) mClientView.setVisibility(View.VISIBLE) } } override fun onError(error: RequestSurfacePackageException) {} } ) } ‣ HFU4ZTUFN4FSWJDF Ͱ 4EL4BOECPY.BOBHFSΛ औಘ͢Δ
4VSGBDF1BDLBHF ࣮αϯϓϧᶄ // SdkSandboxManagerを取得する val manager = applicationContext.getSystemService( SdkSandboxManager::class.java )
// SurfacePackageを要求する Handler(Looper.getMainLooper()).post { val params = Bundle() params.putInt(EXTRA_WIDTH_IN_PIXELS, mClientView.getWidth()) params.putInt(EXTRA_HEIGHT_IN_PIXELS, mClientView.getHeight()) params.putInt(EXTRA_DISPLAY_ID, getDisplay()?.getDisplayId()!!) params.putBinder(EXTRA_HOST_TOKEN, mClientView.getHostToken()) manager.requestSurfacePackage( "com.example.adnetwork", params, { obj: Runnable -> obj.run() }, object : OutcomeReceiver<Bundle?, RequestSurfacePackageException?> { override fun onResult(response: Bundle) { Handler(Looper.getMainLooper()).post { val surfacePackage: SurfacePackage? = response.getParcelable( EXTRA_SURFACE_PACKAGE, SurfacePackage::class.java) mClientView.setChildSurfacePackage(surfacePackage!!) mClientView.setVisibility(View.VISIBLE) } } override fun onError(error: RequestSurfacePackageException) {} } ) } ‣ SFRVFTU4VSGBDF1BDLBHF ʹ 4VSGBDF7JFXͷαΠζ *% )PTU5PLFOΛ͢
4VSGBDF1BDLBHF ࣮αϯϓϧᶅ // SdkSandboxManagerを取得する val manager = applicationContext.getSystemService( SdkSandboxManager::class.java )
// SurfacePackageを要求する Handler(Looper.getMainLooper()).post { val params = Bundle() params.putInt(EXTRA_WIDTH_IN_PIXELS, mClientView.getWidth()) params.putInt(EXTRA_HEIGHT_IN_PIXELS, mClientView.getHeight()) params.putInt(EXTRA_DISPLAY_ID, getDisplay()?.getDisplayId()!!) params.putBinder(EXTRA_HOST_TOKEN, mClientView.getHostToken()) manager.requestSurfacePackage( "com.example.adnetwork", params, { obj: Runnable -> obj.run() }, object : OutcomeReceiver<Bundle?, RequestSurfacePackageException?> { override fun onResult(response: Bundle) { Handler(Looper.getMainLooper()).post { val surfacePackage: SurfacePackage? = response.getParcelable( EXTRA_SURFACE_PACKAGE, SurfacePackage::class.java) mClientView.setChildSurfacePackage(surfacePackage!!) mClientView.setVisibility(View.VISIBLE) } } override fun onError(error: RequestSurfacePackageException) {} } ) } ‣ SFRVFTU4VSGBDF1BDLBHF ͷ ίʔϧόοΫͰ 4VSGBDF1BDLBHFΛड͚औΓ ΞϓϦͷ4VSGBDF7JFXͷ DIJMEͱͯ͠ઃఆ͢Δ
ैདྷͷ৴Ϟσϧ ‣ 4%,.BWFOϦϙδτϦͳͲʹ ެ։͞ΕΔ ‣ ΞϓϦ։ൃऀ(SBEMFͳͲͰ 4%,ΛΞϓϦʹΈࠐΜ্ͩͰ ετΞʹΞοϓϩʔυ͢Δ ˞ը૾IUUQTEFWFMPQFSTHPPHMFDPNQSJWBDZTBOECPYSFMFWBODFTELSVOUJNFΑΓ
Կ͕ͳͷ͔ʁ ‣ ಋೖ͞Ε͍ͯΔ4%,ͷόʔδϣϯΞοϓ͕ ΞϓϦͷόʔδϣϯΞοϓͷλΠϛϯάʹґଘ͢Δ ‣ 4%,ͷॏཁͳόʔδϣϯΞοϓ͕ଈ࠲ʹऔΓࠐ·Εͣʹ ө·ͰʹλΠϜϥά͕ൃੜ͢ΔՄೳੑ͕͋Δ ‣ ΞϓϦͱ4%,͕ಉҰϥΠϒϥϦͷผόʔδϣϯΛࢀর͍ͯ͠Δ߹ ͦΕͧΕͷޓੑʹΑͬͯґଘؔΛղܾͰ͖ͳ͍έʔε͕͋Δ
4%,3VOUJNFͰͷ ৴Ϟσϧ ‣ 4%,ετΞͰެ։͞ΕΔ ‣ ΞϓϦࢀর͢Δ4%,Λ ࢦఆ্ͨ͠ͰετΞʹެ։͞ΕΔ ‣ ϢʔβʔετΞ͔Β ΞϓϦͱ4%,ΛΠϯετʔϧ͢Δ
˞ը૾IUUQTEFWFMPQFSTHPPHMFDPNQSJWBDZTBOECPYSFMFWBODFTELSVOUJNFΑΓ
4%,3VOUJNFͷಛ ‣ ΞϓϦͱ4%,ΛผϓϩηεͰಈ࡞ͤ͞Δ͜ͱʹΑΓ 4%,͔ΒͷΞϓϦσʔλͷΞΫηεΛ͙ ‣ 4%,ΛετΞͰ͢Δ͜ͱʹΑΓ ΞϓϦͱ4%,ͷϦϦʔεαΠΫϧΛ͢Δ ‣ ΞϓϦͱಠཱͯ͠4%,Λߋ৽Ͱ͖Δ ‣
ΞϓϦͷ։ൃ࣌ʹ4%,ͱΓͯ͠όʔδϣϯཧͰ͖Δ
"HFOEB ᶃ 1SJWBDZ4BOECPYͱʁ ᶄ 1SJWBDZ4BOECPYPO"OESPJEͱʁ ᶅ 1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ ᶆ 1SJWBDZ4BOECPYPO"OESPJE͕Ҿ͖ى͜͢มԽ ᶇ
·ͱΊ
5PQJDT͕Ҿ͖ى͜͢มԽ ‣ ϢʔβʔͷϓϥΠόγʔอޢ͕ڧԽ͞ΕΔ ‣ ࠂ*%ͷґଘ͕ͳ͘ͳΔ ‣ σʔλΛσόΠεͷ෦Ͱॲཧ͢Δ ‣ σʔλͷϢʔβʔίϯτϩʔϧ͕ڧԽ͞ΕΔ ‣
τϐοΫϢʔβʔʹΑΔ֬ೝ আ͕Մೳ ‣ ࠂઓུ͕τϐοΫΛલఏͱͨ͠ͷʹมΘΔ
1SPUFDUFE"VEJFODF"1*͕Ҿ͖ى͜͢มԽ ‣ ϢʔβʔͷϓϥΠόγʔอޢ͕ڧԽ͞ΕΔ ‣ ࠂ*%ͷґଘ͕ͳ͘ͳΔ ‣ σʔλΛσόΠεͷ෦Ͱॲཧ͢Δ ‣ ࠂબఆͷҰ෦͕σόΠεͰ࣮ߦ͞ΕΔ ‣
ࠂઓུ͕1SPUFDUFE"VEJFODF"1*Λલఏͱͨ͠ͷʹมΘΔ
"UUSJCVUJPO3FQPSUJOH͕Ҿ͖ى͜͢มԽ ‣ ϢʔβʔͷϓϥΠόγʔอޢ͕ڧԽ͞ΕΔ ‣ ࠂ*%ͷґଘ͕ͳ͘ͳΔ ‣ σʔλΛσόΠεͷ෦Ͱॲཧ͢Δ ‣ σʔλͷ҆શੑ্͕͢Δ ‣
ूܭσόΠεͷ෦ͱ"HHSFHBUJPO4FSWJDFͰ͓͜ͳΘΕΔ ‣ ࠂઓུ͕"UUSJCVUJPO3FQPSUJOHΛલఏͱͨ͠ͷʹมΘΔ
4%,3VOUJNF͕Ҿ͖ى͜͢มԽ ηΩϡϦςΟͷڧԽ ґଘؔཧͷվળ ։ൃϓϩηεͷޮԽ Ϣʔβʔମݧͷ্
ηΩϡϦςΟͷڧԽ ‣ ΞϓϦͱ4%,͕͞ΕͨڥͰಈ࡞͢Δ ‣ 4%,͔ΒΞϓϦͷσʔλʹΞΫηεͰ͖ͳ͍ ‣ 4%,ѱҙͷ͋Δߦಈ͕औΓͮΒ͍ڥͰಈ࡞͢Δ ‣ ΞϓϦͱ4%,͕ผͷݖݶͰಈ࡞͢Δ
‣ Ϣʔβʔ͕ҙਤ͍ͯ͠ͳ͍ 4%,ʹڐՄͨͭ͠Γ͕ͳ͍ ػೳͷΞΫηεΛ͙͜ͱ͕Ͱ͖Δ
ґଘؔཧͷվળ ‣ ΞϓϦͱ4%,͕ͦΕͧΕผͷґଘؔΛ࣋ͭ ‣ ֎෦ϥΠϒϥϦͷڝ߹ͳͲͷΛආ͚Δ͜ͱ͕Ͱ͖Δ ‣ 4%,ΛΞοϓσʔτ͢Δ͜ͱʹΑΓ ΞϓϦશମʹӨڹΛٴ΅ͯ͠͠·͏ϦεΫ͕ݮ͢Δ
։ൃϓϩηεͷޮԽ ‣ ΞϓϦ։ൃऀʹΑΔ4%,ͷόʔδϣϯཧͷίετ͕ݮ͞ΕΔ ‣ 4%,ͷΞοϓσʔτΛ͓͜ͳ͏ख͕ؒܰݮ͞ΕΔ ‣ ޓੑΛҡ࣋͢ΔͨΊͷ࡞ۀ͕ݮ͞ΕΔ ‣ 4%,ͷΠϯλʔϑΣΠε͕
͋Δఔ ౷Ұ͞ΕΔ ‣ ෳͷ4%,Λಉ࣌ʹར༻͢Δࡍʹޮతͳ࣮͕Ͱ͖Δ
Ϣʔβʔମݧͷ্ ‣ 4%,ͷΞοϓσʔτ͕εϜʔζʹద༻Ͱ͖Δ ‣ ࠷৽ͷ4%,Λར༻͘͢͠ͳΔͨΊ ݁Ռͱͯ͠ΞϓϦͷ৴པੑ্͢Δ ‣ 4%,ʹॏେͳ͕ൃੜͨ͠߹मਖ਼Λద༻͍͢͠
"HFOEB ᶃ 1SJWBDZ4BOECPYͱʁ ᶄ 1SJWBDZ4BOECPYPO"OESPJEͱʁ ᶅ 1SJWBDZ4BOECPYPO"OESPJEͷओཁίϯϙʔωϯτ ᶆ 1SJWBDZ4BOECPYPO"OESPJE͕Ҿ͖ى͜͢มԽ ᶇ
·ͱΊ
·ͱΊ ‣ 1SJWBDZ4BOECPYPO"OESPJEʜʜ ‣ ࠂ*%ʹཔΒͣʹޮՌͷߴ͍ࠂΛ৴͢Δ͜ͱ͕Ͱ͖Δ ‣ ࠂͷύϑΥʔϚϯεΛ্͛ΔͨΊͷΞϓϩʔν͕มΘΔ ‣ ϓϥΠόγʔͷอޢΛத৺ʹ"OESPJEΞϓϦͷࠂΛ࠶ఆٛ͠ ϢʔβʔͱࠂओͷํʹརӹΛͨΒ͢
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ ‣ ࢀߟࢿྉ ‣ "OESPJE͚ の ϓϥΠόγʔαϯυϘοΫε ‣ IUUQTQSJWBDZTBOECPYDPNJOUMKB@KQBOESPJE ‣
ϓϥΠόγʔαϯυϘοΫεͷಈըϥΠϒϥϦ ‣ IUUQTEFWFMPQFSTHPPHMFDPNQSJWBDZTBOECPYSFTPVSDFTWJEFPT IMKB ‣ 4%,3VOUJNFBOE1SJWBDZ1SFTFSWJOH"1*T3FQPTJUPSZ ‣ IUUQTHJUIVCDPNBOESPJEQSJWBDZTBOECPYTBNQMFT