แยกสภาพแวดล้อม dev และแยง Firebase


154

ฉันกำลังพิจารณาใช้ Firebase เป็น MBaaS แต่ฉันไม่พบวิธีแก้ไขปัญหาที่เชื่อถือได้สำหรับปัญหาต่อไปนี้:

ฉันต้องการตั้งค่าสภาพแวดล้อม Firebase ที่แยกจากกันสองแห่งสภาพแวดล้อมเพื่อการพัฒนาและอีกแห่งหนึ่งสำหรับการผลิต แต่ฉันไม่ต้องการทำสำเนาคุณสมบัติด้วยตนเอง (เช่นการตั้งค่าระยะไกลกฎการแจ้งเตือน ฯลฯ ) ระหว่างสภาพแวดล้อมการพัฒนาและการผลิต .

มีเครื่องมือหรือวิธีการใดบ้างที่ฉันวางใจได้? การตั้งค่าการกำหนดค่าจากระยะไกลหรือกฎการแจ้งเตือนจากศูนย์อาจทำให้งานมีความเสี่ยงและเสี่ยงเกินไป

ข้อเสนอแนะใด ๆ มีวิธีที่ดีกว่าการมีสองสภาพแวดล้อมที่แยกจากกันหรือไม่?

ก่อนที่คุณโพสต์คำตอบสำหรับคำถามที่อธิบายถึงวิธีการตั้งค่าบัญชี Firebase แยกต่างหาก: ไม่ใช่คำถามอ่านอีกครั้ง คำถามคือ: วิธีการถ่ายโอนการเปลี่ยนแปลงระหว่างบัญชี dev และ prod แยกจากกันหรือวิธีแก้ปัญหาที่ดีกว่าคัดลอกระหว่างพวกเขาด้วยตนเอง


3
คงจะดีถ้ามีคุณลักษณะนี้!
Patrick


@Timmerz ดูคำตอบแรก: เกี่ยวข้องกับการโฮสต์และฐานข้อมูลเท่านั้น แต่ไม่เกี่ยวข้องกับคุณสมบัติอื่น ๆ
racs

ฉันมีปัญหาที่คล้ายกันฉันแก้ไขมันด้วยวิธีดังต่อไปนี้: ตรวจสอบสิ่งนี้: stackoverflow.com/questions/51646512/…ฉันแก้ไขได้ด้วยวิธีต่อไปนี้: 1. สร้างการกำหนดค่าการดีบักโปรดไปที่ลิงค์ medium.com/@Miqubel/ ... medium.com/@Miqubel/... 2.Then สร้างฐานข้อมูลใหม่โปรดปฏิบัติตามการเชื่อมโยง: firebase.google.com/docs/database/usage/... 3.In รหัสของคุณขึ้นอยู่กับรสชาติของผลิตภัณฑ์ของคุณเชื่อมต่อกับฐานข้อมูลที่สอดคล้องกันตาม เกี่ยวกับผลิตภัณฑ์
Kunal Khaire

1
@LOG_TAG คุณมีเหตุผลในการสร้างแท็กใหม่ทั้งหมดอย่างไร ที่อยู่นี้เป็นเทคโนโลยีใหม่ที่ไม่ได้ครอบคลุมโดย [firebase] หรือไม่?
Michael Dodd

คำตอบ:


24

ดังที่ทุกคนชี้แจง - คุณต้องการมากกว่าหนึ่งโครงการ / ฐานข้อมูล

แต่เพื่อตอบคำถามของคุณเกี่ยวกับความต้องการที่จะสามารถคัดลอกการตั้งค่า / ข้อมูล ฯลฯ จากการพัฒนาไปสู่การผลิต ฉันมีความต้องการเหมือนกันแน่นอน สองสามเดือนในการพัฒนาและทดสอบฉันไม่ต้องการคัดลอกข้อมูลด้วยตนเอง

