Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レビューダイアログ機能の取り組みAndroid編 / Review Dialog for An...

Avatar for Hunachi Hunachi
October 11, 2022

レビューダイアログ機能の取り組みAndroid編 / Review Dialog for Android

Yappli Tech Conference 2022 の発表資料です!

▽イベントページ▽
https://yappli.connpass.com/event/259001/

Avatar for Hunachi

Hunachi

October 11, 2022
Tweet

More Decks by Hunachi

Other Decks in Technology

Transcript

  1. ΫϥΠΞϯτΞϓϦશମͰ 
 ϨϏϡʔ͕͓໰߹ͤͷΑ͏ʹ 
 ࢖ΘΕετΞϨϏϡʔฏۉ఺͕ 
 ௿͘ͳΔ܏޲ʹ͋ͬͨ ϨϏϡʔ͕௿͍ͱɺ 
 μ΢ϯϩʔυ཰΍

    ݕࡧॱҐʹӨڹ͢Δ ʮϨϏϡʔͷฏۉ఺Λ ্͍͛ͨɾ૿΍͍ͨ͠ʯ 
 ͱཁ๬͕͋ͬͨࡍʹ Ԡ͑Δ͜ͱ͕ग़དྷͳ͔ͬͨ എܠ
  2. ϨϏϡʔμΠΞϩάػೳϨϏϡʔμΠΞϩάػೳͱ͸ʁ ϢʔβʔʹΞϓϦ಺ͰΞϓϦͷϨϏϡʔͯ͠ 
 ΋Β͏ͨΊͷػೳ 
 ࠓ೥ͷ݄ʹϦϦʔεࡁΈ ໨త͸ʮϢʔβʔʹΑΓଟ͘ͷϨϏϡʔ౤ߘػձ Λ࡞Δ͜ͱʯ ❏ ΞϓϦΛΑ͘࢖ͬͯ͘Ε͍ͯΔϢʔβʔʹ

    
 ରͯ͠දࣔ ❏ ϨϏϡʔ݁Ռ͸ɺ"QQ4UPSF΍(PPHMF 1MBZ4UPSFʹ൓ө ❏ ެࣜ"1*Λ༻͍࣮ͯ૷ 
 "OESPJE(PPHMF1MBZ*O"QQ3FWJFX"1* 
 J044,4UPSF3FWJFX$POUSPMMFS
  3. "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷ ❏ ΞΫςΟϒ཰Λܭଌ͢Δ ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ ΫϩʔζυϞʔυΛ࡞Δ ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ ❏ μΠΞϩάΛදࣔ͢Δ

    ❏ ಈ͍͍ͯΔ͔ςετ͢Δ ɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ Manager Activity Repository DataSource UseCase In-App-Review API TestDialog ɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏
  4. ɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷ ❏ ΞΫςΟϒ཰Λܭଌ͢Δ ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ ΫϩʔζυϞʔυΛ࡞Δ ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ ❏

    μΠΞϩάΛදࣔ͢Δ ❏ ಈ͍͍ͯΔ͔ςετ͢Δ Manager Activity Repository DataSource UseCase In-App-Review API TestDialog ɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏
  5. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ O೔िΞΫςΟϒ ϗʔϜը໘ىಈ

    ຊ൪Ϟʔυͷ࣌ͷΈ 
 ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏ ͔͕(PPHMF೚ͤͳͨΊ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  6. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ n೔/ि ΞΫςΟϒ

    ϗʔϜը໘ىಈ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ ❏ ϨϏϡʔμΠΞϩά͕ઃఆ͞ΕͨޙʹɺॳΊͯ ΞϓϦ͕ىಈ͞Εͨ೔ΛिؒͷΧ΢ϯτΛ͢ Δج४ͷ༵೔ͱ͢Δ ❏ ج४ͷ༵೔ʙ࣍ճͷج४ͷ༵೔ͷલ೔·Ͱͷ िؒͰԿ೔ΞΫςΟϒʹͳ͔ͬͨΧ΢ϯτ ❏ ΞΫςΟϒͱ൑ఆ͢ΔλΠϛϯά ❏ ΞϓϦىಈ࣌ ❏ όοΫάϥ΢ϯυ͔Β෮ؼ࣌ ೔݄Րਫ໦ۚ౔
  7. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ O೔िΞΫςΟϒ ϗʔϜը໘ىಈ

    "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ ❏ ΞΫςΟϒճ਺͸୺຤ଆͰอଘ ❏ αʔό͔Βऔಘ͢Δઃఆ৘ใ ❏ ϨϏϡʔμΠΞϩάͷ0/0'' ❏ Կ೔िͰΞΫςΟϒϢʔβʔͱ͢Δ͔ ❏ ද͍ࣔͨ͠μΠΞϩάͷϞʔυ ❏ ΫϩʔζυϞʔυ ❏ ຊ൪ʢ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏ʣϞʔ υ
  8. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ O೔िΞΫςΟϒ ϗʔϜը໘ىಈ

    ຊ൪Ϟʔυͷ࣌ͷΈ 
 ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏ ͔͕(PPHMF೚ͤͳͨΊ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  9. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ O೔िΞΫςΟϒ ϗʔϜը໘ىಈ

    ຊ൪Ϟʔυͷ࣌ͷΈ 
 ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏ ͔͕(PPHMF೚ͤͳͨΊ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ ❏ μΠΞϩάΛදࣔͤ͞Δϑϥά΋ ୺຤ଆͰอଘ
  10. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ n೔/ि ΞΫςΟϒ

    ϗʔϜը໘ىಈ ຊ൪Ϟʔυͷ࣌ͷΈ 
 ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏ ͔͕(PPHMF೚ͤͳͨΊ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ ❏ ϗʔϜը໘ىಈ࣌ʹຖճϑϥά͕ ཱ͍ͬͯΔ͔֬ೝ ❏ ϑϥάཱ͕͍ͬͯΔ৔߹͸ 
 μΠΞϩάΛදࣔ ❏ μΠΞϩάදࣔޙɺ 
 อଘ͍ͯͨ͠৘ใΛॳظԽ
  11. μΠΞϩάΛग़͢·ͰͷྲྀΕ ΞΫςΟϒͳ೔਺Λܭଌ ઃఆ৘ใͷऔಘ ΞΫςΟϒϢʔβʔԽ μΠΞϩάΛදࣔͤ͞Δ 
 ϑϥάΛཱͯΔ ϨϏϡʔμΠΞϩάΛදࣔ O೔िΞΫςΟϒ ϗʔϜը໘ىಈ

    ຊ൪Ϟʔυͷ࣌ͷΈ 
 ˞μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏ ͔͕(PPHMF೚ͤͳͨΊ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  12. อଘ͓͖͍ͯͨ͠σʔλ͸ 
 %BUB4UPSFΛ࢖͍อଘ Manager Activity Repository DataSource UseCase In-App-Review API

    TestDialog "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  13. ɾΧ΢ϯτΛ1ʹ ɾΧ΢ϯτελʔτ೔ Λߋ৽ ΞΫςΟϒ཰Λܭଌ͢Δ 6TF$BTFͰΧ΢ϯτΛ૿΍͔͢Ͳ͏͔Λ൑அ͢ΔίʔυΛॻ͘ ΞΫςΟϒʹͳͬͨ ͢Ͱʹϑϥά͕ 
 ཱ͍ͬͯΔ Կ΋͠ͳ͍

    ࠓ೔ͷ෼Λ Χ΢ϯτ͠ 
 ऴ͍͑ͯΔ લճͷΧ΢ϯτ ελʔτ೔͔Β1िؒ 
 Ҏ্ཱ͍ͬͯΔ ϑϥάΛཱͯΔ 
 Χ΢ϯτ਺Λ 
 ௒աͨ͠ Χ΢ϯτΛ1૿΍͢ ϑϥάΛཱͯΔ Manager Repository UseCase "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  14. ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ ❏ 6TF$BTFʹର͢ΔςετΛॻ͍ͨ ❏ ߦఔ౓ͷςετίʔυྔ ❏ ςετ͕೔Ͱ͸Ͱ͖ͳ͍෦෼΋͋ΔͨΊɺ2"͍ͯͨͩ͘͠લʹͰ͖ΔݶΓόά͕ͳ͍ঢ়ଶʹ͔ͨͬͨ͠ ❏ ςετ಺༰ ❏

    τϦΨʔͷछྨ͕มߋ͞Εͨ࣌ʹॳظԽ͕͞Ε͍ͯΔ͔ ❏ μΠΞϩάΛදࣔͤ͞Δϑϥά͕͢Ͱʹཱ͍ͬͯΔ৔߹ʹߋ৽͕͔͔Βͳ͍͔ ❏ ि಄͔ΒिؒҎ্͕ܦա͍ͯͨ͠ʢिؒ ೔ʣ ❏ ि಄͔ΒिؒҎ্͕ܦա͍ͯͨ͠ʢिؒ ೔ʣ ❏ ि಄͔ΒिؒҎ಺ͰલճΞΫςΟϒʹͳ͔ͬͯΒ೔Ҏ্ܦաʢઃఆͨ͠೔਺Ҏ಺ʣ ❏ ि಄͔ΒिؒҎ಺ͰલճΞΫςΟϒʹͳ͔ͬͯΒ೔Ҏ্ܦաʢઃఆͨ͠೔਺ʹ౸ୡʣ ❏ ि಄͔ΒिؒҎ಺ͰલճΞΫςΟϒʹͳͬͨ೔ͱಉ͡೔ʹΞΫςΟϒʹͳͬͨ 
 ͳͲ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  15. ΞΫςΟϒʹͳͬͨλΠϛϯάΛ6TF$BTFʹ஌ΒͤΔ Manager Activity Repository DataSource UseCase In-App-Review API TestDialog //

    Manager಺ͷίʔυ /**ΞϓϦىಈ࣌ or όοΫάϥ΢ϯυ͔Βͷ෮ؼ࣌ʹ࣮ߦ͢Δॲཧ */ fun onApplicationEnterForeground(application: YLApplication) { application.runOnMainActivity { it.lifecycleScope.launchWhenResumed { // ϨϏϡʔμΠΞϩά༻ʹΞΫςΟϒ਺ΛΧ΢ϯτ͢Δ useCase.updateActiveTriggerStatus() ɹɹ// ϨϏϡʔμΠΞϩάͷදࣔ showReviewDialogIfNeed(it) } } } "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  16. Manager Activity 
 Application Repository DataSource UseCase In-App-Review API TestDialog

    "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷μΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ
  17. ΫϩʔζυϞʔυΛ࡞Δ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷ ❏ ΞΫςΟϒ཰Λܭଌ͢Δ ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ ❏ μΠΞϩάΛදࣔ͢Δ

    ❏ ಈ͍͍ͯΔ͔ςετ͢Δ ɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ Manager Activity Repository DataSource UseCase In-App-Review API TestDialog ɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏
  18. ྑ͍ޮՌ͕ग़Δͷ͔Θ͔Βͣ 
 ΫϥΠΞϯτʹקΊΒΕͳ͍ ΫϩʔζυϞʔυΛ࡞੒ ❏ μΠΞϩά͸৽ͨʹ࡞੒ ❏ ެࣜ"1*͸࢖༻͠ͳ͍ ❏ ϨϏϡʔ݁Ռ͸ετΞͷϨ

    Ϗϡʔʹ൓ө͞Εͳ͍ ❏ ϨϏϡʔ݁Ռ͸ࣾ಺ͷαʔ όʹอଘ͠෼ੳ ˞ϨϏϡʔμΠΞϩάػೳͷಋ ೖʹࡍͯ͠ɺॳظௐࠪͷͨΊʹ ࣮૷ɻݱࡏ͸࢖༻͍ͯ͠ͳ͍ɻ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷ΫϩʔζυϞʔυΛ࡞Δ
  19. "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷ ❏ ΞΫςΟϒ཰Λܭଌ͢Δ ❏ ܭଌ͕ਖ਼֬ʹߦ͍͑ͯΔ͔ςετ͢Δ ΫϩʔζυϞʔυΛ࡞Δ ❏ μΠΞϩάΛ࡞ͬͯදࣔͤ͞Δ ❏ μΠΞϩάΛදࣔ͢Δ

    ❏ ಈ͍͍ͯΔ͔ςετ͢Δ ɹμΠΞϩάΛදࣔͤ͞ΔϑϥάΛ؅ཧ͢Δ Manager Activity Repository DataSource UseCase In-App-Review API TestDialog ɹ(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏
  20. (PPHMF1MBZ*O"QQ3FWJFX"1* 
 ❏ ϢʔβʔΛΞϓϦ͔Β཭Εͤͣ͞ʹ1MBZετΞͷධՁͱϨϏϡʔΛૹ৴͢ΔΑ͏ଅ͢͜ͱ͕Ͱ͖Δ"1* ❏ "OESPJEʢ"1*ϨϕϧʣҎ߱ɺ(PPHMF1MBZετΞ͕Πϯετʔϧ͞Ε͍ͯΔ୺຤Ͱ࢖༻Մೳ IUUQTEFWFMPQFSBOESPJEDPNHVJEFQMBZDPSFJOBQQSFWJFX'JHVSFࢀর "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏ ࢖༻ํ๏΍ઃܭͷΨΠυϥΠϯ 


    ʹै͏ඞཁ͕͋Δ 
 μΠΞϩάͷՃ޻΍ɺμΠΞϩάΛग़͢લʹྑ͍ ධՁΛଅ͢Α͏ͳڍಈΛ͢Δͷ͸/( Ϣʔβʔ͕ϨϏϡʔͯ͘͠Ε͔ͨͲ͏͔Λ 
 ΞϓϦଆͰ஌Δ͜ͱ͸Ͱ͖ͳ͍ μΠΞϩά͕දࣔ͞ΕΔ͔Ͳ͏͔͸ 
 ΞϓϦଆͰ͸൑அͰ͖ͳ͍ͷͰ 
 දࣔ͞Εͳͯ͘΋໰୊ͳ͍Α͏ͳ෦෼Ͱ 
 දࣔͤ͞Δඞཁ͕͋Δ
  21. ಈ͍͍ͯΔ͔ςετ͢Δ ❏ σόοά࣌ ❏ ઌఔͷίʔυͰॻ͍ͨΑ͏ʹ-PHΛग़ྗ͠੒ޭ͍ͯ͠Δ͔൑அ͢Δ ❏ ຊ൪؀ڥ࣌ ❏ (PHHMF1MBZͷ಺෦ΞϓϦڞ༗Λ࢖ͬͨ ❏

    ϨϏϡʔ͸ૹ৴Ͱ͖ͳ͍͕ɺμΠΞϩά͸දࣔ͞ΕΔ "OESPJEͰͷϨϏϡʔμΠΞϩάػೳͷ࣮૷(PPHMF1MBZ*O"QQ3FWJFX"1*Λ࢖͏