AngularFire рд╡реЗрдм рдХреЛрдбрд▓реИрдм

1. рдЦрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА

рдЗрд╕ рдХреЛрдбрд▓реИрдм рдореЗрдВ, рдЖрдкрдХреЛ AngularFire рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдЗрд╕рдХреЗ рд▓рд┐рдП, Firebase рдХреЗ рдкреНрд░реЙрдбрдХреНрдЯ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЪреИрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓рд╛рдЧреВ рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдПрдХ рдЪреИрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Firebase рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕реАрдЦрдиреЗ рдХреЛ рдорд┐рд▓реЗрдЧрд╛

  • Angular рдФрд░ Firebase рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛.
  • Cloud Firestore рдФрд░ Cloud Storage for Firebase рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХ рдХрд░реЗрдВ.
  • Firebase рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ.
  • рдЕрдкрдиреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Firebase рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ.
  • Firebase рдХреНрд▓рд╛рдЙрдб рд╕реЗ рдореИрд╕реЗрдЬ рдХреА рдорджрдж рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреЗрдВ.
  • рдЖрдкрдХреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрд╕ рдХрд╛ рдбреЗрдЯрд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ.

рдЖрдкрдХреЛ рдЗрдирдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА

  • GitHub рдЦрд╛рддрд╛
  • рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Blaze рдкреНрд▓рд╛рди рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛
  • рдЖрдкрдХреА рдкрд╕рдВрдж рдХрд╛ рдЖрдИрдбреАрдИ/рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░, рдЬреИрд╕реЗ рдХрд┐ WebStorm, Sublime рдпрд╛ VS Code
  • рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ npm, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ Node.js рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ
  • рдЯрд░реНрдорд┐рдирд▓/рдХрдВрд╕реЛрд▓
  • рдЕрдкрдиреА рдкрд╕рдВрдж рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдЬреИрд╕реЗ рдХрд┐ Chrome
  • рдХреЛрдбрд▓реИрдм рдХрд╛ рд╕реИрдВрдкрд▓ рдХреЛрдб. рдХреЛрдб рдкрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдбрд▓реИрдм рдХрд╛ рдЕрдЧрд▓рд╛ рдЪрд░рдг рджреЗрдЦреЗрдВ.

2. рд╕реИрдВрдкрд▓ рдХреЛрдб рдкрд╛рдирд╛

GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдмрдирд╛рдирд╛

рдХреЛрдбрд▓реИрдм рдХрд╛ рд╕реЛрд░реНрд╕ https://github.com/firebase/codelab-friendlychat-web рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ, рдХрдИ рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╕реИрдВрдкрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореМрдЬреВрдж рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдХреЛрдбрд▓реИрдм рдореЗрдВ рд╕рд┐рд░реНрдлрд╝ angularfire-start рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.

angularfire-start рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ:

  1. рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рдирдИ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдореЗрдВ рдЬрд╛рдПрдВ:
    mkdir codelab-friendlyeats-web
    
    cd codelab-friendlyeats-web
    
  2. рд╕рд┐рд░реНрдлрд╝ angularfire-start рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдлрд╝реЗрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, giget npm рдкреИрдХреЗрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ:
    npx giget@latest gh:firebase/codelab-friendlychat-web/angularfire-start#master . --install
    
  3. git рдХреА рдорджрдж рд╕реЗ, рд▓реЛрдХрд▓ рддреМрд░ рдкрд░ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВ:
    git init
    
    git add .
    
    git commit -m "codelab starting point"
    
    git branch -M main
    
  4. рдирдИ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдмрдирд╛рдПрдВ: https://github.com/new. рдЗрд╕реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХреЛрдИ рднреА рдирд╛рдо рджреЗрдВ.
    1. GitHub рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдпреВрдЖрд░рдПрд▓ рджреЗрдЧрд╛, рдЬреЛ https://github.com/[user-name]/[repository-name].git рдпрд╛ git@github.com:[user-name]/[repository-name].git рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛. рдЗрд╕ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ.
  5. рдЕрдкрдиреА рдирдИ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдкреБрд╢ рдХрд░реЗрдВ. рдпрд╣рд╛рдВ рджреА рдЧрдИ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ. рдЗрд╕рдореЗрдВ your-repository-url рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреА рдЬрдЧрд╣ рдЕрдкрдиреЗ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХрд╛ рдпреВрдЖрд░рдПрд▓ рдбрд╛рд▓реЗрдВ.
    git remote add origin your-repository-url
    
    git push -u origin main
    
  6. рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛрдб рджрд┐рдЦреЗрдЧрд╛.

3. Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕реЗ рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо FriendlyChat рд░рдЦреЗрдВ. рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдпрд╛рдж рд░рдЦреЗрдВ.
  3. рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП Google Analytics рдЪрд╛рд▓реВ рдХрд░реЗрдВ рд╕реЗ рдЪреБрдиреЗ рд╣реБрдП рдХрд╛ рдирд┐рд╢рд╛рди рд╣рдЯрд╛рдПрдВ
  4. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

рдЖрдкрдХреЛ рдЬрд┐рд╕ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдирд╛ рд╣реИ рдЙрд╕рдореЗрдВ Firebase рдХреЗ рдРрд╕реЗ рдкреНрд░реЙрдбрдХреНрдЯ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

  • Firebase Authentication рдХреА рдорджрдж рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ.
  • рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдбреЗрдЯрд╛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Cloud Firestore рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рд╕рд╛рде рд╣реА, рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рд╕реВрдЪрдирд╛ рдкрд╛рдПрдВ.
  • рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Firebase рдХреЗ рд▓рд┐рдП Cloud Storage рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
  • рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ, рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ, рдФрд░ рдЙрд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, Firebase App Hosting рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
  • Firebase Cloud Messaging рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдкреБрд╢ рдиреЛрдЯрд┐рдлрд╝рд┐рдХреЗрд╢рди рднреЗрдЬрдиреЗ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдкреЙрдк-рдЕрдк рдиреЛрдЯрд┐рдлрд╝рд┐рдХреЗрд╢рди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
  • Firebase Performance Monitoring рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрд╕ рдХрд╛ рдбреЗрдЯрд╛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ.

рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкреНрд░реЙрдбрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдЦрд╛рд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдиреНрд╣реЗрдВ Firebase рдХрдВрд╕реЛрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ.

Firebase рдХрд╛ рдкреНрд░рд╛рдЗрд╕рд┐рдВрдЧ рдкреНрд▓рд╛рди рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛

Firebase App Hosting рдФрд░ Cloud Storage for Firebase рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╢реБрд▓реНрдХ рдЪреБрдХрд╛рдиреЗ рд╡рд╛рд▓реЗ (рдмреНрд▓реЗрдЬрд╝) рдкреНрд▓рд╛рди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ Cloud Billing рдЦрд╛рддреЗ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП.

  • Cloud Billing рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП, рдкреЗрдореЗрдВрдЯ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. рдЬреИрд╕реЗ, рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб.
  • рдЕрдЧрд░ рдЖрдкрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Firebase рдФрд░ Google Cloud рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ 300 рдбреЙрд▓рд░ рдХрд╛ рдХреНрд░реЗрдбрд┐рдЯ рдФрд░ рдореБрдлрд╝реНрдд рдореЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП Cloud Billing рдЦрд╛рддрд╛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ.
  • рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдХреЛрдбрд▓реИрдм рдХрд┐рд╕реА рдЗрд╡реЗрдВрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рддреМрд░ рдкрд░ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЗрд╡реЗрдВрдЯ рдХреЗ рдЖрдпреЛрдЬрдХ рд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ рдХреНрдпрд╛ Cloud рдХреНрд░реЗрдбрд┐рдЯ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ.

рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Blaze рдкреНрд▓рд╛рди рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ:

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЬрд╛рдХрд░, рдЕрдкрдиреЗ рдкреНрд▓рд╛рди рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ.
  2. Blaze рдкреНрд▓рд╛рди рдЪреБрдиреЗрдВ. рдХрд┐рд╕реА Cloud Billing рдЦрд╛рддреЗ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ.
    рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рджреМрд░рд╛рди Cloud Billing рдЦрд╛рддрд╛ рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛ рд╣реИ, рддреЛ рдЕрдкрдЧреНрд░реЗрдб рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ.

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Firebase рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛрдбрд╝рдирд╛

  1. рдирдпрд╛ Firebase рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рдЖрдЗрдХреЙрди 58d6543a156e56f9.png рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  2. рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Friendly Chat рдирд┐рдХрдиреЗрдо рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ. рдЗрд╕ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП Firebase Hosting рднреА рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдореМрдЬреВрдж рдмреЙрдХреНрд╕ рдкрд░ рд╕рд╣реА рдХрд╛ рдирд┐рд╢рд╛рди рди рд▓рдЧрд╛рдПрдВ. рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦреЗрдЧрд╛. рдлрд╝рд┐рд▓рд╣рд╛рд▓, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ. рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛

рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ Google рдЦрд╛рддреЛрдВ рд╕реЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Google рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, Authentication рдкрд░ рдЬрд╛рдПрдВ.
  2. рд╢реБрд░реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рдЕрдиреНрдп рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЙрд▓рдо рдореЗрдВ, Google > рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  4. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ, рдХреЛрдИ рдРрд╕рд╛ рдирд╛рдо рдбрд╛рд▓реЗрдВ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╛рдж рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗ. рдЬреИрд╕реЗ, My Next.js app.
  5. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдИрдореЗрд▓ рдкрддрд╛ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реЗ, рдЕрдкрдирд╛ рдИрдореЗрд▓ рдкрддрд╛ рдЪреБрдиреЗрдВ.
  6. рд╕реЗрд╡ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

Cloud Firestore рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

рдпрд╣ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди, рдЪреИрдЯ рдореИрд╕реЗрдЬ рд╕реЗрд╡ рдХрд░рдиреЗ рдФрд░ рдирдП рдЪреИрдЯ рдореИрд╕реЗрдЬ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Cloud Firestore рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ.

рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Cloud Firestore рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. Firebase рдХрдВрд╕реЛрд▓ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдореМрдЬреВрдж рдкреИрдирд▓ рдореЗрдВ, Build рдХреЛ рдмрдбрд╝рд╛ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, Firestore database рдХреЛ рдЪреБрдиреЗрдВ.
  2. рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдИрдбреА рдХреЛ (default) рдкрд░ рд╕реЗрдЯ рд░рд╣рдиреЗ рджреЗрдВ.
  4. рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдЪреБрдиреЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
    рдХрд┐рд╕реА рдЕрд╕рд▓реА рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдРрд╕реА рдЬрдЧрд╣ рдЪреБрдирдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рд╣реЛ.
  5. рдЯреЗрд╕реНрдЯ рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбрд┐рд╕рдХреНрд▓реЗрдорд░ рдкрдврд╝реЗрдВ.
    рдЗрд╕ рдХреЛрдбрд▓реИрдм рдореЗрдВ рдмрд╛рдж рдореЗрдВ, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ. рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддреМрд░ рдкрд░ рдХрд┐рд╕реА рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдпрд╛ рдЙрдкрд▓рдмреНрдз рди рдХрд░реЗрдВ.
  6. рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

Firebase рдХреЗ рд▓рд┐рдП Cloud Storage рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

рдпрд╣ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди, Cloud Storage for Firebase рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдлрд╝реЛрдЯреЛ рдХреЛ рд╕реЗрд╡, рдЕрдкрд▓реЛрдб, рдФрд░ рд╢реЗрдпрд░ рдХрд░рддрд╛ рд╣реИ.

рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, Cloud Storage for Firebase рдХреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. Firebase рдХрдВрд╕реЛрд▓ рдХреЗ рдмрд╛рдПрдВ рдкреИрдирд▓ рдореЗрдВ, Build рдХреЛ рдмрдбрд╝рд╛ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, Storage рдХреЛ рдЪреБрдиреЗрдВ.
  2. рд╢реБрд░реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рдЕрдкрдиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдмрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдЪреБрдиреЗрдВ.
    US-WEST1, US-CENTRAL1, рдФрд░ US-EAST1 рдореЗрдВ рдореМрдЬреВрдж рдмрдХреЗрдЯ, Google Cloud Storage рдХреЗ рд▓рд┐рдП "рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдореБрдлрд╝реНрдд" рдЯрд┐рдпрд░ рдХрд╛ рдлрд╝рд╛рдпрджрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ. рдЕрдиреНрдп рд╕рднреА рдЬрдЧрд╣реЛрдВ рдкрд░ рдореМрдЬреВрдж рдмрдХреЗрдЯ рдХреЗ рд▓рд┐рдП, Google Cloud Storage рдХреА рдХреАрдордд рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ.
  4. рдЯреЗрд╕реНрдЯ рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбрд┐рд╕рдХреНрд▓реЗрдорд░ рдкрдврд╝реЗрдВ.
    рдЗрд╕ рдХреЛрдбрд▓реИрдм рдореЗрдВ рдмрд╛рдж рдореЗрдВ, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ. рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдмрдХреЗрдЯ рдХреЗ рд▓рд┐рдП, рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддреМрд░ рдкрд░ рдХрд┐рд╕реА рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдпрд╛ рдЙрдкрд▓рдмреНрдз рди рдХрд░реЗрдВ.
  5. рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

4. Firebase рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛

Firebase рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╕реАрдПрд▓рдЖрдИ) рдХреА рдорджрдж рд╕реЗ, Firebase рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рдиреАрдп рддреМрд░ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЕрдкрдиреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

  1. рд╕реАрдПрд▓рдЖрдИ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ npm рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
npm -g install firebase-tools@latest
  1. рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рд╕реАрдПрд▓рдЖрдИ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
firebase --version

рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ Firebase CLI рдХрд╛ рд╡рд░реНрд╢рди v13.9.0 рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдХрд╛ рд╣реЛ.

  1. рдпрд╣рд╛рдВ рджреА рдЧрдИ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░, Firebase CLI рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдВ:
firebase login

рдЖрдкрдиреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рдЕрдк рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡рд╣ Firebase Hosting рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд▓реЛрдХрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рд╕реЗ рдкреБрд▓ рдХрд░реЗ. рдпрд╣ рд╡рд╣реА рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХреЛрдбрд▓реИрдм рдореЗрдВ рдкрд╣рд▓реЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдерд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреБрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛.

  1. рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди, рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд▓реЛрдХрд▓ angularfire-start рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░ рд░рд╣реА рд╣реЛ.
  2. рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
firebase use --add
  1. рдЬрдм рдХрд╣рд╛ рдЬрд╛рдП, рддрдм рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдЪреБрдиреЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЛрдИ рджреВрд╕рд░рд╛ рдирд╛рдо рджреЗрдВ.

рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ (рдкреНрд░реЛрдбрдХреНрд╢рди, рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╡рдЧреИрд░рд╣) рд╣реИрдВ, рддреЛ рдПрд▓рд┐рдпрд╛рд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдлрд╝рд╛рдпрджреЗрдордВрдж рд╣реЛрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдХреЛрдбрд▓реИрдм рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд┐рд░реНрдлрд╝ default рдХреЗ рдПрд▓рд┐рдпрд╛рд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ.

  1. рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рджрд┐рдП рдЧрдП рдмрд╛рдХреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ.

5. AngularFire рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ Angular CLI рдФрд░ AngularFire рд╕реЗрдЯ рдЕрдк рдХрд░ рд▓рд┐рдпрд╛ рд╣реЛ.

  1. рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
npm install -g @angular/cli
  1. рдЗрд╕рдХреЗ рдмрд╛рдж, angularfire-start рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ, Angular CLI рдХрд╛ рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
ng add @angular/fire

рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд╝рд░реВрд░реА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреА.

  1. рдЬрдм рдХрд╣рд╛ рдЬрд╛рдП, рддрдм рд╕реНрдкреЗрд╕ рдмрд╛рд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ ng deploy -- hosting рд╕реЗ рд╕рд╣реА рдХрд╛ рдирд┐рд╢рд╛рди рд╣рдЯрд╛рдПрдВ. рдРрд░реЛ рдмрдЯрди рдФрд░ рд╕реНрдкреЗрд╕ рдмрд╛рд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдЪреБрдиреЗрдВ:
    • Authentication
    • Firestore
    • Cloud Messaging
    • Cloud Storage
  2. enter рджрдмрд╛рдПрдВ рдФрд░ рдмрд╛рдХреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ.
  3. "Install AngularFire" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.

6. рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХрдПрдВрдб рдмрдирд╛рдирд╛

рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдмреИрдХрдПрдВрдб рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЕрдкрдиреА Git рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА рдХрд┐рд╕реА рдмреНрд░рд╛рдВрдЪ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ.

рдЗрд╕ рд╕реЗрдХреНрд╢рди рдХреЗ рдЖрдЦрд┐рд░ рддрдХ, рдЖрдкрдХреЗ рдкрд╛рд╕ GitHub рдореЗрдВ рдореМрдЬреВрдж рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ App Hosting рдмреИрдХрдПрдВрдб рд╣реЛрдЧрд╛. рдЬрдм рднреА main рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдХреЛрдИ рдирдпрд╛ рдХрдорд┐рдЯ рдкреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддрдм рдпрд╣ рдмреИрдХрдПрдВрдб рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирдП рд╡рд░реНрд╢рди рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░реЗрдЧрд╛.

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВ:

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЬрд╝реАрд░реЛ рд╕реНрдЯреЗрдЯ, рдЬрд┐рд╕рдореЗрдВ 'рд╢реБрд░реВ рдХрд░реЗрдВ' рдмрдЯрди рд╣реИ

  1. рдмреИрдХрдПрдВрдб рдмрдирд╛рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рд╢реБрд░реВ рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
  2. рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ, рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЧрдИ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ.
  3. рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ:
    1. рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХреЛ / рдХреЗ рддреМрд░ рдкрд░ рд╕реЗрд╡ рдХрд░реЗрдВ
    2. рд▓рд╛рдЗрд╡ рдмреНрд░рд╛рдВрдЪ рдХреЛ main рдкрд░ рд╕реЗрдЯ рдХрд░реЛ
    3. рдЕрдкрдиреЗ-рдЖрдк рд░реЛрд▓ рдЖрдЙрдЯ рд╣реЛрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░рдирд╛
  4. рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб friendlychat-codelab рдХреЛ рдирд╛рдо рджреЗрдВ.
  5. "Firebase рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдпрд╛ рдЙрд╕реЗ рдЬреЛрдбрд╝реЗрдВ" рдореЗрдВ рдЬрд╛рдХрд░, "рдореМрдЬреВрджрд╛ Firebase рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЪреБрдиреЗрдВ" рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реЗ, рд╡рд╣ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЪреБрдиреЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛.
  6. "рдкреВрд░рд╛ рдХрд░реЗрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдирдП рдкреЗрдЬ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдирдП рдмреИрдХрдПрдВрдб рдХрд╛ рд╕реНрдЯреЗрдЯрд╕ рджрд┐рдЦреЗрдЧрд╛!
  7. рд░реЛрд▓рдЖрдЙрдЯ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, "рдбреЛрдореЗрди" рдореЗрдВ рдЬрд╛рдХрд░ рдЕрдкрдиреЗ рдореБрдлрд╝реНрдд рдбреЛрдореЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдбреАрдПрдирдПрд╕ рдкреНрд░реЛрдкрдЧреЗрд╢рди рдХреА рд╡рдЬрд╣ рд╕реЗ, рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ.

рдЖрдкрдиреЗ рд╢реБрд░реБрдЖрддреА рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХрд░ рджрд┐рдпрд╛ рд╣реИ! рдЬрдм рднреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреА main рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдХреЛрдИ рдирдИ рдХрдорд┐рдЯ рдкреБрд╢ рдХреА рдЬрд╛рдПрдЧреА, рддрдм рдЖрдкрдХреЛ Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ рдмрд┐рд▓реНрдб рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рд╢реБрд░реВ рд╣реЛрддрд╛ рджрд┐рдЦреЗрдЧрд╛. рд╕рд╛рде рд╣реА, рд░реЛрд▓рдЖрдЙрдЯ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдЕрдкрдиреЗ-рдЖрдк рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА.

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЬрд╝реАрд░реЛ рд╕реНрдЯреЗрдЯ, рдЬрд┐рд╕рдореЗрдВ 'рд╢реБрд░реВ рдХрд░реЗрдВ' рдмрдЯрди рд╣реИ

рдЖрдкрдХреЛ FriendlyChat рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╛рдЗрди-рдЗрди рд╕реНрдХреНрд░реАрди рджрд┐рдЦреЗрдЧреА. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ.

рдлрд╝рд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреА рдорджрдж рд╕реЗ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧреЗрдЧрд╛!

рдЕрдм рд╣рдо рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдЪреИрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ.

7. Firebase рдХреЛ рдЗрдВрдкреЛрд░реНрдЯ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

Firebase рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

рдЖрдкрдХреЛ Firebase SDK рдЯреВрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЙрд╕реЗ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдХреМрдирд╕реЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ.

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рдЬрд╛рдПрдВ
  2. "рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди" рдХрд╛рд░реНрдб рдореЗрдВ, рдЙрд╕ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рдХрдиреЗрдо рдЪреБрдиреЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ.
  3. Firebase SDK рд╕реНрдирд┐рдкреЗрдЯ рдкреИрдирд▓ рдореЗрдВ рдЬрд╛рдХрд░, "Config" рдЪреБрдиреЗрдВ.

рдЖрдкрдХреЛ рджрд┐рдЦреЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ /angularfire-start/src/environments/environment.ts рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рд╣реИ.

  1. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ angularfire-start/src/firebase-config.js рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ.

environment.ts

export const environment = {
  firebase: {
    apiKey: "API_KEY",
    authDomain: "PROJECT_ID.firebaseapp.com",
    projectId: "PROJECT_ID",
    storageBucket: "PROJECT_ID.firebasestorage.app",
    messagingSenderId: "SENDER_ID",
    appId: "APP_ID",
  },
};

AngularFire рд╕реЗрдЯрдЕрдк рджреЗрдЦреЗрдВ

рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪреБрдиреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдВ, /angularfire-start/src/app/app.config.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдиреЗ-рдЖрдк рдЬреБрдбрд╝ рдЧрдИ рд╣реИрдВ. рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди, Firebase рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рдкрд╛рддрд╛ рд╣реИ.

8. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛

AngularFire рдХреЛ app.config.ts рдореЗрдВ рдЗрдВрдкреЛрд░реНрдЯ рдФрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЕрдм рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЕрдм рдЖрдкрдХреЛ Firebase Authentication рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдЧреВ рдХрд░рдиреА рд╣реИ.

рдЕрдиреБрдорддрд┐ рд╡рд╛рд▓рд╛ рдбреЛрдореЗрди рдЬреЛрдбрд╝рдирд╛

Firebase Authentication, рд╕рд┐рд░реНрдлрд╝ рдЙрди рдбреЛрдореЗрди рд╕реЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рдХрдВрдЯреНрд░реЛрд▓ рдХрд┐рдпрд╛ рд╣реИ. рдбреЛрдореЗрди рдХреА рд╕реВрдЪреА рдореЗрдВ, рдореБрдлрд╝реНрдд рдореЗрдВ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбреЛрдореЗрди рдЬреЛрдбрд╝реЗрдВ:

  1. рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдЬрд╛рдПрдВ.
  2. рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдХрд╛ рдбреЛрдореЗрди рдХреЙрдкреА рдХрд░реЗрдВ.
  3. рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рдЬрд╛рдПрдВ.
  4. рдЕрдиреБрдорддрд┐ рдкрд╛ рдЪреБрдХреЗ рдбреЛрдореЗрди рдЯреИрдм рдХреЛ рдЪреБрдиреЗрдВ.
  5. рдбреЛрдореЗрди рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ App Hosting рдХреЗ рдмреИрдХрдПрдВрдб рдХрд╛ рдбреЛрдореЗрди рдЪрд┐рдкрдХрд╛рдПрдВ.

Google рд╕рд╛рдЗрди-рдЗрди рдХреА рдорджрдж рд╕реЗ, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Google рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ login рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕ рдХреЛрдбрд▓реИрдм рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Firebase рдХреЛ Google рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рддреМрд░ рдкрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рд╣реЛрдЧреА. рдЖрдкрдХреЛ рдкреЙрдк-рдЕрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, Firebase рдореЗрдВ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ.

  1. рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА /src/app/services/ рдореЗрдВ рдЬрд╛рдХрд░, chat.service.ts рдЦреЛрд▓реЗрдВ.
  2. login рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  3. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Signs-in Friendly Chat.
login() {
    signInWithPopup(this.auth, this.provider).then((result) => {
        const credential = GoogleAuthProvider.credentialFromResult(result);
        this.router.navigate(['/', 'chat']);
        return credential;
    })
}

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Log out рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддрдм logout рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ.

  1. рдлрд╝рд╛рдЗрд▓ src/app/services/chat.service.ts рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ.
  2. logout рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  3. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Logout of Friendly Chat.
logout() {
    signOut(this.auth).then(() => {
        this.router.navigate(['/', 'login'])
        console.log('signed out');
    }).catch((error) => {
        console.log('sign out error: ' + error);
    })
}

рдкреБрд╖реНрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛

рдЗрд╕рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд┐рдпрд╛ рд╣реИ. AngularFire, рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдПрдХ рдРрд╕рд╛ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдкреБрд╖реНрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ. рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рджреЗрдЦ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП.

  1. рдлрд╝рд╛рдЗрд▓ src/app/services/chat.service.ts рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ.
  2. рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ user$ рдвреВрдВрдвреЗрдВ.

chat.service.ts

// observable that is updated when the auth state changes
user$ = user(this.auth);

рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб, AngularFire рдлрд╝рдВрдХреНрд╢рди user рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ. рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ. рдпрд╣ рд╣рд░ рдмрд╛рд░ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдЧрд╛, рдЬрдм рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓реЗрдЧреА. рдЬреИрд╕реЗ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдЗрди рдЗрди рдпрд╛ рд╕рд╛рдЗрди рдЖрдЙрдЯ рдХрд░реЗрдЧрд╛. FriendlyChat рдореЗрдВ Angular рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ, рдЗрд╕ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ. рдЬреИрд╕реЗ, рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдирд╛, рд╣реЗрдбрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╡рдЧреИрд░рд╣.

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛

  1. "Adding Google Authentication" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдП рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ.
  3. рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдкреЗрдЬ рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, 'рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ' рдмрдЯрди рдФрд░ рдЕрдкрдиреЗ Google рдЦрд╛рддреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ. рдЕрдЧрд░ рдЖрдкрдХреЛ auth/operation-not-allowed рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдореИрд╕реЗрдЬ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, Google рд╕рд╛рдЗрди-рдЗрди рдХреЛ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ рдХреЗ рддреМрд░ рдкрд░ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рд╣реЛ.
  4. рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдлрд╝реЛрдЯреЛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: angularfire-3.png

9. Cloud Firestore рдореЗрдВ рдореИрд╕реЗрдЬ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ Cloud Firestore рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ. рдЗрд╕реЗ Firebase рдХрдВрд╕реЛрд▓ рдХреА рдорджрдж рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, Cloud Firestore рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.

рдбреЗрдЯрд╛ рдореЙрдбрд▓

Cloud Firestore рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдХрд▓реЗрдХреНрд╢рди, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рдлрд╝реАрд▓реНрдб, рдФрд░ рд╕рдм-рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рдмрд╛рдВрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЪреИрдЯ рдХреЗ рд╣рд░ рдореИрд╕реЗрдЬ рдХреЛ, messages рдирд╛рдо рдХреЗ рдЯреЙрдк-рд▓реЗрд╡рд▓ рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рддреМрд░ рдкрд░ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.

688d7bc5fb662b57.png

Cloud Firestore рдореЗрдВ рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝рдирд╛

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдЪреИрдЯ рдореИрд╕реЗрдЬ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Cloud Firestore рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.

рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреА рд╣реЛрдЧреА рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирдП рдореИрд╕реЗрдЬ рд▓рд┐рдЦ рд╕рдХреЗрдВ. рднреЗрдЬреЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛. рдпрд╣ messages рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рдореМрдЬреВрдж рдЖрдкрдХреЗ Cloud Firestore рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ, рдореИрд╕реЗрдЬ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдореИрд╕реЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ. add() рддрд░реАрдХреЗ рд╕реЗ, рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рдПрдХ рдирдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдЖрдИрдбреА рдЕрдкрдиреЗ-рдЖрдк рдЬрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИ.

  1. рдлрд╝рд╛рдЗрд▓ src/app/services/chat.service.ts рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ.
  2. addMessage рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  3. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Adds a text or image message to Cloud Firestore.
addMessage = async (
  textMessage: string | null,
  imageUrl: string | null,
): Promise<void | DocumentReference<DocumentData>> => {
  // ignore empty messages
  if (!textMessage && !imageUrl) {
    console.log(
      "addMessage was called without a message",
      textMessage,
      imageUrl,
    );
    return;
  }

  if (this.currentUser === null) {
    console.log("addMessage requires a signed-in user");
    return;
  }

  const message: ChatMessage = {
    name: this.currentUser.displayName,
    profilePicUrl: this.currentUser.photoURL,
    timestamp: serverTimestamp(),
    uid: this.currentUser?.uid,
  };

  textMessage && (message.text = textMessage);
  imageUrl && (message.imageUrl = imageUrl);

  try {
    const newMessageRef = await addDoc(
      collection(this.firestore, "messages"),
      message,
    );
    return newMessageRef;
  } catch (error) {
    console.error("Error writing new message to Firebase Database", error);
    return;
  }
};

рдореИрд╕реЗрдЬ рднреЗрдЬрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛

  1. "Post new chats to Firestore" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдП рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ.
  3. FriendlyChat рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░реЗрдВ. рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, "рдирдорд╕реНрддреЗ!" рдЬреИрд╕рд╛ рдХреЛрдИ рдореИрд╕реЗрдЬ рдбрд╛рд▓реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рднреЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рдореИрд╕реЗрдЬ рдХреЛ Cloud Firestore рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрднреА рдбреЗрдЯрд╛ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрдм рднреА рдбреЗрдЯрд╛ рдлрд┐рд░ рд╕реЗ рдкрд╛рдирд╛ рд╣реЛрдЧрд╛. рдпрд╣ рдХреЛрдбрд▓реИрдм рдХрд╛ рдЕрдЧрд▓рд╛ рд╕реЗрдХреНрд╢рди рд╣реИ.
  4. рдЖрдкрдХреЛ Firebase Console рдореЗрдВ, рдирдпрд╛ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛. Emulator Suite рдХрд╛ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЦреЛрд▓реЗрдВ. рдмрдирд╛рдПрдВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдХрд░, Firestore рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рднреА Firestore рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ messages рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ, рдирдпрд╛ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛:

6812efe7da395692.png

10. рдореИрд╕реЗрдЬ рдкрдврд╝рдирд╛

рдореИрд╕реЗрдЬ рд╕рд┐рдВрдХ рдХрд░рдирд╛

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореИрд╕реЗрдЬ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдРрд╕рд╛ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдРрд╕рд╛ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдПрд▓рд┐рдореЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирдП рдореИрд╕реЗрдЬ рджрд┐рдЦрд╛рдП.

рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рдирдП рдореИрд╕реЗрдЬ рдХреЛ рд╕реБрдиреЗ. рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдЖрдкрдХреЛ messages рдХрд▓реЗрдХреНрд╢рди рдХрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╡рд╛рдкрд╕ рдкрд╛рдирд╛ рд╣реЛрдЧрд╛. рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░, рдмрд╣реБрдд рд▓рдВрдмрд╛ рдЗрддрд┐рд╣рд╛рд╕ рди рджрд┐рдЦреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЪреИрдЯ рдХреЗ рд╕рд┐рд░реНрдлрд╝ рдкрд┐рдЫрд▓реЗ 12 рдореИрд╕реЗрдЬ рджрд┐рдЦрд╛рдПрдВрдЧреЗ.

  1. рдлрд╝рд╛рдЗрд▓ src/app/services/chat.service.ts рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ.
  2. loadMessages рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  3. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Loads chat message history and listens for upcoming ones.
loadMessages = () => {
  // Create the query to load the last 12 messages and listen for new ones.
  const recentMessagesQuery = query(collection(this.firestore, 'messages'), orderBy('timestamp', 'desc'), limit(12));
  // Start listening to the query.
  return collectionData(recentMessagesQuery);
}

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рдореИрд╕реЗрдЬ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХрд▓реЗрдХреНрд╢рди рдкрд░ рдХреНрд╡реЗрд░реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, collection рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рдХрд▓реЗрдХреНрд╢рди рдХрд╛ рдбреЗрдЯрд╛ рд╕реБрдирдирд╛ рд╣реИ. рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, messages рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рд╣реБрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╕реБрдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ. рдЗрд╕реА рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рдЪреИрдЯ рдореИрд╕реЗрдЬ рд╕реЗрд╡ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ. рдЖрдкрдиреЗ limit(12) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рд╕рд┐рд░реНрдлрд╝ рдкрд┐рдЫрд▓реЗ 12 рдореИрд╕реЗрдЬ рд╕реБрдирдиреЗ рдХреА рд╕реАрдорд╛ рднреА рд▓рд╛рдЧреВ рдХреА рд╣реИ. рд╕рд╛рде рд╣реА, orderBy('timestamp', 'desc') рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдореИрд╕реЗрдЬ рдХреЛ рддрд╛рд░реАрдЦ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдХреНрд░рдо рдореЗрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдкрдХреЛ 12 рдирдП рдореИрд╕реЗрдЬ рдорд┐рд▓ рд╕рдХреЗрдВ.

collectionData рдлрд╝рдВрдХреНрд╢рди, рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ. рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛. рдРрд╕рд╛ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдХреЛрдИ рдореИрд╕реЗрдЬ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ рдЙрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реЛ. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, Cloud Firestore рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝реЗрдВ.

рдореИрд╕реЗрдЬ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛

  1. "Show new chats in the UI" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдП рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ.
  3. FriendlyChat рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░реЗрдВ. рдЖрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рдЬреЛ рдореИрд╕реЗрдЬ рдмрдирд╛рдП рдереЗ рд╡реЗ FriendlyChat рдХреЗ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдореЗрдВ рджрд┐рдЦрдиреЗ рдЪрд╛рд╣рд┐рдП. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдирдП рдореИрд╕реЗрдЬ рд▓рд┐рдЦреЗрдВ. рд╡реЗ рддреБрд░рдВрдд рджрд┐рдЦрдиреЗ рдЪрд╛рд╣рд┐рдП.
  4. (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ) Emulator Suite рдХреЗ Firestore рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдХрд░, рдореИрдиреНрдпреБрдЕрд▓ рддрд░реАрдХреЗ рд╕реЗ рдирдП рдореИрд╕реЗрдЬ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореМрдЬреВрджрд╛ рдореИрд╕реЗрдЬ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдорд┐рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдХрд┐рдП рдЧрдП рд╕рднреА рдмрджрд▓рд╛рд╡, рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдореЗрдВ рджрд┐рдЦрдиреЗ рдЪрд╛рд╣рд┐рдП.

рдмрдзрд╛рдИ рд╣реЛ! рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Cloud Firestore рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝реЗ рд╣реИрдВ!

angularfire-2.png

11. рдПрдЖрдИ рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдЬреЛрдбрд╝рдирд╛

рдЪреИрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, Google рдХреЗ рдПрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.

Google AI API рдкрд╛рд╕рдХреЛрдб рдкрд╛рдирд╛

  1. Google AI Studio рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдкреАрдЖрдИ рдкрд╛рд╕рдХреЛрдб рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  2. рдЗрд╕ рдХреЛрдбрд▓реИрдм рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ. рдпрд╣ рдкреНрд░реЙрдореНрдкреНрдЯ, Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рд░ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ.
  3. рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдкреАрдЖрдИ рдкрд╛рд╕рдХреЛрдб рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  4. рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ рдкрд╛рд╕рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛

рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдПрдХ Cloud рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдЧрд╛. рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, Firestore рдореЗрдВ messages рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рдирдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдЧрд╛. рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, Gemini рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдореМрдЬреВрдж response рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рд▓рд┐рдЦреЗрдЧрд╛.

  1. Gemini API рдХреА рдорджрдж рд╕реЗ рдЪреИрдЯрдмреЙрдЯ рдмрдирд╛рдПрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреЗрдЬ рдкрд░, Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  2. рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдЪрд░рдг рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдВ рджреА рдЧрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рд╕реЗрдЯ рдХрд░реЗрдВ:
    • Gemini API Provider: Google AI
    • Google AI API рдкрд╛рд╕рдХреЛрдб: рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рдХреЛрдб рдЪрд┐рдкрдХрд╛рдПрдВ рдФрд░ рд╕реАрдХреНрд░реЗрдЯ рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
    • Firestore рдХрд▓реЗрдХреНрд╢рди рдХрд╛ рдкрд╛рде: messages
    • рдкреНрд░реЙрдореНрдкреНрдЯ рдлрд╝реАрд▓реНрдб: text
    • рдЬрд╡рд╛рдм рдХрд╛ рдлрд╝реАрд▓реНрдб: response
    • рдСрд░реНрдбрд░ рдлрд╝реАрд▓реНрдб: timestamp
    • рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ: Keep your answers short, informal, and helpful. Use emojis when possible.
  3. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  4. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ

рдПрдЖрдИ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ

FriendlyChat рдореЗрдВ, рдПрдЖрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдорд┐рд▓реЗ рдЬрд╡рд╛рдмреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдб рдореМрдЬреВрдж рд╣реИ. рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдирдпрд╛ рдЪреИрдЯ рдореИрд╕реЗрдЬ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛!

  1. FriendlyChat рдЦреЛрд▓реЗрдВ рдФрд░ рдХреЛрдИ рдореИрд╕реЗрдЬ рднреЗрдЬреЗрдВ.
  2. рдХреБрдЫ рджреЗрд░ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╡рд╛рдм рджрд┐рдЦреЗрдЧрд╛. рдЗрд╕рдореЗрдВ рдЖрдЦрд┐рд░ рдореЗрдВ тЬи ai generated рдиреЛрдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ рдЬрдирд░реЗрдЯрд┐рд╡ рдПрдЖрдИ рдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рдЕрд╕рд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ.

12. рдЗрдореЗрдЬ рднреЗрдЬрдирд╛

рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреА рд╣реИ рдЬреЛ рдЗрдореЗрдЬ рд╢реЗрдпрд░ рдХрд░рддреА рд╣реИ.

Cloud Firestore, рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдбреЗрдЯрд╛ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, Cloud Storage рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ. Cloud Storage for Firebase, рдлрд╝рд╛рдЗрд▓/рдмреНрд▓реЙрдм рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рд╕реЗрд╡рд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рд╣рдорд╛рд░реЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рд╢реЗрдпрд░ рдХреА рдЧрдИ рдХрд┐рд╕реА рднреА рдЗрдореЗрдЬ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.

рдЗрдореЗрдЬ рдХреЛ Cloud Storage рдореЗрдВ рд╕реЗрд╡ рдХрд░рдирд╛

рдЗрд╕ рдХреЛрдбрд▓реИрдм рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ. рдпрд╣ рдмрдЯрди, рдлрд╝рд╛рдЗрд▓ рдкрд┐рдХрд░ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ. рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рдж, saveImageMessage рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЪреБрдиреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд░реЗрдлрд╝рд░рдВрд╕ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ. saveImageMessage рдлрд╝рдВрдХреНрд╢рди рдпреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рдпрд╣ рдЪреИрдЯ рдлрд╝реАрдб рдореЗрдВ "рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░" рдЪреИрдЯ рдореИрд╕реЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрдореЗрдЬ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ "рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ" рдРрдирд┐рдореЗрд╢рди рджрд┐рдЦреЗ.
  2. рдЗрд╕ рдкрд╛рде рдкрд░, Cloud Storage рдореЗрдВ рдЗрдореЗрдЬ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ: /<uid>/<file_name>
  3. рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдЗрдореЗрдЬ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдпреВрдЖрд░рдПрд▓ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддреМрд░ рдкрд░ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
  4. рдпрд╣ рдХреБрдХреА, рдЪреИрдЯ рдореИрд╕реЗрдЬ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИ. рдЗрд╕рдореЗрдВ, рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд▓реЛрдб рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЗрдореЗрдЬ рдХреЗ рдмрдЬрд╛рдп, рдирдИ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдЗрдореЗрдЬ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдпреВрдЖрд░рдПрд▓ рд╣реЛрддрд╛ рд╣реИ.

рдЕрдм рдЗрдореЗрдЬ рднреЗрдЬрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝реЗрдВ:

  1. рдлрд╝рд╛рдЗрд▓ src/chat.service.ts рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ.
  2. saveImageMessage рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  3. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Saves a new message containing an image in Firestore.
// This first saves the image in Firebase storage.
saveImageMessage = async(file: any) => {
  try {
    // 1 - Add a message with a loading icon that will get updated with the shared image.
    const messageRef = await this.addMessage(null, this.LOADING_IMAGE_URL);

    // 2 - Upload the image to Cloud Storage.
    const filePath = `${this.auth.currentUser?.uid}/${file.name}`;
    const newImageRef = ref(this.storage, filePath);
    const fileSnapshot = await uploadBytesResumable(newImageRef, file);

    // 3 - Generate a public URL for the file.
    const publicImageUrl = await getDownloadURL(newImageRef);

    // 4 - Update the chat message placeholder with the image's URL.
    messageRef ?
    await updateDoc(messageRef, {
      imageUrl: publicImageUrl,
      storageUri: fileSnapshot.metadata.fullPath
    }): null;
  } catch (error) {
    console.error('There was an error uploading a file to Cloud Storage:', error);
  }
}

рдЗрдореЗрдЬ рднреЗрдЬрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛

  1. "Add the ability to post images" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдП рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ.
  3. FriendlyChat рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░реЗрдВ. рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдиреАрдЪреЗ рдмрд╛рдИрдВ рдУрд░ рдореМрдЬреВрдж рдЗрдореЗрдЬ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдЯрди angularfire-4.png рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдкрд┐рдХрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдХреЛрдИ рдЗрдореЗрдЬ рдлрд╝рд╛рдЗрд▓ рдЪреБрдиреЗрдВ. рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдЗрдореЗрдЬ рдЪрд╛рд╣рд┐рдП, рддреЛ рдХреЙрдлрд╝реА рдХрдк рдХреА рдЗрд╕ рдЕрдЪреНрдЫреА рдЗрдореЗрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
  4. рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпреВрдЖрдИ) рдореЗрдВ, рдЪреБрдиреА рдЧрдИ рдЗрдореЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛: angularfire-2.png

рдЕрдЧрд░ рдЖрдкрдиреЗ рд╕рд╛рдЗрди рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрдореЗрдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛. рдЗрд╕рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЗрдореЗрдЬ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд╛рдЗрди рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

13. рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдУ

рдЕрдм рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдЬреЛрдбрд╝рдиреА рд╣реЛрдЧреА. рдЬрдм рдЪреИрдЯ рдореЗрдВ рдирдП рдореИрд╕реЗрдЬ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рддрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕рдХреА рд╕реВрдЪрдирд╛ рджреЗрдЧрд╛. Firebase рдХреНрд▓рд╛рдЙрдб рд╕реЗ рдореИрд╕реЗрдЬ (FCM) рдПрдХ рдРрд╕рд╛ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рднрд░реЛрд╕реЗрдордВрдж рддрд░реАрдХреЗ рд╕реЗ рдореИрд╕реЗрдЬ рдФрд░ рд╕реВрдЪрдирд╛рдПрдВ рдбрд┐рд▓реАрд╡рд░ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ.

FCM рд╕реЗрд╡рд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдХрд░ рдЬреЛрдбрд╝рдирд╛

рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ. рдпрд╣ рд╡реЗрдм рд╕реВрдЪрдирд╛рдПрдВ рдкрд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ.

AngularFire рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреА рд╕реЗрд╡рд╛ рджреЗрдиреЗ рд╡рд╛рд▓реА рдХрдВрдкрдиреА рдХреЛ рдкрд╣рд▓реЗ рд╣реА рд╕реЗрдЯ рдЕрдк рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП. рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ /angularfire-start/src/app/app.config.ts рдХреЗ рдЗрдВрдкреЛрд░реНрдЯ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдпрд╣ рдХреЛрдб рдореМрдЬреВрдж рд╣реЛ

provideMessaging(() => {
    return getMessaging();
}),

app/app.config.ts

рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░ рдХреЛ рд╕рд┐рд░реНрдлрд╝ Firebase Cloud Messaging SDK рдЯреВрд▓ рдХреЛ рд▓реЛрдб рдФрд░ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдпрд╣ SDK рдЯреВрд▓ рдЕрдкрдиреЗ-рдЖрдк рдХрд░рддрд╛ рд╣реИ.

FCM рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдкрд╛рдирд╛

рдХрд┐рд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рдкрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдХрд┐рд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдЗрди рдЗрди рдХрд░рддрд╛ рд╣реИ, рддрдм saveMessagingDeviceToken рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ. рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ FCM рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдорд┐рд▓реЗрдЧрд╛. рдЗрд╕реЗ Cloud Firestore рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ.

chat.service.ts

  1. saveMessagingDeviceToken рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  2. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Saves the messaging device token to Cloud Firestore.
saveMessagingDeviceToken= async () => {
    try {
      const currentToken = await getToken(this.messaging);
      if (currentToken) {
        console.log('Got FCM device token:', currentToken);
        // Saving the Device Token to Cloud Firestore.
        const tokenRef = doc(this.firestore, 'fcmTokens', currentToken);
        await setDoc(tokenRef, { uid: this.auth.currentUser?.uid });

        // This will fire when a message is received while the app is in the foreground.
        // When the app is in the background, firebase-messaging-sw.js will receive the message instead.
        onMessage(this.messaging, (message) => {
          console.log(
            'New foreground notification from Firebase Messaging!',
            message.notification
          );
        });
      } else {
        // Need to request permissions to show notifications.
        this.requestNotificationsPermissions();
      }
    } catch(error) {
      console.error('Unable to get messaging token.', error);
    };
}

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЛрдб рд╢реБрд░реВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛. рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рддрдм рдорд┐рд▓реЗрдЧреА, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛. рдпрд╣ рдХреЛрдбрд▓реИрдм рдХрд╛ рдЕрдЧрд▓рд╛ рдЪрд░рдг рд╣реИ.

рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рд╣реЛрдЧреА, рддрдм рдЖрдкрдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдРрд╕реЗ рдореЗрдВ, рдЖрдкрдХреЛ requestPermission() рддрд░реАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдЗрд╕рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рджрд┐рдЦреЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреА рдЬрд╛рдПрдЧреА ( рдЗрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ).

8b9d0c66dc36153d.png

  1. рдлрд╝рд╛рдЗрд▓ src/app/services/chat.service.ts рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ.
  2. requestNotificationsPermissions рдлрд╝рдВрдХреНрд╢рди рдвреВрдВрдвреЗрдВ.
  3. рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЧрд╣ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

chat.service.ts

// Requests permissions to show notifications.
requestNotificationsPermissions = async () => {
    console.log('Requesting notifications permission...');
    const permission = await Notification.requestPermission();

    if (permission === 'granted') {
      console.log('Notification permission granted.');
      // Notification permission granted.
      await this.saveMessagingDeviceToken();
    } else {
      console.log('Unable to get permission to notify.');
    }
}

рдЕрдкрдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдкрд╛рдирд╛

  1. "Add the ability to post images" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдП рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ.
  3. FriendlyChat рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░реЗрдВ. рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╡рд╛рд▓рд╛ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рджрд┐рдЦреЗрдЧрд╛: bd3454e6dbfb6723.png
  4. рдЕрдиреБрдорддрд┐ рджреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  5. рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ JavaScript рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ. рдЖрдкрдХреЛ рдпрд╣ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛: Got FCM device token: cWL6w:APA91bHP...4jDPL_A-wPP06GJp1OuekTaTZI5K2Tu
  6. рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЯреЛрдХрди рдХреЙрдкреА рдХрд░реЗрдВ. рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рдХреЛрдбрд▓реИрдм рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрдбрд╝реЗрдЧреА.

рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реВрдЪрдирд╛ рднреЗрдЬрдирд╛

рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рд╣реИ. рдЗрд╕рд▓рд┐рдП, рд╕реВрдЪрдирд╛ рднреЗрдЬреА рдЬрд╛ рд╕рдХрддреА рд╣реИ.

  1. Firebase рдХрдВрд╕реЛрд▓ рдХрд╛ Cloud Messaging рдЯреИрдм рдЦреЛрд▓реЗрдВ.
  2. "рдирдИ рд╕реВрдЪрдирд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  3. рд╕реВрдЪрдирд╛ рдХрд╛ рдЯрд╛рдЗрдЯрд▓ рдФрд░ рд╕реВрдЪрдирд╛ рдХрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдбрд╛рд▓реЗрдВ.
  4. рд╕реНрдХреНрд░реАрди рдХреЗ рджрд╛рдИрдВ рдУрд░, "рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдореИрд╕реЗрдЬ рднреЗрдЬреЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  5. рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ JavaScript рдХрдВрд╕реЛрд▓ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреЛрдХрди рдбрд╛рд▓реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд▓рд╕ ("+") рдХреЗ рдирд┐рд╢рд╛рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  6. "рдЬрд╛рдВрдЪ рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдЕрдЧрд░ рдЖрдкрдХрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд░рдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ JavaScript рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕реВрдЪрдирд╛ рджрд┐рдЦреЗрдЧреА.

рдЕрдЧрд░ рдЖрдкрдХрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП. рдЬреИрд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

de79e8638a45864c.png

14. Cloud Firestore рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рджреЗрдЦрдирд╛

Cloud Firestore, рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ, рд╕реБрд░рдХреНрд╖рд╛, рдФрд░ рдбреЗрдЯрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдореЛрдВ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ.

рдЗрд╕ рдХреЛрдбрд▓реИрдм рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдиреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП "рдЯреЗрд╕реНрдЯ рдореЛрдб" рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛. рдЗрд╕рд╕реЗ рдЖрдкрдиреЗ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдХреЗ рдРрдХреНрд╕реЗрд╕ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдХреНрд╢рди рдХреЗ рдирд┐рдпрдо рдЯреИрдм рдореЗрдВ рдЬрд╛рдХрд░, рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдлрд╝рд┐рд▓рд╣рд╛рд▓, рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдпрдо рджрд┐рдЦреЗрдВрдЧреЗ. рдЗрдирд╕реЗ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдХреЗ рдРрдХреНрд╕реЗрд╕ рдкрд░ рдХреЛрдИ рдкрд╛рдмрдВрджреА рдирд╣реАрдВ рд▓рдЧрддреА. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЖрдкрдХреЗ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА рдХрд▓реЗрдХреНрд╢рди рдХреЛ рдкрдврд╝ рдФрд░ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ.

рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХреБрдЫ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:

firestore.rules

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    // Messages:
    //   - Anyone can read.
    //   - Authenticated users can add and edit messages.
    //   - Validation: Check name is same as auth token and text length below 300 char or that imageUrl is a URL.
    //   - Deletes are not allowed.
    match /messages/{messageId} {
      allow read;
      allow create, update: if request.auth != null
                    && request.resource.data.name == request.auth.token.name
                    && (request.resource.data.text is string
                      && request.resource.data.text.size() <= 300
                      || request.resource.data.imageUrl is string
                      && request.resource.data.imageUrl.matches('https?://.*'));
      allow delete: if false;
    }
    // FCM Tokens:
    //   - Anyone can write their token.
    //   - Reading list of tokens is not allowed.
    match /fcmTokens/{token} {
      allow read: if false;
      allow write;
    }
  }
}

рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдирд┐рдпрдо, Emulator Suite рдореЗрдВ рдЕрдкрдиреЗ-рдЖрдк рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП.

Cloud Storage рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рджреЗрдЦрдирд╛

Cloud Storage for Firebase, рдРрдХреНрд╕реЗрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рд░, рд╕реБрд░рдХреНрд╖рд╛, рдФрд░ рдбреЗрдЯрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдореЛрдВ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ.

рдЗрд╕ рдХреЛрдбрд▓реИрдм рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдиреЗ Cloud Storage рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рдерд╛. рдЗрд╕ рдирд┐рдпрдо рдХреЗ рддрд╣рдд, рд╕рд┐рд░реНрдлрд╝ рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА Cloud Storage рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, Storage рд╕реЗрдХреНрд╢рди рдХреЗ рдирд┐рдпрдо рдЯреИрдм рдореЗрдВ рдЬрд╛рдХрд░, рдирд┐рдпрдореЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЙрдирдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдпрдо рджрд┐рдЦреЗрдЧрд╛. рдЗрд╕рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐, рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдмрдХреЗрдЯ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝ рдФрд░ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ.

рдЖрдкрдХреЛ рдЗрди рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  • рд╣рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд┐рд░реНрдлрд╝ рдЕрдкрдиреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛
  • Cloud Storage рд╕реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛
  • рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЗрдореЗрдЬ рд╣реЛрдВ
  • рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдЗрдореЗрдЬ рдХрд╛ рд╕рд╛рдЗрдЬрд╝ рдЬрд╝реНрдпрд╛рджрд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ 5 рдПрдордмреА рддрдХ рд╕реАрдорд┐рдд рдХрд░реЗрдВ

рдЗрд╕реЗ рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

storage.rules

rules_version = '2';

// Returns true if the uploaded file is an image and its size is below the given number of MB.
function isImageBelowMaxSize(maxSizeMB) {
  return request.resource.size < maxSizeMB * 1024 * 1024
      && request.resource.contentType.matches('image/.*');
}

service firebase.storage {
  match /b/{bucket}/o {
    match /{userId}/{messageId}/{fileName} {
      allow write: if request.auth != null && request.auth.uid == userId && isImageBelowMaxSize(5);
      allow read;
    }
  }
}

15. рдмрдзрд╛рдИ рд╣реЛ!

рдЖрдкрдиреЗ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдореЗрдВ рдЪреИрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Firebase рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ!

