Cloud Firestore + Android рдмрд╕ рд╣реИ

рдЗрддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, Google рдиреЗ Cloud Firestore рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдерд╛ред рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдПрдХ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд NoSQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдЬреЛ Google рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред


рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ


рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдЖрдкрдХреЛ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯреЛрд░ рдФрд░ рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЙрддреНрдХреГрд╖реНрдЯ рддреБрд▓рдирд╛ рд╣реИред


рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛


Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдХреНрд░рд┐рдПрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХреНрд╕реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЪреБрдиреЗрдВред рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЛрдб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдПрдХреНрд╕реЗрд╕ рдореЛрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:


  1. рдпрд╣рд╛рдВ рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдЬреЛрдбрд╝реЗрдВ ред
  2. рдПрдкреНрд▓рд┐рдХреЗрд╢рди / build.gradle рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ
    implementation 'com.google.firebase:firebase-firestore:18.1.0'

рдЕрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред


рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд╡реЗрджрди рд▓рд┐рдЦрд╛ред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╛рдпрд░рдмреЗрд╕ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ google-services.json рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рд╕рдВрд░рдЪрдирд╛


рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрдЧреНрд░рд╣ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рджреГрд╢реНрдп рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдЧреНрд░рд╣ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИред рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛


рдХрд┐рд╕реА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ


 remoteDB.collection(тАЬTasksтАЭ) .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

рдпрд╣рд╛рдВ рд╣рдо рдХрд╛рд░реНрдп рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢реНрди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


 remoteDB.collection(тАЬTasksтАЭ) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

рдпрд╣рд╛рдВ рд╣рдо рдХрд╛рд░реНрдп рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХ рдХреНрд╖реЗрддреНрд░ рдЯрд╛рд╕реНрдХ 1 рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред


рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рд╣рдорд╛рд░реА рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


 remoteDB.collection(тАЬTasksтАЭ) .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents val taskList: List<RemoteTask> = querySnapshot.toObjects(RemoteTask::class.java) } .addOnFailureListener { exception -> //      } } 

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


 val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдирдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдбреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВ


 val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .document("New task") .set(taskData) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

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


рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ / рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк


 remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ


рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ


 remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error -> // querySnapshot -   // error -  } 

querySnapshot.documents - рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рдЕрджреНрдпрддрди рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ
querySnapshot.documentChanges - рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред 3 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╡ рд╣реИрдВ
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛,
рд╕рдВрд╢реЛрдзрд┐рдд - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
рд╣рдЯрд╛рдП рдЧрдП - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛


рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ


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


  1. Node.js рдФрд░ npm рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  2. рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдлрд╛рдпрд░рдмреЗрд╕-рдПрдбрдорд┐рди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
    npm install firebase-admin --save
  3. рд╕рдВрдЧреНрд░рд╣ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЯрд╛рд╕реНрдХ.рдЬрд╕рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
  4. рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
  5. рдлрд╝рд╛рдЗрд▓ Export.js рдореЗрдВ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ
    рдЖрд╡рд╢реНрдпрдХрддрд╛ ('./ firestore_key.json') - рдкрд╣реБрдБрдЪ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ред рдореИрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдерд╛
    <You_DATABASE> - рдЖрдкрдХреЗ рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдмреЗрд╕ рдХрд╛ рдирд╛рдо
    "./json/Tasks.json" - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ
    ['рдмрдирд╛рдпрд╛'] - рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА
  6. рд▓рд┐рдкрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
    node export.js
    рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбреИрд▓реЗрдВрдЧреНрдпреВрдПрди рдХреЗ рдШрдЯрдирд╛рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВрдиреЗ рдЕрдкрдиреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдХрд┐рд╕реА рднреА рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЗрд░реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд▓рдЧрднрдЧ 15,000 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░ рдкреНрд░рд╢реНрди рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИрдВ рдФрд░ рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рд╣реИред рд░реВрдо рдФрд░ рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд┐рдЧреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЙрдб рдлрд╛рдпрд░рд╕реНрдЯрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдлреНрдд рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐ рджрд┐рди рдПрдХ рдореБрдлреНрдд рдЯреИрд░рд┐рдл рдкрд░, рдЖрдк 50,000 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, 20,000 рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ 20,000 рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди

Source: https://habr.com/ru/post/hi447640/


All Articles