ผลลัพธ์ของฉันคือการสำรองข้อมูลไปยังที่เก็บข้อมูลแล้วเรียกคืนจากที่นั่นไปยังฐานข้อมูลอื่น เป็นวิธีที่ค่อนข้างหยาบในการทำ - และฉันได้ทำการสำรอง / กู้คืนฐานข้อมูลทั้งหมด - แต่คุณอาจจะสามารถมองไปในทิศทางนั้นเพื่อควบคุมวิธีที่ดีกว่า ฉันไม่ได้ใช้ - มันใหม่มาก - แต่นี่อาจเป็นวิธีแก้ปัญหา: โมดูล NPM firestore-export-import

แก้ไข : Firestore สำรองข้อมูล / ส่งออก / นำเข้าข้อมูลที่นี่Cloud Firestore การส่งออกและนำเข้าข้อมูล

หากคุณใช้ Firebase RTDB ไม่ใช่ Firestore - เอกสารนี้อาจช่วยได้: Firebase Automated Backups

คุณจะต้องตั้งค่าการอนุญาตอย่างถูกต้องเพื่อให้ฐานข้อมูลการผลิตเข้าถึงที่เก็บข้อมูลเดียวกันกับที่คุณพัฒนา โชคดี.


1
ขอบคุณนี่เป็นคำตอบที่ดีที่สุด
racs

4
สำหรับโครงการที่มีผู้ใช้ไม่กี่พันคนคุณจะต้องย้ายข้อมูลบางส่วนจากฐานข้อมูลการผลิตไปยังเซิร์ฟเวอร์ staging หรือเซิร์ฟเวอร์การพัฒนา เป็นความอัปยศที่ไม่ได้สร้างไว้ใน Firebase แต่เป็นสิ่งที่ต้องทำสำหรับโครงการประเภทใด ๆ

ฉันนำเข้าฐานข้อมูลโดยใช้คำแนะนำ "การย้ายข้อมูลระหว่างโครงการ" แต่มันสร้างฐานข้อมูล Firestore ในโหมด Datastore ฉันต้องใช้มันในโหมดเนทีฟ
เดลิเดส

54

หากคุณใช้ firebase-tools จะมีคำสั่งfirebase useให้คุณตั้งค่าโปรเจ็กต์ที่คุณใช้firebase deploy

firebase use --addจะแสดงรายการโครงการของคุณเลือกหนึ่งโครงการและจะขอชื่อแทนคุณ จากที่นั่นคุณสามารถfirebase use aliasและfirebase deployจะผลักดันไปยังโครงการนั้น

ในการใช้งานส่วนตัวฉันมี my-app และ my-app-dev เป็นโปรเจ็กต์ในคอนโซล Firebase


1
เท่าที่ฉันเข้าใจเครื่องมือ Firebase มีประโยชน์สำหรับการปรับใช้ไฟล์โฮสต์และฐานข้อมูล แต่ไม่ได้ทำอะไรกับฐานข้อมูลการวิเคราะห์หรือการกำหนดค่าระยะไกล หรือว่าฉันขาดอะไรไป?
racs

@ ดูเหมือนว่านี่เป็นรุ่นล่าสุด แต่ฉันกำลังจะเริ่มลองใช้ cli สำหรับการสร้างข้อมูล / การบำรุงรักษาข้อมูลบนอินสแตนซ์ dev ของฉัน: firebase.googleblog.com/2015/11/…
Chris

@chris ขอบคุณมันเป็นจุดเริ่มต้นอย่างน้อย แต่ดูเหมือนว่าจะทำสิ่งที่ค่อนข้างลึกลับ โชคดี!
racs

@racs เท่าที่ข้อมูลการเพาะและขั้นตอนการพัฒนาดำเนินไปได้ดีมาก ฉันสามารถกลายพันธุ์ฐานข้อมูล dev ของฉันได้อย่างน่าเชื่อถือโดยอ้างอิงจากคำสั่ง run เวอร์ชันต่อนาทีและข้อมูล seed ที่มีเวอร์ชัน คุณกำลังมองหาวิธีการคัดลอกข้อมูลเมตาเช่นกัน แต่ฉันไม่ได้เห็นที่น่าเสียดาย
คริส

@ Chris ขอบคุณที่แจ้งให้เราทราบเกี่ยวกับเรื่องนี้ นี่ยังเป็นคำถามที่เปิดกว้างเท่าที่ฉันจะบอกได้
racs

