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
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.5k
テキストマイニングによるプロ野球の順位予想 / 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
3.1k
テキストマイニングによる応援歌の分析 / Baseball Play Study 2018 Winter
7pairs
0
2.4k
Other Decks in Technology
See All in Technology
ダッシュボード"開発"について 〜使われるダッシュボードのつくりかた〜
kimichan
0
200
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
280
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
610
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
940
GoでCコンパイラを作った話
repunit
0
150
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
220
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
420
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
320
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
140
人とエージェントが高め合う協業設計
kintotechdev
0
750
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
2
530
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Facilitating Awesome Meetings
lara
57
7k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
A Tale of Four Properties
chriscoyier
163
24k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
Scaling GitHub
holman
464
140k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
310
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
250
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
340
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