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

Bluesky と Android / Bluesky and Android

鎌倉
March 17, 2023

Bluesky と Android / Bluesky and Android

Bluesky/ATProtocol用の勉強会の資料です。

現在Bluesky用のAndroidクライアント「青雲」の開発を行っているので、開発に至った経緯やBluesky/ATP向けアプリをAndroidで開発するときのポイントなどを簡単に話しています。

鎌倉

March 17, 2023
Tweet

More Decks by 鎌倉

Other Decks in Technology

Transcript

  1. Android ͱ Bluesky
    Bluesky/ATProtocol ษڧձ#0
    ח૔ / @akiomik

    View Slide

  2. ࣗݾ঺հ
    ח૔ (@akiomik)


    ࠷ۙ͸ Bluesky Nostr ʹೖΓਁͬͯ
    Δ


    ໺ௗʹձ͍͍ͨ


    ࣸਅ͸ઌ݄ࡱͬͨΦφΨ


    ͔Θ͍͍Ͷ

    View Slide

  3. ੨Ӣ (seiun)
    Android ༻ͷࣗ࡞ Bluesky ΫϥΠΞ
    ϯτ


    ࡞Δ·ͰʹࢸͬͨܦҢ΍ Androidʹ
    ؔ͢Δ Bluesky ΛऔΓר͘ঢ়گʹͭ
    ͍͓ͯ࿩͠·͢

    View Slide

  4. ΞδΣϯμ
    • Nostr ͱ Bluesky


    • Android Ϣʔβͱ Bluesky


    • ੨Ӣ


    • Android ΞϓϦ։ൃͱ Bluesky


    • Android ϢʔβΛऔΓר͘ঢ়گͷ·ͱΊ

    View Slide

  5. Nostr ͱ Bluesky

    View Slide

  6. Nostr
    Websocket ্Ͱಈ͘෼ࢄ SNS ༻ϓϩτίϧ


    ʮૄ݁߹ͳ෼ࢄγεςϜʯ + ʮރΕٕͨज़
    ͷਫฏࢥߟ ʯͱ͍͏งғؾͰΤϯδχΞత
    ʹ༡ͼ͕͍͕͋Δ


    Bluesky ΋ Nostr ΋ ϊεഇͷ δϟοΫɾ
    υʔγʔ͕ग़ࢿ


    ʮBluesky ϦϦʔε·Ͱͷ଴ػॴʯͱᎏ᎐ʁ
    ͞ΕΔ (ͨ) ͜ͱ΋

    View Slide

  7. 2023/03/03

    View Slide

  8. ޕલ2࣌
    ট଴ίʔυΛೖखͯ͠ Bluesky ʹࢀ
    Ճ͢Δ Nostr ίϛϡχςΟͷॅຽ͕
    ݱΕΔ


    (౰࣌͸·ͩ೔ຊίϛϡχςΟͰ͸ݶ
    ΒΕͨগ਺ͷΈ͕ࢀՃ͍ͯͨ͠)

    View Slide

  9. ޕલ9࣌
    Nostr ίϛϡχςΟͷॅਓ͕
    Bluesky ಺෦ͰγΣΞ͞Ε͍ͯΔট
    ଴ίʔυΛ Nostr ʹ֦ࢄ


    Bluesky ೖΓ͢Δॅਓ͕ग़࢝ΊΔ

    View Slide

  10. ன12࣌൒
    ͦΕͰ΋ট଴ίʔυΛ֫ಘͰ͖ͳ͍
    ॅਓ͸Blueskyͷ։ൃαʔόΛࣗલ
    Ͱݐͯͯ༡ͼ࢝ΊΔ

    View Slide

  11. 16࣌൒
    Nostr ίϛϡχςΟͷਓʑ͕ଓʑͱ
    Bluesky ʹࢀՃͯ͠য͍ͬͯΔ

    View Slide

  12. 16࣌൒
    ແࣄʹࢀՃͰ͖·ͨ͠🥰


    (kaorit ͞Μ͋Γ͕ͱ͏🙏)

    View Slide

  13. Ұํͦͷࠒ

    View Slide

  14. ΩϨΔAndroidϢʔβ
    ͜ͷஈ֊Ͱ Bluesky ʹࢀՃͰ͖Δͷ͸


    • ެࣜ iOS ΞϓϦ


    • ໺ྑΫϥΠΞϯτ (͔֬͜ͷஈ֊Ͱ͸
    Ϗϡʔϫ)


    • curl ΍ެࣜϥΠϒϥϦͰ API Λ௚઀ୟ͘


    View Slide

  15. 18࣌൒
    ೔ຊ Android ͷձͰཧࣄ (͑Β͍)
    Λ͍ͯ͠Δ kojira ͞Μ͕ΞΧ΢ϯτ
    ࡞੒πʔϧͷ࡞੒Λґཔ

    View Slide

  16. 19࣌
    ఔͳͯࣗ͘͠෼ͱ rain ͞Μ͕΄΅ಉ
    ࣌ʹΞΧ΢ϯτ࡞੒ϑΥʔϜΛϦ
    Ϧʔε


    ͜ΕͰ Android Ϣʔβ΋ট଴ίʔυ
    ͑͋͞Ε͹ΞΧ΢ϯτ࡞੒͕Մೳʹ

    View Slide

  17. Bluesky Account
    Creator
    https://bluesky-account-
    creator.vercel.app/

    View Slide

  18. ΫϥΠΞϯτ։ൃ RTA ͕


    ҰؾʹՃ଎

    View Slide

  19. ཌޕલ1࣌
    ࣮༻తͳ web ΫϥΠΞϯτ͕΍͹
    ͍଎౓ͰϦϦʔε͞Εͯ͠·͏

    View Slide

  20. ޕલ0࣌൒͝Ζ
    ࣗ෼΋AndroidͷΞϓϦͷ։ൃΛ࢝
    Ίͯ…

    View Slide

  21. 23࣌
    ଞͷ web ΫϥΠΞϯτʹ஗ΕΛͱ
    Γͭͭ΋ॳظ൛ͷ apk ΛϦϦʔε


    ౰࣌͸ϩάΠϯͯ͠ TL ද͕ࣔͰ͖
    Δ͚ͩ

    View Slide

  22. 48࣌ؒ
    [Ad] Nostr ଜ͸໘ന͍͜ͱ͕ຖ೔ͨ͘͞Μى͖͍ͯΔΑɻࠓ͙͢νΣοΫʂɹ

    View Slide

  23. ੨Ӣ

    View Slide

  24. ੨Ӣ
    (͓ͦΒ͘) ੈքͰ།ҰϦϦʔε͞Ε͍ͯ
    Δ Bluesky ༻ͷ Android ΫϥΠΞϯτ


    ࡢ೔ Google Play Store ͰΦʔϓϯςε
    τΛ։࢝


    https://play.google.com/store/apps/
    details?id=io.github.akiomik.seiun


    View Slide

  25. ػೳ
    • ϑΥϩʔ


    • ϓϩϑΟʔϧӾཡɾมߋ


    • Ҿ༻Ϧϙετ


    Ҏ֎͸େମͰ͖Δ😇


    (΋͏ͪΐͬͱ଴ͬͯͯͶ…)

    View Slide

  26. ࢖༻ٕज़
    Lang: Kotlin


    API: Retro
    fi
    t2 + Moshi + Eithernet


    UI: Jetpack compose + Material 3


    Android ॳֶऀͳΓʹؤுͬͯ࡞ͬ
    ͍ͯ·͢🥺

    View Slide

  27. Bluesky/ATPʹ͓͚Δ


    Android ։ൃࣄ৘

    View Slide

  28. ΫϥΠΞϯτϥΠϒϥϦ͕ͳ͍

    View Slide

  29. ΫϥΠΞϯτϥΠϒϥϦ͕ͳ͍
    • ެ͔ࣜΒఏڙ͞Ε͍ͯΔͷ͸ node ͱ golangͷΈ


    • ATP ༻ͷ SDK Λࣗ෼Ͱ։ൃ͢Δඞཁ͕͋Δ


    NOTE: Dart༻ͷ΋ͷͳΒՃ౻͞Μ࡞ͷϥΠϒϥϦ͕͋Δ


    • https://pub.dev/documentation/atproto/latest/

    View Slide

  30. SDK։ൃ
    XRPC ༻ͷΫϥΠΞϯτΛ࣮૷͢Δ


    ެࣜυΩϡϝϯτ ΛಡΊ͹OK…ͱݴ͍
    ͍ͨͱ͜Ζ͕ͩɺ͋·ΓࢀߟʹͳΒͳ͍
    😇


    Lexicon ͷ֓؍Λ௫ΜͩΒ @atproto/
    api ͷ API ·ͨ͸ίʔυ͔Β௚઀Ͱ͖Δ
    ͜ͱΛ୳ͨ͠ํ͕ૣ͍

    View Slide

  31. ΏΔ;Θ XRPC
    • JWT Λ࢖ͬͨೝূ (Authorization: Bearer $accessJwt)


    • `type: query` ͸ GET ͰΫΤϦύϥϝʔλʹ৐ͤͯϦΫΤετ


    • `type: procedure` ͸ POST Ͱbody͸json (blobΛআ͘)


    • `type: record` ͱ `schemaϓϩύςΟ` ͕΍ΓͱΓ͢Δσʔλܕ

    View Slide

  32. Retro
    fi
    t2 +


    Moshi +


    EitherNet
    ͍͔ͭ͘ϋϚΓͲ͜Ζ͕͋Δ͕ɺ
    XRPC Ͱ΋៉ྷʹॻ͚Δ


    View Slide

  33. ͍͔ͭ͘ͷ


    ϋϚΓͲ͜Ζ
    ͍ͨΔͱ͜ΖͰૺ۰͢Δ


    `type: unknown` `type: union`


    ͷѻ͍͕Ή͔ͣ͗͢͠Δ


    㱺 ͍͍ײ͡ͷରࡦํ๏ืूதͰ͢😢

    View Slide

  34. ͍͔ͭ͘ͷϋϚΓͲ͜Ζ
    • Moshi ͷ೔࣌ܕ͸ RFC 3339 ͔͠ѻ͑ͳ͍͕ɺXRPC ͸ ISO 8601


    • 㱺 Retro
    fi
    t ͷ Converter Adapter Λ࣮૷ (ਖ਼͘͠΍Δʹ͸)


    • EitherNet Ͱ͸ۭͷϨεϙϯεΛѻ͏͜ͱ͕Ͱ͖ͳ͍


    • 㱺 EitherNet Λϥοϓͨ͠ Retro
    fi
    t ͷ Converter Adapter Λ࣮૷


    • Blob ͷ౤͛ํ͕ௐ΂ͯ΋Θ͔Βͳ͔ͬͨ (ࠓ͸ RequestBody Λ࢖ͬͯΔ)

    View Slide

  35. Google Play StoreͰͷ৹ࠪ

    View Slide

  36. Google Play StoreͰͷ৹ࠪ
    • SNSΞϓϦͱͯ͠ఏग़͢Δ৔߹ɺ࠷௿ݶʮ௨ใʯͱʮϛϡʔτ (ϒ
    ϩοΫ)ʯͷ࣮૷͕ඞཁ


    • ςετ༻ͷΞΧ΢ϯτͷఏڙ΋ඞཁ


    • 㱺 ௨ใͱςετ༻ʹ2ΞΧ΢ϯτ͸ཉ͍͠


    • boobee.blue ͷΑ͏ͳ֎෦ͷ PDS Λ࢖Θͤͯ΋Β͏ͷ΋ख

    View Slide

  37. Android ϢʔβΛ


    औΓר͘ঢ়گ

    View Slide

  38. ެࣜΫϥΠΞϯτ
    iOS ͱ Web (PC) ͷΈ (3/17 ݱࡏ)


    Android ޲͚ʹ PWA ԽΛਐΊΔͱ
    ͷ͜ͱ (3/16 ࣌఺ͷ৘ใ)

    View Slide

  39. ΞΧ΢ϯτ࡞੒
    ެࣜ Web ΫϥΠΞϯτͰOK


    PC͕ͳ͚Ε͹ҎԼͷ͍ͣΕ͔


    • ੨Ӣ


    • Bluesky Account Creator


    • syui ͞Μ࡞ͷ bsky

    View Slide

  40. BlueskyΛָ͠Ή
    ޷͖ͳΫϥΠΞϯτͰOKʂ


    ެࣜΫϥΠΞϯτ͸҆৺ײ͕͋Δ


    ໺ྑΫϥΠΞϯτ͸εϐʔυײ΍
    ֤ʑͷ࡞ऀ͞Μͷ৭͕ग़ָ͍ͯͯ͠
    ͍


    ωΠςΟϒΞϓϦͳΒ੨Ӣ🙏

    View Slide

  41. Have a nice sky 🤙
    ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide