Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Privacy Sandbox on Android / DroidKaigi 2024
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
7pairs
September 12, 2024
Technology
1.1k
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.3k
テキストマイニングによるプロ野球の順位予想 / Baseball Play Study 2020 Winter
7pairs
0
570
2020年の振り返りとBaseball Play Studyの振り返り / Jisyupy 29
7pairs
0
390
Because Python is there. / Jisyupy 27
7pairs
0
530
野球好きのための快適なプレゼンテーション環境の構築 / 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
5.9k
テキストマイニングによる新外国人選手の分析 / Baseball Play Study 2019 Spring
7pairs
0
3k
テキストマイニングによる応援歌の分析 / Baseball Play Study 2018 Winter
7pairs
0
2.3k
Other Decks in Technology
See All in Technology
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
気づかぬうちにセキュリティ負債を生むAPIキー運用
sgwrmctk
0
180
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
16
4k
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
240
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.3k
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
140
Android の公式 Skill / Android skills
yanzm
0
160
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.5k
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
110
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
490
Ruling the World: When Life Gets Gamed
codingconduct
0
260
Google's AI Overviews - The New Search
badams
0
1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
How GitHub (no longer) Works
holman
316
150k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
860
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
140
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