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

Firebase for iOS 初手〇〇

Firebase for iOS 初手〇〇

モバイルアプリ開発に欠かせないmBaaS であるFirebase についての解説。FirebaseはGoogle がモバイルアプリ向けに提供しているクラウドサービスのブランド名だが機能が
多すぎて何から手をつけていいか分からなくなる。

本プレゼンテーションではiOSアプリ開発であれば初手に何をすべき核について解説している。

notoroid

May 25, 2021
Tweet

More Decks by notoroid

Other Decks in Programming

Transcript

  1. 'JSFCBTFGPSJ04
    ॳखʓʓ

    View Slide

  2. ࣗݾ঺հ

    View Slide

  3. ೳొཁ !OPUPSPJE

    w J04ΞϓϦ։ൃऀ
    w ԰߸͍Γ·͢ిࢉاը
    w !OPUPSPJE
    w !JSJNBTV
    w ࠷ۙͷಈ޲
    w ϒϩά࡮৽͠·ͨ͠

    View Slide

  4. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ

    w ࠷େ୆ ࣮ػϦϞʔτ୆

    w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ
    J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬
    ೝՄೳ
    w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ

    View Slide

  5. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w "QQMF8BUDIରԠ
    w $PNQMJDBUJPOTରԠ
    w ॆి׬ྃ௨஌
    w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ
    w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔΛέ
    Ξ͢Δ͜ͱ͕Մೳ
    w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗༻

    View Slide

  6. ࿩͢͜ͱ
    w 'JSFCBTFͷτϐοΫ
    w ϞόΠϧΞϓϦ։ൃͰͷ'JSFCBTFॳख

    View Slide

  7. ࿩͞ͳ͍͜ͱ
    w ͷ(PPHMF*0ʹ͍ͭͯ
    w 'JSFCBTFNFTTBHJOH
    w 'JSFCBTF$MPVE'VODUJPOT
    w 'JSFCBTF$MPVE)PTUJOH

    View Slide

  8. ୊໨
    w 'JSFCBTF֓ཁ
    w 'JSFCBTFͷ࠷ۙͷτϐοΫ
    w J1IPOFΞϓϦϓϩδΣΫτ'JSFCBTFॳखϜʔϒ

    View Slide

  9. 'JSFCBTF֓ཁ

    View Slide

  10. 88%$։࠵ؒۙ

    View Slide

  11. ͜ͷ࣌ظ͸Appleͷωλ͕ͳ͍

    View Slide

  12. ͔ΘΓʹ(PPHMFͷΧϯϑΝϨϯ
    ε͸͋Δ (PPHMF*0

    View Slide

  13. ϞόΠϧΞϓϦʹ͔͔ͤͳ͍
    'JSFCBTFͷॳखʹ͍ͭͯઆ໌

    View Slide

  14. 'JSFCBTFͱ͸

    View Slide

  15. 'JSFCBTFͱ͸
    w (PPHMF͕ఏڙ͢ΔϞόΠϧΞϓϦ༻N#BB4
    ͷϒϥϯυ
    w 'JSFCBTFͱ͍͏ϦΞϧλΠϜσʔλϕʔ
    εͷઌۦ͚ͷϕϯνϟʔΛങऩ
    w ͦͷ··ϒϥϯυͱͯ͠࢖༻
    w ଞαʔϏε 'BCSJD
    ΋ٵऩ
    w (PPHMF$MPVEQMBUGPSNΛج൫ʹϞόΠ
    ϧαʔϏεʹదͨ͠ܗͰఏڙ
    w ैྔ՝ۚ੡

    View Slide

  16. ϓϥοτϑΥʔϜαʔϏεରԠ
    w ϞόΠϧ޲͚
    w 'JSFCBTFJ044%,
    w 'JSFCBTF"OESPJE4%,
    w 'JSFCBTF+BWBTDSJQU4%, 8FCϑϩϯτΤϯυ޲͚

    w 'JSFCBTF"ENJO4%, αʔόʔαʔόʔϨε޲͚

    ϞόΠϧΞϓϦͱόοΫΤϯυͰͷ'JSFCBTFػೳݺͼग़͠Λαϙʔτ

    View Slide

  17. 'JSFCBTFͷػೳ ൈਮ

    ʙ"VUIFOUJDBUJPO Ϣʔβʔೝূ
    ʙ$SBTIMZUJDT Ϋϥογϡ৘ใڞ༗
    ʙ$MPVE.FTTBHJOH ϓογϡ௨஌
    ʙ$MPVE'VODUJPOT αʔόʔϨείϯϐϡʔςΟϯά
    ʙ$MPVE'JSFTUPSF ϦΞϧλΠϜσʔλϕʔε
    ʙ)PTUJOH ϗεςΟϯάαʔϏε
    ʙ"QQ%JTUSJCVUJPO ݕূΞϓϦͷ഑෍
    ʙ4UPSBHF ετϨʔδαʔϏε
    ʙ3FBMUJNF%BUBCBTF ϦΞϧλΠϜσʔλϕʔε ถࠃͷΈ

    ๛෋ͳػೳͱ͙͢࢖͑Δརศੑ

    View Slide

  18. ϞόΠϧϓϥοτϑΥʔϜΛαϙʔτ͠
    όοΫΤϯυ΋ରԠ͢ΔαʔϏεʹ੒௕

    View Slide

  19. w ϓϩδΣΫτ୯ҐͰαʔϏε؅ཧ
    w ϓϩδΣΫτʹෳ਺ΞϓϦࢦఆՄೳ
    w ͭͷαʔϏεͰෳ਺ϓϥοτϑΥʔϜɺ
    αʔϏε͕ࢀরՄೳ

    View Slide

  20. 'JSFCBTFʹؔ͢Δ࿩୊

    View Slide

  21. 'JSFCBTFʹؔ͢Δ࿩୊
    w 4XJGU1BDLBHF.BOBHFSରԠ
    w 'JSFCBTF'JSFTUPSF4XJGUͷػೳڧԽ
    w σʔλఆٛΛ4XJGUͷ$PEBCMFͰࢦఆՄೳʹ

    View Slide

  22. 4XJGU1BDLBHF.BOBHFSରԠ

    View Slide

  23. 4XJGU1BDLBHF.BOBHFSରԠ
    w 4XJGU1BDLBHF.BOBHFS
    w "QQMFۘ੡ͷϛυϧ΢ΣΞಋೖػೳ
    w 9DPEF্ͷૢ࡞Ͱ؆ܿ
    w ⁶$PDPBQPET $BSUIBHF
    w 9DPEFͰରԠ

    View Slide

  24. %FSJWFE%BUBΛফڈͨ͠ࡍʹ4XJGU1BDLBHFTͷύοέʔδࢀর
    ʹࣦഊ͢Δࡍͷରॲํ๏
    JSJNBTVDPNEFSJWFEEBUBTXJGUQBDLBHFT
    4XJGU1BDLBHF.BOBHFSͷศར৘ใ

    View Slide

  25. 'JSFCBTF'JSFTUPSF4XJGUͷػೳڧԽ
    w σʔλετΞ $MPVE'JSFTUPSF
    ͸0CKFDUJWF$΋αϙʔτ
    w 4XJGU޲͚ػೳ֦ு͸ఏڙ͞Ε͍ͯͳ͍
    w (PPHMFۘ੡ͷ'JSFCBTF'JSFTUPSF4XJGUͰ4XJGU޲͚ػೳ֦ு
    w 4XJGUͷ$PEBCMFରԠTUSVDUDMBTTͰσʔλఆٛՄೳʹ

    View Slide

  26. import SwiftUI


    import FirebaseFirestore


    import FirebaseFirestoreSwift


    struct Activity: Codable {


    @DocumentID var id: String?


    var title: String


    var description: String


    var timstamp: Date


    }


    struct ActivityView: View {


    @State var count = 1


    var body: some View {


    Button {


    let db = Firestore.firestore()


    let ref = db.collection("activities")




    count = count + 1


    let now = Date()


    let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/",
    timstamp: now)


    do {


    let newDocReference = try ref.addDocument(from: activity)


    print("Book stored with new document reference: \(newDocReference)")


    } catch {


    print(error)


    }


    } label: {


    Text("Add Activity")


    }


    }


    }

    View Slide

  27. import SwiftUI


    import FirebaseFirestore


    import FirebaseFirestoreSwift


    struct Activity: Codable {


    @DocumentID var id: String?


    var title: String


    var description: String


    var timstamp: Date


    }


    struct ActivityView: View {


    @State var count = 1


    var body: some View {


    Button {


    let db = Firestore.firestore()


    let ref = db.collection("activities")




    count = count + 1


    let now = Date()


    let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/",
    timstamp: now)


    do {


    let newDocReference = try ref.addDocument(from: activity)


    print("Book stored with new document reference: \(newDocReference)")


    } catch {


    print(error)


    }


    } label: {


    Text("Add Activity")


    }


    }


    }
    ඞཁͳJNQPSU

    View Slide

  28. import SwiftUI


    import FirebaseFirestore


    import FirebaseFirestoreSwift


    struct Activity: Codable {


    @DocumentID var id: String?


    var title: String


    var description: String


    var timstamp: Date


    }


    struct ActivityView: View {


    @State var count = 1


    var body: some View {


    Button {


    let db = Firestore.firestore()


    let ref = db.collection("activities")




    count = count + 1


    let now = Date()


    let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/",
    timstamp: now)


    do {


    let newDocReference = try ref.addDocument(from: activity)


    print("Book stored with new document reference: \(newDocReference)")


    } catch {


    print(error)


    }


    } label: {


    Text("Add Activity")


    }


    }


    }
    σʔλఆٛ

    View Slide

  29. import SwiftUI


    import FirebaseFirestore


    import FirebaseFirestoreSwift


    struct Activity: Codable {


    @DocumentID var id: String?


    var title: String


    var description: String


    var timstamp: Date


    }


    struct ActivityView: View {


    @State var count = 1


    var body: some View {


    Button {


    let db = Firestore.firestore()


    let ref = db.collection("activities")




    count = count + 1


    let now = Date()


    let activity = Activity(id: nil, title: "\(count)", description: "Activity number \(count)/",
    timstamp: now)


    do {


    let newDocReference = try ref.addDocument(from: activity)


    print("Book stored with new document reference: \(newDocReference)")


    } catch {


    print(error)


    }


    } label: {


    Text("Add Activity")


    }


    }


    }
    σʔλΛ௥Ճ͢Δ

    View Slide

  30. 'JSFTUPSF΁൓ө

    View Slide

  31. 'JSFCBTFॳखʓʓ

    View Slide

  32. 'JSFCBTF͸ͳΜͰ΋Ͱ͖Δ͕

    View Slide

  33. ͱ͸ݴͬͯ΋

    View Slide

  34. ػೳ͕ଟͯ͘ԿΛ͍͍͔ͯ͠
    Θ͔Βͳ͍

    View Slide

  35. 'JSFCBTFΛ࢖͏ΞϓϦͷ
    ৽ن্ཱͪ͛͸ͦ͏ଟ͘ͳ͍

    View Slide

  36. 'JSFCBTFΛ࢖͏ࡍʹ͸
    ॳखΛ͔ͬ͢Γ๨Ε͍ͯΔ

    View Slide

  37. ࠓճ͸'JSFCBTFಋೖͷ
    ࠷ॳͷखॱΛղઆ

    View Slide

  38. ಋೖϞσϧ

    View Slide

  39. J04ΞϓϦ 'JSFCBTF ଞαʔϏε
    'JSFCBTF
    $MPVE'VODUJPOT
    􀟜
    'JSFCBTF
    $MPVE'JSFTUPSF
    'JSFCBTF
    $MPVE.FTTBHJOH
    'JSFCBTF
    $SBTIMZUJDT 0UIFS
    4FSWJDF
    'JSFCBTF
    GPSJ04
    "1/T
    (PPHMF$MPVE
    1SBUGPSN
    8FC)PPL
    )5513FRVFTU
    "ENJO4%,
    1VTI/PUJ
    fi
    DBUJPO
    1VTI/PUJ
    fi
    DBUJPOT

    View Slide

  40. J04ΞϓϦ 'JSFCBTF ଞαʔϏε
    'JSFCBTF
    $MPVE'VODUJPOT
    􀟜
    'JSFCBTF
    $MPVE'JSFTUPSF
    'JSFCBTF
    $MPVE.FTTBHJOH
    'JSFCBTF
    $SBTIMZUJDT 0UIFS
    4FSWJDF
    'JSFCBTF
    GPSJ04
    "1/T
    (PPHMF$MPVE
    1SBUGPSN
    8FC)PPL
    )5513FRVFTU
    "ENJO4%,
    1VTI/PUJ
    fi
    DBUJPO
    1VTI/PUJ
    fi
    DBUJPOT
    ͜ͷൣғΛͳΜͱ͔͍ͨ͠

    View Slide

  41. ૝ఆΞϓϦ
    ϓϩδΣΫτ໊͸"DUJWJUZ5FTU
    ίʔυྔͷ౎߹্4XJGU6* ͓ͦΒ͘6*,JUɺ'MVUUFSͰ΋աఔมΘΒͳ͍͸ͣ

    લఏ
    'JSFCBTFίϯιʔϧ΁ϩάΠϯՄೳ
    $PDPBQPET࢖༻
    Ϋϥογϡ৘ใΛऩू͢Δ
    ϢʔβʔೝূΛ༗ޮʹ͢Δ "VUIFOUJDBUJPO

    4JHO*OXJUI"QQMF
    'JSFTPSF'JSFTUPSFΛ༗ޮԽ
    ͓஌ΒͤҰཡػೳΛ୲ΘͤΔͨΊͷج൫ͱͯ͠σʔλετΞΛར༻͍ͨ͠

    View Slide

  42. ҎԼʹެ։த
    OPUPSPJE'JSFCBTF'JSTU.PWF'JSTU
    TUFQTUPVTJOH'JSFCBTFGPSJ04
    HJUIVCDPNOPUPSPJE'JSFCBTF'JSTU.PWF

    View Slide

  43. ·ͣ͸'JSFCBTFίϯιʔϧʹͯ
    'JSFCBTFϓϩδΣΫτΛ࡞੒

    View Slide

  44. View Slide

  45. ·ͣ࠷ॳʹ͢Δ͜ͱ͸

    View Slide

  46. ՝ۚϓϥϯͷมߋ

    View Slide

  47. View Slide

  48. $MPVE'VODUJPOTͰͷར༻࣌ʹ
    ੍໿ͳͲ͕͋ΔͷͰͬ͞͞ͱ੾Γସ͑

    View Slide

  49. View Slide

  50. ࡞ۀ.BDͰ৽نϓϩδΣΫτ
    "DUJWJUZ5FTU࡞੒

    View Slide

  51. #VOEMF*EFOUJ
    fi
    FSΛίϐʔ

    View Slide

  52. 'JSFCBTFͰϓϩδΣΫτʹ
    J04ΞϓϦΛ௥Ճ

    View Slide

  53. J04ϘλϯΛλοϓ

    View Slide

  54. #VOEMF*EFOUJ
    fi
    FSΛೖྗ

    View Slide

  55. (PPHMF4FSWJDF*OGPQMJTU
    Λμ΢ϯϩʔυͯ͠9DPEF
    ϓϩδΣΫτʹ௥Ճ

    View Slide

  56. ҎԼ͸'JGSFCBTFͷࢦࣔ௨Γʹ
    ਐΊΔ͕ɺ

    View Slide

  57. 1PE
    fi
    MF $PDPBQPET༻ఆٛ
    ͸
    ͪ͜ΒΛ࢖༻͢Δ

    View Slide

  58. # Uncomment the next line to define a global platform for your project


    platform :ios, '14.5'


    target 'ActivityTest' do


    # Comment the next line if you don't want to use dynamic frameworks


    use_frameworks!


    pod 'Firebase/Auth'


    pod 'Firebase/Crashlytics'


    pod 'Firebase/Firestore'


    pod 'FirebaseFirestoreSwift'


    pod 'Firebase/Messaging'




    end


    View Slide

  59. # Uncomment the next line to define a global platform for your project


    platform :ios, '14.5'


    target 'ActivityTest' do


    # Comment the next line if you don't want to use dynamic frameworks


    use_frameworks!


    pod 'Firebase/Auth'


    pod 'Firebase/Crashlytics'


    pod 'Firebase/Firestore'


    pod 'FirebaseFirestoreSwift'


    pod 'Firebase/Messaging'




    end


    ೝূ༻
    $SBTIMZUJDTू༻
    σʔλετΞ༻
    ϓογϡ௨஌༻

    View Slide

  60. $PDPBQPETΛΠϯετʔϧޙɺ
    ௥Ճ͞ΕͨϫʔΫεϖʔεϑΝΠϧ
    "DUJWJUZ5FTUYDXPSLTQBDF

    Λ։͚͹'JSFCBTFͷಋೖ׬ྃ

    View Slide

  61. ֤ػೳ͝ͱʹಋೖ࡞ۀ͕
    ඞཁʹͳΔ

    View Slide

  62. αϯϓϧίʔυղઆ

    View Slide

  63. ҎԼʹެ։த
    OPUPSPJE'JSFCBTF'JSTU.PWF'JSTU
    TUFQTUPVTJOH'JSFCBTFGPSJ04
    HJUIVCDPNOPUPSPJE'JSFCBTF'JSTU.PWF

    View Slide

  64. "DUJWJUZ5FTU
    w $SBTIMZUJDTૄ௨༻7JFX
    w 4JHO*OXJUI"QQMF֬ೝ༻7JFX
    w σʔλετΞ֬ೝ༻7JFX

    View Slide

  65. "DUJWJUZ5FTU
    fi
    OJTI
    ʹ׬੒ίʔυ

    View Slide

  66. $PDPBQPEͷΠϯετʔϧ
    (PPHMF4FSWJDF*OGPQMJTU
    ͕ඞཁ

    View Slide

  67. "DUJWJUZ5FTU
    fi
    OJTI
    "DUJWJUZ5FTU
    "DUJWJUZ5FTU"QQTXJGU
    import SwiftUI


    @main


    struct ActivityTestApp: App {


    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate


    var body: some Scene {


    WindowGroup {


    // original view


    ContentView()




    // step1) for Crashlytics activate


    // CrashView()




    // step2) for Signin with Apple test


    // SigninView()




    // step3) Firestore test


    // ActivityView()


    }


    }


    }


    View Slide

  68. "DUJWJUZ5FTU
    fi
    OJTI
    "DUJWJUZ5FTU
    "DUJWJUZ5FTU"QQTXJGU
    import SwiftUI


    @main


    struct ActivityTestApp: App {


    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate


    var body: some Scene {


    WindowGroup {


    // original view


    ContentView()




    // step1) for Crashlytics activate


    // CrashView()




    // step2) for Signin with Apple test


    // SigninView()




    // step3) Firestore test


    // ActivityView()


    }


    }


    }


    $SBTIMZUJDTૄ௨༻
    7JFX
    4JHO*OXJUI"QQMF
    ֬ೝ༻7JFX
    σʔλετΞ֬ೝ༻7JFX

    View Slide

  69. "DUJWJUZ5FTU"QQͷίϝϯτΞ΢τ͞Ε
    ͨ7JFXͱ'JSFTUPSFίϯιʔϧͷࢦࣔ௨
    Γʹ͢Ε͹جຊ0,

    View Slide

  70. ͨͩ͠$SBTIMZUJDTͷૄ௨ςετ࣌ɺ
    9DPEFͷσϑΥϧτઃఆͱ
    ৯͍ҧ͏ͷͰ஫ҙ

    View Slide

  71. $SBTIMZUJDTͱ9DPEFઃఆ
    %FCVH 3FMFBTFઃఆ
    9DPEFͷ΢ΟβʔυͰͷઃఆ
    %(@*/'03."5*0/@'03."5
    %8"3' %8"3'XJUIE4:.'JMF
    $SBTIMZUJDTͷૄ௨ςετ
    ࢖༻༗ແ
    ૄ௨ςετʹ࢖༻͢Δ ૄ௨ςετʹ࢖༻͠ͳ͍

    View Slide

  72. $SBTIMZUJDTͱ9DPEFઃఆ
    %FCVH 3FMFBTFઃఆ
    9DPEFͷ΢ΟβʔυͰͷઃఆ
    %(@*/'03."5*0/@'03."5
    %8"3' %8"3'XJUIE4:.'JMF
    $SBTIMZUJDTͷૄ௨ςετ
    ࢖༻༗ແ
    ૄ௨ςετʹ࢖༻͢Δ ૄ௨ςετʹ࢖༻͠ͳ͍
    %8"3'XJUIE4:.'JMF͕
    ඞཁͳͷʹૄ௨ςετʹ࢖༻͢Δ
    %FCVH൛͸ແޮʹͳ͍ͬͯΔ

    View Slide

  73. ࣗ࡞ΞϓϦͰͷ$SBTIMZUJDTରࡦ
    w $SBTIMZUJDTૄ௨ςετ͚࣌ͩ4FUUJOHͷ#6(@*/'03."5*0/@'03."5
    ͷ%FCVHΛ%8"3'XJUIE4:.'JMF༗ޮԽ
    w ૄ௨ςετޙ͸9DPEFઃఆʹ໭͢
    w 3VO4DSJQUҰ෦मਖ਼

    View Slide

  74. %(Ҏ֎ͷ࣌
    E4:.ϑΝΠϧΛίϐʔ

    View Slide

  75. ·ͱΊ
    w 'JSFCBTFͷॳखʹ͍ͭͯ·ͱΊ·ͨ͠
    w 'JSFCBTF͕4XJGU1BDLBHF.BOBHFS͔Β௥ՃՄೳʹ
    w σʔλετΞ $MPVE'JSFTUPSF
    ͷ4XJGU͔Βͷརศੑ޲্͠·ͨ͠

    View Slide

  76. IUUQTJSJNBTVDPN
    <13>#MPHਵ࣌౤ߘத

    View Slide

  77. ࢀߟ
    w 4XJGU6*4JHO*O8JUI"QQMFVTJOH'JSFCBTF"VUIc#FUUFS1SPHSBNNJOH
    w IUUQTCFUUFSQSPHSBNNJOHQVCTJHOJOXJUIBQQMF
    fi
    SFCBTFBVUITXJGUVJFGFB
    w .BQQJOH'JSFTUPSF%BUBJO4XJGUŠ5IF$PNQSFIFOTJWF(VJEFcCZ1FUFS'SJFTFc'JSFCBTF
    %FWFMPQFSTc"QS c.FEJVN
    w IUUQTNFEJVNDPN
    fi
    SFCBTFEFWFMPQFSTNBQQJOH
    fi
    SFTUPSFEBUBJOTXJGUUIF
    DPNQSFIFOTJWFHVJEFBEGC
    w (JU)VC
    fi
    SFCBTFGVODUJPOTTBNQMFT$PMMFDUJPOPGTBNQMFBQQTTIPXDBTJOHQPQVMBSVTF
    DBTFTVTJOH$MPVE'VODUJPOTGPS'JSFCBTF
    w IUUQTHJUIVCDPN
    fi
    SFCBTFGVODUJPOTTBNQMFT

    View Slide