25

ตอนนี้ฉันไม่ได้ใช้ Firebase แต่พิจารณาด้วยตัวเอง ดูเหมือนว่าวิธีที่จะไปคือการสร้างโครงการแยกต่างหากอย่างสมบูรณ์บนคอนโซล มีบล็อกโพสต์แนะนำเรื่องนี้ในเว็บไซต์ Firebase เก่าดูเหมือนว่าจะถูกลบออกตอนนี้ https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-environments.html

นอกจากนี้การสนทนานี้แนะนำเหมือนกัน: https://groups.google.com/forum/#!msg/firebase-talk/L7ajIJoHPcA/7dsNUTDlyRYJ


2
ขอบคุณสำหรับคำตอบ. การมีสองโครงการที่แยกกันน่าจะเป็นทางเลือกเดียวเท่านั้น อย่างไรก็ตามการคัดลอกข้อมูลระหว่างกันนั้นซับซ้อนที่สุด ฉันสงสัยว่าเครื่องมือ Firebase สามารถคัดลอกกฎการตั้งค่าผู้ชมและอื่น ๆ ฉันคิดว่ามันเกี่ยวกับการดำเนินการที่เกี่ยวข้องกับฐานข้อมูลเท่านั้น: github.com/firebase/firebase-tools
racs

2
ไม่แน่ใจว่าคุณได้เห็นนี้ แต่คุณสามารถเรียกใช้ dev ของคุณกับ Firebase เซิร์ฟเวอร์: firebase.googleblog.com/2015/04/...
krico

2
นั่นคือสิ่งที่ฉันได้ทำไปแล้ว แต่คำถามคือคุณจะคัดลอกการตั้งค่าระหว่างสองสภาพแวดล้อมได้อย่างไร เช่น. การกำหนดค่าจากระยะไกลการตั้งค่าผู้ชม ฯลฯ ? การเพิ่มสิ่งเหล่านี้เข้ากับสภาพแวดล้อมการผลิตด้วยตนเองนั้นค่อนข้างผิดพลาด
racs

2
ปัญหาที่ฉันพบคือการรับรองความถูกต้องกับอินสแตนซ์ firebase หลายอันที่มีแพ็คเกจและลายเซ็นเดียวกัน คอนโซลจะไม่อนุญาตให้คุณเพิ่มแพ็กเกจ sha1 เดียวกันลงในโครงการมากกว่าหนึ่งโครงการดังนั้นจึงไม่สามารถทำได้ เอกสารดังกล่าวบอกว่ามีการแก้ไขหมายเลขลูกค้าที่อนุญาตพิเศษ แต่ฉันไม่ประสบความสำเร็จ การทำงานอื่น ๆ คือชื่อแพคเกจแยกต่างหาก (แม่นยำยิ่งขึ้น 'applicationIds)' แต่แล้วก็มีภาวะแทรกซ้อนอื่น ๆ
Patrick

3
นอกจากนี้อ่านนี้: firebase.googleblog.com/2016/08/...
RACS

8

วิธีที่ฉันทำมัน:

  1. ฉันมี 2 โครงการบนฐานข้อมูล - หนึ่งสำหรับ DEV สำหรับ PROD
  2. ภายในแอปของฉันยังมี 2 สาขา - อันหนึ่งชื่อ DEV และอีกอันชื่อว่า PROD
  3. ในสาขา DEV ของฉันฉันมักจะมีไฟล์ JSON ของโครงการฐานข้อมูลไฟ DEV และเช่นเดียวกันสำหรับ PROD

วิธีนี้ฉันไม่จำเป็นต้องบำรุงรักษา JSON ของฉัน


1
ฉันเข้าใจแล้ว แต่ไม่มีวิธีแก้ปัญหาทั่วไปสำหรับคำถามที่ถามตามเวอร์ชั่นของ firebase ล่าสุด คุณต้องเล่นกับตัวเลือกปัจจุบันและได้รับแนวปฏิบัติที่ดีที่สุด อาจเป็นคำตอบของฉันไม่ได้ชี้เรื่องนี้ แต่ฉันแค่ต้องการช่วยผู้ถามด้วยมุมมองของฉัน
Kunal Khaire

5

บล็อกโพสต์นี้อธิบายวิธีการง่าย ๆ ด้วย debug และ release build type

โดยสังเขป:

  • สร้างแอปใหม่บน Firebase สำหรับบิลด์แต่ละประเภทโดยใช้ส่วนต่อท้าย ID แอปพลิเคชันที่แตกต่างกัน
  • กำหนดค่าโครงการ Android ของคุณด้วยไฟล์ JSON ล่าสุด
  • ใช้ applicationIdSuffix เปลี่ยนรหัสแอปพลิเคชันให้ตรงกับแอพที่แตกต่างบน Firebase ขึ้นอยู่กับประเภทบิลด์

=> ดู blogpost สำหรับคำอธิบายโดยละเอียด

หากคุณต้องการใช้รสชาติของการสร้างที่แตกต่างกันให้อ่านบล็อกโพสต์ที่กว้างขวางนี้จากบล็อก firebase อย่างเป็นทางการ มันมีข้อมูลที่มีค่ามากมาย

หวังว่าจะช่วย!


ขอบคุณสำหรับการตอบกลับของคุณ. ฉันสามารถตั้งค่าแอพที่แตกต่างกันได้ แต่ฉันยังคงมองหาวิธีการคัดลอกการตั้งค่าต่าง ๆ จากแอพ FB dev ไปยังแอพ FB prod ตามที่ฉันขอในคำถาม (เช่นการตั้งค่าจากระยะไกลหรือการตั้งค่าผู้ชม)
rac

2
โปรดทราบนี้จะสร้างสองปพลิเคชันที่อยู่ภายในโครงการเดียวกันดังนั้นคุณจะแยกบริการบางอย่างเช่นการวิเคราะห์ แต่ฐานข้อมูลจะถูกใช้ร่วมกันจึงไม่ได้เป็นแยกที่แท้จริงของสภาพแวดล้อมตามที่อธิบายไว้ที่นี่firebase.googleblog.com/2016/08/...
AntPachon

5

คุณจะต้องจัดการประเภทบิลด์ต่าง ๆ

ติดตามสิ่งนี้

  1. ขั้นแรกสร้างโครงการใหม่ที่คอนโซล Firebase ชื่อ id เป็น YOURAPPNAME-DEV

  2. คลิกปุ่ม "เพิ่มแอป Android" และสร้างแอปใหม่ ตั้งชื่อเป็น com.yourapp.debug เป็นต้น ไฟล์ google-services.json ใหม่จะถูกดาวน์โหลดโดยอัตโนมัติ

  3. ภายใต้ไดเรกทอรี src โครงการของคุณให้สร้างไดเรกทอรีใหม่ด้วยชื่อ "debug" และคัดลอกไฟล์ google-services.json ใหม่ที่นี่

  4. ในระดับโมดูลของคุณ build.gradle เพิ่มสิ่งนี้

    debug {
            applicationIdSuffix ".debug"
        }
    

ตอนนี้เมื่อคุณสร้าง debug build google-services.json จากโฟลเดอร์ "debug" จะถูกนำมาใช้และเมื่อคุณจะสร้างในโหมดการวางจำหน่าย google-services.json จากไดเรกทอรีรูทโมดูลจะได้รับการพิจารณา


ในกรณีที่คนต้องการเอกสารอย่างเป็นทางการของ Google บริการ Gradle ปลั๊กอินรู้ที่จะมองหา google-services.json ภายใต้ไดเรกทอรีย่อยของsrcสำหรับ buildType ตามที่อธิบายไว้ที่นี่developers.google.com/android/guides/...
ไมเคิล Osofsky

4

เพื่อแก้ปัญหานี้ในสถานการณ์ของฉันฉันได้สร้างโครงการ Firebase สามโครงการแต่ละโครงการเป็น Android เดียวกัน (เช่นเดียวกันapplicationIdโดยไม่ต้องใช้applicationIdSuffixข้อเสนอแนะจากผู้อื่น) นี้ส่งผลในสามไฟล์ google-services.json ซึ่งผมเก็บไว้ในของฉันอย่างต่อเนื่องเซิร์ฟเวอร์บูรณาการ (CI) เป็นตัวแปรสภาพแวดล้อมที่กำหนดเอง สำหรับแต่ละขั้นตอนของบิลด์ (dev / staging / prod) ฉันใช้ไฟล์ google-services.json ที่เกี่ยวข้อง

สำหรับโครงการ Firebase ที่เกี่ยวข้องกับ dev ในโครงการ Android ของฉันฉันเพิ่มลายนิ้วมือใบรับรอง SHA debug แต่สำหรับการแสดงละครและกระทุ้งฉันมี CI ลงชื่อ APK

นี่คือการปลดล็อค.gitlab-ci.ymlที่ใช้กับการตั้งค่านี้:

# This is a Gitlab Continuous Integration (CI) Pipeline definition
# Environment variables:
#   - variables prefixed CI_ are Gitlab predefined environment variables (https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)
#   - variables prefixed GNDR_CI are Gitlab custom environment variables (https://docs.gitlab.com/ee/ci/variables/#creating-a-custom-environment-variable)
#
# We have three Firebase projects (dev, staging, prod) where the same package name is used across all of them but the
# debug signing certificate is only provided for the dev one (later if there are other developers, they can have their
# own Firebase project that's equivalent to the dev one).  The staging and prod Firebase projects use real certificate
# signing so we don't need to enter a Debug signing certificate for them.  We don't check the google-services.json into
# the repository.  Instead it's provided at build time either on the developer's machine or by the Gitlab CI server
# which injects it via custom environment variables.  That way the google-services.json can reside in the default
# location, the projects's app directory.  The .gitlab-ci.yml is configured to copy the dev, staging, and prod equivalents
# of the google-servies.json file into that default location.
#
# References:
# https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
# /programming/57129588/how-to-setup-firebase-for-multi-stage-release

stages:
  - stg_build_dev
  - stg_build_staging
  - stg_build_prod

jb_build_dev:
  stage: stg_build_dev
  image: jangrewe/gitlab-ci-android
  cache:
    key: ${CI_PROJECT_ID}-android
    paths:
      - .gradle/
  script:
    - cp ${GNDR_CI_GOOGLE_SERVICES_JSON_DEV_FILE} app/google-services.json
    - ./gradlew :app:assembleDebug
  artifacts:
    paths:
      - app/build/outputs/apk/

jb_build_staging:
  stage: stg_build_staging
  image: jangrewe/gitlab-ci-android
  cache:
    key: ${CI_PROJECT_ID}-android
    paths:
      - .gradle/
  dependencies: []
  script:
    - cp ${GNDR_CI_GOOGLE_SERVICES_JSON_STAGING_FILE} app/google-services.json
    - ./gradlew :app:assembleDebug
  artifacts:
    paths:
      - app/build/outputs/apk/

jb_build_prod:
  stage: stg_build_prod
  image: jangrewe/gitlab-ci-android
  cache:
    key: ${CI_PROJECT_ID}-android
    paths:
      - .gradle/
  dependencies: []
  script:
    - cp ${GNDR_CI_GOOGLE_SERVICES_JSON_PROD_FILE} app/google-services.json

    # GNDR_CI_KEYSTORE_FILE_BASE64_ENCODED created on Mac via:
    # base64 --input ~/Desktop/gendr.keystore --output ~/Desktop/keystore_base64_encoded.txt
    # Then the contents of keystore_base64_encoded.txt were copied and pasted as a Gitlab custom environment variable
    # For more info see http://android.jlelse.eu/android-gitlab-ci-cd-sign-deploy-3ad66a8f24bf
    - cat ${GNDR_CI_KEYSTORE_FILE_BASE64_ENCODED} | base64 --decode > gendr.keystore

    - ./gradlew :app:assembleRelease
      -Pandroid.injected.signing.store.file=$(pwd)/gendr.keystore
      -Pandroid.injected.signing.store.password=${GNDR_CI_KEYSTORE_PASSWORD}
      -Pandroid.injected.signing.key.alias=${GNDR_CI_KEY_ALIAS}
      -Pandroid.injected.signing.key.password=${GNDR_CI_KEY_PASSWORD}
  artifacts:
    paths:
      - app/build/outputs/apk/

ฉันมีความสุขกับการแก้ปัญหานี้เพราะมันไม่ได้ขึ้นอยู่กับเทคนิค build.gradle ซึ่งฉันเชื่อว่าทึบเกินไปและยากที่จะรักษา ตัวอย่างเช่นเมื่อฉันพยายามใช้วิธีการapplicationIdSuffixที่แตกต่างกันbuildTypeของฉันพบว่าฉันอาจจะไม่ได้รับการทดสอบเพื่อให้ทำงานหรือแม้กระทั่งการรวบรวม instrumented testBuildTypeเมื่อฉันพยายามที่จะเปลี่ยนประเภทการใช้สร้าง Android ดูเหมือนจะให้คุณสมบัติพิเศษdebug buildTypeซึ่งฉันไม่สามารถตรวจสอบเพื่อทำความเข้าใจ

ในความเป็นจริงแล้ว CI scrips นั้นค่อนข้างโปร่งใสและดูแลรักษาง่ายในประสบการณ์ของฉัน แน่นอนว่าวิธีการที่ฉันอธิบายได้ผล: เมื่อฉันวิ่ง APK แต่ละตัวที่สร้างโดย CI บนอีมูเลเตอร์ขั้นตอน "เรียกใช้แอปของคุณเพื่อยืนยันการติดตั้ง" ของ Firebase

ตรวจสอบว่าแอปสื่อสารกับเซิร์ฟเวอร์ของเราหรือไม่ คุณอาจต้องถอนการติดตั้งและติดตั้งแอปของคุณใหม่

ถึง:

ขอแสดงความยินดีคุณได้เพิ่ม Firebase ลงในแอปแล้ว!

สำหรับทั้งสามแอพเมื่อฉันเริ่มทีละตัวในอีมูเลเตอร์


ขอบคุณสำหรับคำอธิบายโดยละเอียดทั้งหมดนี้ Michael ฉันจัดการผลลัพธ์เดียวกันโดยเพิ่มรสชาติแยกต่างหากและคัดลอก appropiate google-services.json ภายใต้โฟลเดอร์สำหรับแต่ละรส อย่างไรก็ตามนี่ไม่ใช่คำถามของฉันโปรดอ่านอีกครั้ง
racs

ฉันเห็นด้วย @racs แต่น่าเสียดายที่เมื่อฉันเขียนstackoverflow.com/questions/37450439/…มันถูกทำเครื่องหมายว่าซ้ำกับคำถามของคุณโดยstackoverflow.com/users/807126/doug-stevenson
Michael Osofsky

1
ดั๊ก ... เจ้าทำอะไรลงไป! : DI ไม่ต้องกังวลคำตอบของคุณที่นี่ฉันแน่ใจว่าจะเป็นประโยชน์กับบางคนที่กำลังมองหาวิธีการแก้ปัญหาสำหรับสภาพแวดล้อมที่แยกจากกัน
racs

ใช่เรามองหาโซลูชันสำหรับแอปพลิเคชันมือถือของเราที่ต้องการสภาพแวดล้อมที่แยกจากกันด้วยบริการ firebase นี่เป็นจุดเริ่มต้นที่ดีสำหรับเราอย่างแน่นอน เราจะลองดู
LT

2

Firebase มีหน้านี้ซึ่งจะผ่านวิธีการตั้งค่าสำหรับ dev และแยง

https://firebase.google.com/docs/functions/config-env

ตั้งค่าการกำหนดค่าสภาพแวดล้อมสำหรับโครงการของคุณเพื่อเก็บข้อมูลสภาพแวดล้อมคุณสามารถใช้ฟังก์ชัน firebase: คำสั่ง config: set ใน Firebase CLI แต่ละคีย์สามารถเนมสเปซได้โดยใช้เครื่องหมายจุดเพื่อจัดกลุ่มการกำหนดค่าที่เกี่ยวข้องเข้าด้วยกัน โปรดทราบว่ายอมรับเฉพาะอักขระตัวพิมพ์เล็กเท่านั้นในคีย์ ไม่อนุญาตให้ใช้ตัวพิมพ์ใหญ่

ตัวอย่างเช่นในการจัดเก็บรหัสลูกค้าและคีย์ API สำหรับ "บริการบางอย่าง" คุณอาจเรียกใช้:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

ดึงการกำหนดค่าสภาพแวดล้อมปัจจุบันเพื่อตรวจสอบสิ่งที่เก็บอยู่ในสภาพแวดล้อมการกำหนดค่าสำหรับโครงการของคุณในปัจจุบันคุณสามารถใช้ฟังก์ชั่น firebase: config: get มันจะเอาท์พุท JSON บางอย่างเช่นนี้:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

1
แก้ไขเป็น 404 ครั้งต่อไปรวมเนื้อหาด้วย!
CorayThan

1

ฉันกำลังปรับปรุงคำตอบนี้ตามข้อมูลที่ฉันเพิ่งพบ

ขั้นตอนที่ 1

ใน firebase.google.com สร้างหลาย ๆ สภาพแวดล้อมของคุณ (เช่น dev, staging, prod)


mysite-dev

mysite-การแสดงละคร

mysite-แยง


ขั้นตอนที่ 2

ย้ายไปที่ค่าเริ่มต้นที่คุณต้องการโดยตรง (เช่น; dev)

ข วิ่งfirebase deploy

ค. เมื่อปรับใช้แล้วให้เรียกใช้firebase use --add

d ตัวเลือกจะปรากฏขึ้นเพื่อเลือกจากโครงการต่างๆที่คุณมีอยู่ในปัจจุบัน

เลื่อนไปที่โครงการที่คุณต้องการเพิ่ม: การจัดเตรียม mysiteและเลือก

อี จากนั้นคุณจะถูกถามถึงชื่อแทนสำหรับโครงการนั้น ใส่การแสดงละคร

รันไอเท็ม ae อีกครั้งสำหรับ prod และ dev เพื่อให้แต่ละสภาพแวดล้อมมีนามแฝง


รู้ว่าคุณอยู่ในสภาพแวดล้อมใด

วิ่ง firebase use default (mysite-dev)

* dev (mysite-dev)

staging (mysite-staging)

prod (mysite-dev)

(หนึ่งในสภาพแวดล้อมจะมีเครื่องหมายดอกจันทางด้านซ้ายนั่นคือสภาพแวดล้อมที่คุณอยู่ในปัจจุบันและจะเน้นด้วยสีน้ำเงินด้วย)


สลับระหว่างสภาพแวดล้อม

เรียกใช้firebase use stagingหรือfirebase use prodเพื่อย้ายระหว่างพวกเขา

เมื่อคุณอยู่ในสภาพแวดล้อมที่คุณต้องการเรียกใช้firebase deployและโครงการของคุณจะปรับใช้ที่นั่น

นี่คือลิงค์ที่เป็นประโยชน์สองสาม ...

อ้างอิง CLI

ปรับใช้กับสภาพแวดล้อมที่หลากหลาย

หวังว่านี่จะช่วยได้


เมื่อคุณพูดหลายสภาพแวดล้อมคุณหมายถึงหลายโครงการ
walidvb

ฉันหมายถึงสภาพแวดล้อมที่หลากหลาย อ่านโพสต์ที่นี่เพื่อชี้แจง นั่นเป็นวิธีที่มีชื่อ มันเกี่ยวข้องกับโครงการเดียวกัน แต่ใช้กับ dev / qa และการผลิต
Jared Newnam

ขอบคุณฉันเพิ่งดูวิดีโอทั้งหมด สิ่งนี้กล่าวว่าฉันเข้าใจว่าเขาใช้โครงการต่างสำหรับสภาพแวดล้อมที่แตกต่างไม่ใช่สภาพแวดล้อมเฉพาะภายในโครงการเดียวกัน
walidvb

0

วิธีที่เราทำคือการสร้างไฟล์ json key ที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกัน เราใช้คุณลักษณะบัญชีบริการตามที่ Google แนะนำและมีไฟล์พัฒนาไฟล์หนึ่งไฟล์และไฟล์อื่นสำหรับการผลิต

ป้อนคำอธิบายรูปภาพที่นี่


0

สร้างโครงการ Tow ด้วย Dev และ Production Environment บน firebase ดาวน์โหลดไฟล์ json จาก thre

และตั้งค่า SDK ตาม: https://firebase.google.com/docs/android/setupหรือสำหรับ Crashlytics: https://firebase.google.com/docs/crashlytics/get-started?platform=android

ก่อนอื่นให้วาง google_services.json ตามลำดับสำหรับแต่ละ buildType ในตำแหน่งต่อไปนี้:

app/src/debug/google_services.json
app/src/test/google_services.json
app/google_services.json

หมายเหตุ: รูทแอป / google_services.json ไฟล์นี้ควรอยู่ที่นั่นตามรุ่นบิลด์ที่คัดลอกโค้ด json ในไฟล์รูท json

ตอนนี้เรามาทำภารกิจการไล่ระดับสีใน: build.gradle ของแอพเพื่อย้าย google_services.json ที่เหมาะสมไปยัง app / google_services.json

คัดลอกสิ่งนี้ในไฟล์แอพ / Gradle

task switchToDebug(type: Copy) {
description = 'Switches to DEBUG google-services.json'
from "src/debug"
include "google-services.json"
into "."
}

task switchToRelease(type: Copy) {
description = 'Switches to RELEASE google-services.json'
from "src/release"
include "google-services.json"
into "."
}

เยี่ยมมาก - แต่ต้องทำงานด้วยตนเองก่อนที่คุณจะสร้างแอปของคุณยุ่งยาก เราต้องการให้งานคัดลอกที่เหมาะสมทำงานก่อนหน้านี้: assembleDebug หรือ: assembleRelease ถูกเรียกใช้ มาดูกันว่าจะเกิดอะไรขึ้นเมื่อ: assembleRelease ทำงาน: คัดลอกอันนี้ในไฟล์ / gradlew

Zaks-MBP:my_awesome_application zak$ ./gradlew assembleRelease
Parallel execution is an incubating feature.
.... (other tasks)
:app:processReleaseGoogleServices
....
:app:assembleRelease

สังเกตเห็นงาน: แอพ: processReleaseGoogleServices งานนี้รับผิดชอบการประมวลผลไฟล์รูท google_services.json เราต้องการให้ประมวลผล google_services.json ที่ถูกต้องดังนั้นเราจึงต้องเรียกใช้งานการคัดลอกของเราทันทีก่อน เพิ่มสิ่งนี้ไปยัง build.gradle ของคุณ หมายเหตุ afterEvaluate ล้อมรอบ

คัดลอกสิ่งนี้ในไฟล์แอพ / Gradle

afterEvaluate {
processDebugGoogleServices.dependsOn switchToDebug
processReleaseGoogleServices.dependsOn switchToRelease
}

ตอนนี้ทุกที่ทุกเวลา: app: processRelease เรียกว่า GoogleServices ชื่อที่กำหนดใหม่ของเรา: app: switchToRelease จะถูกเรียกก่อน ตรรกะเดียวกันสำหรับ debug buildType คุณสามารถเรียกใช้: แอพ: assembleRelease และรุ่นวางจำหน่าย google_services.json จะถูกคัดลอกไปยังโฟลเดอร์รูทของโมดูลแอปโดยอัตโนมัติ


1
คุณใช้พลังงานมากในคำตอบนี้ แต่ 1. สิ่งนี้ไม่เกี่ยวข้องกับคำถาม (โปรดอ่านอีกครั้ง) 2. คุณไม่จำเป็นต้องคัดลอกgoogle-services.jsonไฟล์ไปยังโฟลเดอร์รากถ้าคุณเก็บไว้ใน โฟลเดอร์รสชาติที่ใช้ได้อย่างสมบูรณ์แบบ แต่assembleReleaseคุณสามารถเรียกใช้assembleTestReleaseงานได้
racs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.