Yappli Tech Conference 2022 の発表資料です!
▽イベントページ▽ https://yappli.connpass.com/event/259001/
ϨϏϡʔμΠΞϩάػೳͷऔΓΈ~ Androidฤ ~SESSION 8
View Slide
"OESPJEΤϯδχΞ ۙ౻՚χοΫωʔϜ;ͳͪ!@IVOBDIJ5XJUUFSझຯҰॹʹॅΜͰ͍ΔೣΛѪͰΔ͜ͱߍͷ͓େͰٕज़ίϛϡχςΟͷࢧԉ %SPJE,BJHJͷӡӦϝϯόʔͦͷଞࣗݾհ
INDEX01020304എܠϨϏϡʔμΠΞϩάػೳAndroidͰͷϨϏϡʔμΠΞϩάػೳͷ࣮·ͱΊ
എܠ
ΫϥΠΞϯτΞϓϦશମͰ ϨϏϡʔ͕͓߹ͤͷΑ͏ʹ ΘΕετΞϨϏϡʔฏۉ͕ ͘ͳΔʹ͋ͬͨϨϏϡʔ͕͍ͱɺ μϯϩʔυݕࡧॱҐʹӨڹ͢ΔʮϨϏϡʔͷฏۉΛ্͍͛ͨɾ૿͍ͨ͠ʯ ͱཁ͕͋ͬͨࡍʹԠ͑Δ͜ͱ͕ग़དྷͳ͔ͬͨഎܠ
ϨϏϡʔμΠΞϩάػೳͦ͜Ͱ։ൃ͞Εͨͷ͕
ϨϏϡʔμΠΞϩάػೳϨϏϡʔμΠΞϩάػೳͱʁϢʔβʔʹΞϓϦͰΞϓϦͷϨϏϡʔͯ͠ Β͏ͨΊͷػೳ ࠓͷ݄ʹϦϦʔεࡁΈతʮϢʔβʔʹΑΓଟ͘ͷϨϏϡʔߘػձΛ࡞Δ͜ͱʯ❏ ΞϓϦΛΑͬͯ͘͘Ε͍ͯΔϢʔβʔʹ ରͯ͠දࣔ❏ ϨϏϡʔ݁Ռɺ"QQ4UPSF(PPHMF1MBZ4UPSFʹө❏ ެࣜ"1*Λ༻͍࣮ͯ "OESPJE(PPHMF1MBZ*O"QQ3FWJFX"1* J044,4UPSF3FWJFX$POUSPMMFS
ϨϏϡʔμΠΞϩάػೳಋೖͨ݁͠Ռ
Android্Ͱͷ ϨϏϡʔμΠΞϩάػೳͷ࣮
"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮❏ ΞΫςΟϒΛܭଌ͢Δ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢ΔΫϩʔζυϞʔυΛ࡞Δ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ❏ μΠΞϩάΛදࣔ͢Δ❏ ಈ͍͍ͯΔ͔ςετ͢ΔɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢ΔManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialogɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏
ɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮❏ ΞΫςΟϒΛܭଌ͢Δ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢ΔΫϩʔζυϞʔυΛ࡞Δ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ❏ μΠΞϩάΛදࣔ͢Δ❏ ಈ͍͍ͯΔ͔ςετ͢ΔManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialogɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏
"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢ΔແҋʹμΠΞϩάΛग़͍͍ͤ ͱ͍͏Θ͚Ͱͳ͍ϠϓϦͰ৭ʑͳΞϓϦ͕͋ΔͨΊ ൚༻తʹ͑Δࢦඪ͕ඞཁΞΫςΟϒϢʔβʔ͕ΞϓϦΛ։͍ͨ࣌ʹදࣔ ΞΫςΟϒϢʔβʔʹिؒʹҰఆճҎ্ΞϓϦΛར༻ͨ͠ํ
μΠΞϩάΛग़͢·ͰͷྲྀΕΞΫςΟϒͳΛܭଌઃఆใͷऔಘΞΫςΟϒϢʔβʔԽμΠΞϩάΛදࣔͤ͞Δ ϑϥάΛཱͯΔϨϏϡʔμΠΞϩάΛදࣔOिΞΫςΟϒ ϗʔϜը໘ىಈຊ൪Ϟʔυͷ࣌ͷΈ ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏͔͕(PPHMFͤͳͨΊ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
μΠΞϩάΛग़͢·ͰͷྲྀΕΞΫςΟϒͳΛܭଌઃఆใͷऔಘΞΫςΟϒϢʔβʔԽμΠΞϩάΛදࣔͤ͞Δ ϑϥάΛཱͯΔϨϏϡʔμΠΞϩάΛදࣔn/ि ΞΫςΟϒ ϗʔϜը໘ىಈ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ❏ ϨϏϡʔμΠΞϩά͕ઃఆ͞ΕͨޙʹɺॳΊͯΞϓϦ͕ىಈ͞ΕͨΛिؒͷΧϯτΛ͢Δج४ͷ༵ͱ͢Δ❏ ج४ͷ༵ʙ࣍ճͷج४ͷ༵ͷલ·ͰͷिؒͰԿΞΫςΟϒʹͳ͔ͬͨΧϯτ❏ ΞΫςΟϒͱఆ͢ΔλΠϛϯά❏ ΞϓϦىಈ࣌❏ όοΫάϥϯυ͔Β෮ؼ݄࣌Րਫۚ
μΠΞϩάΛग़͢·ͰͷྲྀΕΞΫςΟϒͳΛܭଌઃఆใͷऔಘΞΫςΟϒϢʔβʔԽμΠΞϩάΛදࣔͤ͞Δ ϑϥάΛཱͯΔϨϏϡʔμΠΞϩάΛදࣔOिΞΫςΟϒ ϗʔϜը໘ىಈ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ❏ ΞΫςΟϒճଆͰอଘ❏ αʔό͔Βऔಘ͢Δઃఆใ❏ ϨϏϡʔμΠΞϩάͷ0/0''❏ ԿिͰΞΫςΟϒϢʔβʔͱ͢Δ͔❏ ද͍ࣔͨ͠μΠΞϩάͷϞʔυ❏ ΫϩʔζυϞʔυ❏ ຊ൪ʢ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏ʣϞʔυ
μΠΞϩάΛग़͢·ͰͷྲྀΕΞΫςΟϒͳΛܭଌઃఆใͷऔಘΞΫςΟϒϢʔβʔԽμΠΞϩάΛදࣔͤ͞Δ ϑϥάΛཱͯΔϨϏϡʔμΠΞϩάΛදࣔOिΞΫςΟϒ ϗʔϜը໘ىಈຊ൪Ϟʔυͷ࣌ͷΈ ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏͔͕(PPHMFͤͳͨΊ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ❏ μΠΞϩάΛදࣔͤ͞ΔϑϥάଆͰอଘ
μΠΞϩάΛग़͢·ͰͷྲྀΕΞΫςΟϒͳΛܭଌઃఆใͷऔಘΞΫςΟϒϢʔβʔԽμΠΞϩάΛදࣔͤ͞Δ ϑϥάΛཱͯΔϨϏϡʔμΠΞϩάΛදࣔn/ि ΞΫςΟϒ ϗʔϜը໘ىಈຊ൪Ϟʔυͷ࣌ͷΈ ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏͔͕(PPHMFͤͳͨΊ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ❏ ϗʔϜը໘ىಈ࣌ʹຖճϑϥάཱ͕͍ͬͯΔ͔֬ೝ❏ ϑϥάཱ͕͍ͬͯΔ߹ μΠΞϩάΛදࣔ❏ μΠΞϩάදࣔޙɺ อଘ͍ͯͨ͠ใΛॳظԽ
อଘ͓͖͍ͯͨ͠σʔλ %BUB4UPSFΛ͍อଘManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialog"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
อଘ͓͖͍ͯͨ͠σʔλ%BUB4UPSFΛ͍อଘManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialog"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialog"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ɾΧϯτΛ1ʹɾΧϯτελʔτΛߋ৽ΞΫςΟϒΛܭଌ͢Δ6TF$BTFͰΧϯτΛ૿͔͢Ͳ͏͔Λஅ͢ΔίʔυΛॻ͘ΞΫςΟϒʹͳͬͨ͢Ͱʹϑϥά͕ ཱ͍ͬͯΔԿ͠ͳ͍ࠓͷΛΧϯτ͠ ऴ͍͑ͯΔલճͷΧϯτελʔτ͔Β1िؒ Ҏ্ཱ͍ͬͯΔϑϥάΛཱͯΔ ΧϯτΛ աͨ͠ΧϯτΛ1૿͢ϑϥάΛཱͯΔManagerRepositoryUseCase"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ❏ 6TF$BTFʹର͢ΔςετΛॻ͍ͨ❏ ߦఔͷςετίʔυྔ❏ ςετ͕ͰͰ͖ͳ͍෦͋ΔͨΊɺ2"͍ͯͨͩ͘͠લʹͰ͖ΔݶΓόά͕ͳ͍ঢ়ଶʹ͔ͨͬͨ͠❏ ςετ༰❏ τϦΨʔͷछྨ͕มߋ͞Εͨ࣌ʹॳظԽ͕͞Ε͍ͯΔ͔❏ μΠΞϩάΛදࣔͤ͞Δϑϥά͕͢Ͱʹཱ͍ͬͯΔ߹ʹߋ৽͕͔͔Βͳ͍͔❏ ि಄͔ΒिؒҎ্͕ܦա͍ͯͨ͠ʢिؒʣ❏ ि಄͔ΒिؒҎ্͕ܦա͍ͯͨ͠ʢिؒʣ❏ ि಄͔ΒिؒҎͰલճΞΫςΟϒʹͳ͔ͬͯΒҎ্ܦաʢઃఆͨ͠Ҏʣ❏ ि಄͔ΒिؒҎͰલճΞΫςΟϒʹͳ͔ͬͯΒҎ্ܦաʢઃఆͨ͠ʹ౸ୡʣ❏ ि಄͔ΒिؒҎͰલճΞΫςΟϒʹͳͬͨͱಉ͡ʹΞΫςΟϒʹͳͬͨ ͳͲ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ΞΫςΟϒʹͳͬͨλΠϛϯάΛ6TF$BTFʹΒͤΔManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialog// Managerͷίʔυ/**ΞϓϦىಈ࣌ or όοΫάϥϯυ͔Βͷ෮ؼ࣌ʹ࣮ߦ͢Δॲཧ */fun onApplicationEnterForeground(application: YLApplication) {application.runOnMainActivity {it.lifecycleScope.launchWhenResumed {// ϨϏϡʔμΠΞϩά༻ʹΞΫςΟϒΛΧϯτ͢ΔuseCase.updateActiveTriggerStatus()ɹɹ// ϨϏϡʔμΠΞϩάͷදࣔshowReviewDialogIfNeed(it)}}}"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ΞΫςΟϒʹͳͬͨλΠϛϯάΛ6TF$BTFʹΒͤΔManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialog"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ManagerActivity ApplicationRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialog"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮μΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢Δ
ΫϩʔζυϞʔυΛ࡞Δ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮❏ ΞΫςΟϒΛܭଌ͢Δ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ❏ μΠΞϩάΛදࣔ͢Δ❏ ಈ͍͍ͯΔ͔ςετ͢ΔɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛཧ͢ΔManagerActivityRepositoryDataSourceUseCaseIn-App-ReviewAPITestDialogɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏
ྑ͍ޮՌ͕ग़Δͷ͔Θ͔Βͣ ΫϥΠΞϯτʹקΊΒΕͳ͍ΫϩʔζυϞʔυΛ࡞❏ μΠΞϩά৽ͨʹ࡞❏ ެࣜ"1*༻͠ͳ͍❏ ϨϏϡʔ݁ՌετΞͷϨϏϡʔʹө͞Εͳ͍❏ ϨϏϡʔ݁Ռࣾͷαʔόʹอଘ͠ੳ˞ϨϏϡʔμΠΞϩάػೳͷಋೖʹࡍͯ͠ɺॳظௐࠪͷͨΊʹ࣮ɻݱࡏ༻͍ͯ͠ͳ͍ɻ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮ΫϩʔζυϞʔυΛ࡞Δ
(PPHMF1MBZ*O"QQ3FWJFX"1* ❏ ϢʔβʔΛΞϓϦ͔ΒΕͤͣ͞ʹ1MBZετΞͷධՁͱϨϏϡʔΛૹ৴͢ΔΑ͏ଅ͢͜ͱ͕Ͱ͖Δ"1*❏ "OESPJEʢ"1*ϨϕϧʣҎ߱ɺ(PPHMF1MBZετΞ͕Πϯετʔϧ͞Ε͍ͯΔͰ༻ՄೳIUUQTEFWFMPQFSBOESPJEDPNHVJEFQMBZDPSFJOBQQSFWJFX'JHVSFࢀর"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏༻ํ๏ઃܭͷΨΠυϥΠϯ ʹै͏ඞཁ͕͋Δ μΠΞϩάͷՃɺμΠΞϩάΛग़͢લʹྑ͍ධՁΛଅ͢Α͏ͳڍಈΛ͢Δͷ/(Ϣʔβʔ͕ϨϏϡʔͯ͘͠Ε͔ͨͲ͏͔Λ ΞϓϦଆͰΔ͜ͱͰ͖ͳ͍μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏͔ ΞϓϦଆͰஅͰ͖ͳ͍ͷͰ දࣔ͞Εͳͯ͘ͳ͍Α͏ͳ෦Ͱ දࣔͤ͞Δඞཁ͕͋Δ
μΠΞϩάΛදࣔ͢Δʢຊ൪Ϟʔυʣσόοά࣌ͱຊ൪࣌Ͱ.BOBHFSΛม͑Δ 'BLF3FWJFX.BOBHFSΛ͏ͱSFRVFTU3FWJFX'MPXͰৗʹِͷ3FWJFX*OGPΦϒδΣΫτΛఏڙͯ͠ޭεςʔλεΛฦͯ͘͠ΕΔManagerActivityUseCase"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏
ಈ͍͍ͯΔ͔ςετ͢Δ❏ σόοά࣌❏ ઌఔͷίʔυͰॻ͍ͨΑ͏ʹ-PHΛग़ྗ͠ޭ͍ͯ͠Δ͔அ͢Δ❏ ຊ൪ڥ࣌❏ (PHHMF1MBZͷ෦ΞϓϦڞ༗Λͬͨ❏ ϨϏϡʔૹ৴Ͱ͖ͳ͍͕ɺμΠΞϩάදࣔ͞ΕΔ"OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮(PPHMF1MBZ*O"QQ3FWJFX"1*Λ͏
·ͱΊ
ࠓճɺ"OESPJEͷϨϏϡʔμΠΞϩάͷϠϓϦͰͷ࣮ʹ͍ͭͯհ͠·ͨ͠ɻ ϨϏϡʔμΠΞϩάΛ௨ͯ͡ϠϓϦΞϓϦΛѪ༻ͯ͘͠Ε͍ͯΔϢʔβʔ͔ΒͷΛΔ͜ͱ͕Ͱ͖ΔΑ͏ʹ🎉ϓϩδΣΫτΛ௨ֶͯͨ͜͠ͱ❏ ͕࣮ࣗͨ͠ͷͰޮՌ͕ग़Δͱخ͍͠❏ λεΫͷΓ͚ཧͷܦݧ͕Ͱ͖ͨ❏ ςετΛॻ͘͜ͱɺόάΛݮΒ͚ͩ͢Ͱͳ͘ɺΠϯγσϯτݪҼͷௐࠪʹʹཱͭ·ͱΊ