рдЖрдкрдиреЗ рдХреНрдпрд╛-рдХреНрдпрд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ

  • Firebase App Hosting
  • Firebase рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛
  • Cloud Firestore
  • Cloud Storage рдХреЗ рд▓рд┐рдП Firebase SDK
  • Firebase рдХреНрд▓рд╛рдЙрдб рд╕реЗ рдореИрд╕реЗрдЬ
  • Firebase рдкреНрд░рджрд░реНрд╢рди рдореЙрдирд┐рдЯрд░ рдХрд░рдирд╛

рдЕрдЧрд▓реЗ рдЪрд░рдг

рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдиреЗрдВ

16. [рд╡реИрдХрд▓реНрдкрд┐рдХ] рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

Firebase App Check рдХреА рдорджрдж рд╕реЗ, рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрдирдЪрд╛рд╣реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдХреЛ рдЧрд▓рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рдЪрд░рдг рдореЗрдВ, рдЖрдкрдХреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреА рд╣реЛрдЧреА. рд╕рд╛рде рд╣реА, App Check рдФрд░ reCAPTCHA Enterprise рдХреА рдорджрдж рд╕реЗ, рдмрд┐рдирд╛ рдЕрдиреБрдорддрд┐ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ App Check рдФрд░ reCaptcha рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.

reCaptcha Enterprise рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛

  1. Cloud Console рдореЗрдВ, рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдХрд░ reCaptcha Enterprise рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ рдЪреБрдиреЗрдВ.
  2. рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╕реЗрд╡рд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдХреА рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдореБрддрд╛рдмрд┐рдХ, рдбрд┐рд╕рдкреНрд▓реЗ рдиреЗрдо рдбрд╛рд▓реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рдЯрд╛рдЗрдк рдХреЗ рддреМрд░ рдкрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЪреБрдиреЗрдВ.
  4. рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдП рдЧрдП рдпреВрдЖрд░рдПрд▓ рдХреЛ рдбреЛрдореЗрди рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ. рд╕рд╛рде рд╣реА, рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ "рдЪреЗрдХрдмреЙрдХреНрд╕ рдЪреИрд▓реЗрдВрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ" рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реЛ.
  5. рдХреА рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдХреА рдХреЛ рдХрд┐рд╕реА рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдЧрд╣ рдкрд░ рд╕реЗрд╡ рдХрд░рдХреЗ рд░рдЦреЗрдВ. рдЖрдкрдХреЛ рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА.

App Check рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░рдирд╛

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдмрд╛рдПрдВ рдкреИрдирд▓ рдореЗрдВ рдореМрдЬреВрдж Build рд╕реЗрдХреНрд╢рди рдкрд░ рдЬрд╛рдПрдВ.
  2. App Check рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, App Check рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЯреИрдм рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  3. рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬрдм рдЖрдкрд╕реЗ рдХрд╣рд╛ рдЬрд╛рдП, рддрдм reCaptcha Enterprise рдХреА рдХреБрдВрдЬреА рдбрд╛рд▓реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реЗрд╡ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
  4. рдПрдкреАрдЖрдИ рд╡реНрдпреВ рдореЗрдВ, рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдЪреБрдиреЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. Cloud Firestore рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ.

рдЕрдм App Check рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП! рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░реЗрдВ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рдореИрд╕реЗрдЬ рджреЗрдЦрдиреЗ рдпрд╛ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ. рдЖрдкрдХреЛ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдпрд╣ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛:

Uncaught Error in snapshot listener: FirebaseError: [code=permission-denied]: Missing or insufficient permissions.

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ App Check, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдирдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ. рдЕрдм рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝реЗрдВ.

рдЕрдкрдиреА environment.ts рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ environment рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ reCAPTCHAEnterpriseKey рдЬреЛрдбрд╝реЗрдВ.

export const environment = {
  firebase: {
    apiKey: 'API_KEY',
    authDomain: 'PROJECT_ID.firebaseapp.com',
    databaseURL: 'https://PROJECT_ID.firebaseio.com',
    projectId: 'PROJECT_ID',
    storageBucket: 'PROJECT_ID.firebasestorage.app',
    messagingSenderId: 'SENDER_ID',
    appId: 'APP_ID',
    measurementId: 'G-MEASUREMENT_ID',
  },
  reCAPTCHAEnterpriseKey: {
    key: "Replace with your recaptcha enterprise site key"
  },
};

key рдХреА рд╡реИрд▓реНрдпреВ рдХреЛ рдЕрдкрдиреЗ reCaptcha Enterprise рдЯреЛрдХрди рд╕реЗ рдмрджрд▓реЗрдВ.

рдЗрд╕рдХреЗ рдмрд╛рдж, app.config.ts рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдпреЗ рдЗрдВрдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реЗрдВ:

import { getApp } from '@angular/fire/app';
import {
  ReCaptchaEnterpriseProvider,
  initializeAppCheck,
  provideAppCheck,
} from '@angular/fire/app-check';

рдЙрд╕реА app.config.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдпрд╣ рдПрд▓рд╛рди рдЬреЛрдбрд╝реЗрдВ:

declare global {
  var FIREBASE_APPCHECK_DEBUG_TOKEN: boolean;
}

@NgModule({ ...

рдЗрдВрдкреЛрд░реНрдЯ рдореЗрдВ, ReCaptchaEnterpriseProvider рдХреА рдорджрдж рд╕реЗ App Check рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ. рд╕рд╛рде рд╣реА, рдЯреЛрдХрди рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рд░реАрдлрд╝реНрд░реЗрд╢ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, isTokenAutoRefreshEnabled рдХреЛ true рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ.

imports: [
BrowserModule,
AppRoutingModule,
CommonModule,
FormsModule,
provideFirebaseApp(() => initializeApp(environment.firebase)),
provideAppCheck(() => {
const appCheck = initializeAppCheck(getApp(), {
  provider: new ReCaptchaEnterpriseProvider(
  environment.reCAPTCHAEnterpriseKey.key
  ),
  isTokenAutoRefreshEnabled: true,
  });
  if (location.hostname === 'localhost') {
    self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
  }
  return appCheck;
}),

рд╕реНрдерд╛рдиреАрдп рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, self.FIREBASE_APPCHECK_DEBUG_TOKEN рдХреЛ true рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ. localhost рдореЗрдВ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░рдиреЗ рдкрд░, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдбреАрдмрдЧ рдЯреЛрдХрди рд▓реЙрдЧ рд╣реЛ рдЬрд╛рдПрдЧрд╛. рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

App Check debug token: CEFC0C76-7891-494B-B764-349BDFD00D00. You will need to add it to your app's App Check settings in the Firebase console for it to work.

рдЕрдм Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, App Check рдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реНрдпреВ рдкрд░ рдЬрд╛рдПрдВ.

рдУрд╡рд░рдлрд╝реНрд▓реЛ рдореЗрдиреНрдпреВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдбреАрдмрдЧ рдЯреЛрдХрди рдореИрдиреЗрдЬ рдХрд░реЗрдВ рдЪреБрдиреЗрдВ.

рдЗрд╕рдХреЗ рдмрд╛рдж, рдбреАрдмрдЧ рдЯреЛрдХрди рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдХрдВрд╕реЛрд▓ рд╕реЗ рдбреАрдмрдЧ рдЯреЛрдХрди рдХреЛ рдЪрд┐рдкрдХрд╛рдПрдВ.

chat.service.ts рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдпрд╣ рдЗрдВрдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реЗрдВ:

import { AppCheck } from '@angular/fire/app-check';

рдЙрд╕реА chat.service.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, App Check рдХреЛ рдЕрдиреНрдп Firebase рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ.

export class ChatService {
appCheck: AppCheck = inject(AppCheck);
...
  1. "App Check рдХреА рдорджрдж рд╕реЗ, рдмрд┐рдирд╛ рдЕрдиреБрдорддрд┐ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ" рдореИрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдкреБрд╢ рдХрд░реЗрдВ.
  2. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ App Hosting рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдП рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдВ.

рдмрдзрд╛рдИ рд╣реЛ! рдЕрдм рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ App Check рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рдо рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП.