Rozważam użycie Firebase jako MBaaS, jednak nie mogłem znaleźć niezawodnego rozwiązania następującego problemu:
Chciałbym skonfigurować dwa oddzielne środowiska Firebase, jedno do programowania, a drugie do produkcji, ale nie chcę ręcznie kopiować funkcji (np. Zdalnej konfiguracji konfiguracji, reguł powiadomień itp.) Między środowiskiem deweloperskim a produkcyjnym .
Czy jest jakieś narzędzie lub metoda, na której mogę polegać? Konfigurowanie zdalnej konfiguracji lub reguł powiadomień od podstaw może być trudnym zadaniem i zbyt ryzykownym.
Jakieś sugestie? Czy jest lepsze podejście niż posiadanie dwóch oddzielnych środowisk?
Zanim opublikujesz kolejną odpowiedź na pytanie, które wyjaśnia, jak skonfigurować oddzielne konta Firebase: to nie jest pytanie, przeczytaj je ponownie. Pytanie brzmi: jak PRZENOSIĆ zmiany między oddzielnymi kontami deweloperskimi i prod lub jakiekolwiek lepsze rozwiązanie niż ręczne kopiowanie między nimi.
Odpowiedzi:
Jak wszyscy zauważyli - potrzebujesz więcej niż jednego projektu / bazy danych.
Ale żeby odpowiedzieć na twoje pytanie dotyczące potrzeby kopiowania ustawień / danych itp. Z rozwoju do produkcji. Miałem dokładnie taką samą potrzebę. Po kilku miesiącach programowania i testowania nie chciałem ręcznie kopiować danych.
Rezultatem było utworzenie kopii zapasowej danych w zasobniku pamięci, a następnie przywrócenie ich stamtąd do innej bazy danych. Jest to dość prymitywny sposób - i zrobiłem kopię zapasową / przywrócenie całej bazy danych - ale możesz spojrzeć w tym kierunku, aby uzyskać bardziej kontrolowany sposób. Nie używałem go - jest bardzo nowy - ale może to być rozwiązanie: Moduł NPM firestore-export-import
Edycja : tutaj kopia zapasowa / eksport / import Firestore Cloud Firestore Eksportowanie i importowanie danych
Jeśli używasz Firebase RTDB, a nie Firestore - ta dokumentacja może pomóc: Automatyczne kopie zapasowe Firebase
Będziesz musiał poprawnie ustawić uprawnienia, aby umożliwić Twojej produkcyjnej bazie danych dostęp do tego samego zasobnika pamięci, co program. Powodzenia.
źródło
Jeśli używasz narzędzi firebase, istnieje polecenie,
firebase use
które pozwala ustawić projekt, którego używaszfirebase deploy
firebase use --add
wyświetli listę twoich projektów, wybierz jeden i zapyta cię o alias. Stamtąd możeszfirebase use alias
ifirebase deploy
będziesz naciskać na ten projekt.Do użytku osobistego mam projekty my-app i my-app-dev jako projekty w konsoli Firebase.
źródło
Obecnie nie używam Firebase, ale uważam to za siebie. Wygląda na to, że najlepszym rozwiązaniem jest utworzenie całkowicie oddzielnego projektu na konsoli. W starej witrynie Firebase pojawił się post na blogu polecający to, ale wygląda na to, że teraz został usunięty. https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-environments.html
Również ta dyskusja poleca to samo: https://groups.google.com/forum/#!msg/firebase-talk/L7ajIJoHPcA/7dsNUTDlyRYJ
źródło
Sposób, w jaki to zrobiłem:
W ten sposób nie muszę utrzymywać moich plików JSON.
źródło
Ten post na blogu opisuje bardzo proste podejście z typem kompilacji do debugowania i wydania.
W skrócie:
=> zobacz post na blogu, aby uzyskać szczegółowy opis.
Jeśli chcesz użyć różnych wersji kompilacji, przeczytaj ten obszerny post na oficjalnym blogu Firebase. Zawiera wiele cennych informacji.
Mam nadzieję, że to pomoże!
źródło
Będziesz musiał zarządzać różnymi typami kompilacji
Obserwuj to
Najpierw utwórz nowy projekt w konsoli Firebase o identyfikatorze YOURAPNAME-DEV
Kliknij przycisk „Dodaj aplikację na Androida” i utwórz nową aplikację. Na przykład nazwij go com.yourapp.debug. Nowy plik google-services.json zostanie pobrany automatycznie
W katalogu src projektu utwórz nowy katalog o nazwie „debug” i skopiuj tutaj nowy plik google-services.json
Dodaj to na poziomie modułu build.gradle
Teraz podczas tworzenia debugowania zostanie użyty plik google-services.json z folderu „debug”, a podczas tworzenia w trybie wydania plik google-services.json z katalogu głównego modułu będzie brany pod uwagę.
źródło
src
pliku google-services.json w podkatalogu buildType, jak wyjaśniono tutaj developers.google.com/android/guides/ ...Aby rozwiązać ten problem w mojej sytuacji, stworzyłem trzy projekty Firebase, każdy z tym samym projektem na Androida (tj. Taki sam
applicationId
bez korzystania zapplicationIdSuffix
sugerowanych przez innych). W rezultacie powstały trzy pliki google-services.json, które zapisałem na moim serwerze Continuous Integration (CI) jako niestandardowe zmienne środowiskowe . Na każdym etapie kompilacji (dev / staging / prod) użyłem odpowiedniego pliku google-services.json.W przypadku projektu Firebase skojarzonego z dev, w jego projekcie na Androida dodałem odcisk cyfrowy certyfikatu debugowania SHA. Ale do inscenizacji i prod mam po prostu podpisać plik APK.
Oto uproszczona wersja,
.gitlab-ci.yml
która działała w tej konfiguracji:Jestem zadowolony z tego rozwiązania, ponieważ nie opiera się na sztuczkach build.gradle, które moim zdaniem są zbyt nieprzejrzyste i przez to trudne do utrzymania. Na przykład, kiedy próbowałem podejść przy użyciu
applicationIdSuffix
i różnych metodbuildType
, stwierdziłem, że nie mogę uruchomić testów instrumentalnych ani nawet skompilować, gdy próbowałem zmienić typy kompilacji za pomocątestBuildType
. Android wydawał się nadawać specjalne właściwości,debug
buildType
których nie mogłem zrozumieć.Praktycznie, z mojego doświadczenia wynika, że skrawki CI są dość przejrzyste i łatwe w utrzymaniu. Rzeczywiście, podejście, które opisałem, zadziałało: kiedy uruchomiłem każdy z pakietów APK wygenerowanych przez CI na emulatorze, krok „Uruchom aplikację, aby zweryfikować instalację” konsoli Firebase wyszedł z
do:
dla wszystkich trzech aplikacji, ponieważ uruchamiałem je pojedynczo w emulatorze.
źródło
Firebase ma stronę na ten temat, na której opisano, jak skonfigurować ją na potrzeby programowania i produkcji
https://firebase.google.com/docs/functions/config-env
źródło
Aktualizuję tę odpowiedź na podstawie informacji, które właśnie znalazłem.
Krok 1
Na firebase.google.com utwórz swoje różne środowiska (tj. Deweloperskie, staging, prod)
mysite-dev
mysite-staging
mysite-prod
Krok 2
za. Przejdź bezpośrednio do miejsca, które chcesz ustawić jako domyślne (tj. Dev)
b. Biegać
firebase deploy
do. Po wdrożeniu uruchom
firebase use --add
re. Pojawi się opcja wyboru spośród różnych projektów, które obecnie masz.
Przewiń do projektu, który chcesz dodać: mysite-staging i wybierz go.
mi. Zostaniesz poproszony o podanie aliasu dla tego projektu. Wejdź do inscenizacji .
Uruchom elementy ae ponownie dla prod i dev, aby każde środowisko miało alias
Wiedz, w jakim środowisku się znajdujesz
Biegać
firebase use
default (mysite-dev)
* dev (mysite-dev)
staging (mysite-staging)
prod (mysite-dev)
(jedno ze środowisk będzie miało gwiazdkę po lewej stronie. To jest to, w którym aktualnie się znajdujesz. Zostanie również podświetlone na niebiesko)
Przełączaj się między środowiskami
Biegnij
firebase use staging
lubfirebase use prod
poruszaj się między nimi.Gdy znajdziesz się w wybranym środowisku, uruchom,
firebase deploy
a projekt zostanie tam wdrożony.Oto kilka pomocnych linków ...
Dokumentacja CLI
Wdrażanie w wielu środowiskach
Mam nadzieję że to pomoże.
źródło
Sposób, w jaki to robimy, polega na tworzeniu różnych plików kluczy JSON dla różnych środowisk. Użyliśmy funkcji konta usługi zgodnie z zaleceniami Google i mamy jeden plik programistyczny, a drugi do produkcji
źródło
Utwórz projekt Tow ze środowiskiem deweloperskim i produkcyjnym w firebase Pobierz plik json z thre
i skonfiguruj SDK zgodnie z: https://firebase.google.com/docs/android/setup Lub dla Crashlytics: https://firebase.google.com/docs/crashlytics/get-started?platform=android
Najpierw umieść odpowiedni plik google_services.json dla każdego buildType w następujących lokalizacjach:
Uwaga: Root app / google_services.json Ten plik powinien być tam zgodnie z wariantami kompilacji skopiuj kod json do głównego pliku json
Teraz przygotujmy kilka zadań gradle w pliku build.gradle: app, aby zautomatyzować przenoszenie odpowiedniego pliku google_services.json do app / google_services.json
skopiuj to do pliku app / Gradle
Świetnie - ale konieczność ręcznego wykonywania tych zadań przed utworzeniem aplikacji jest uciążliwa. Chcielibyśmy, aby powyższe zadanie kopiowania zostało uruchomione jakiś czas wcześniej: assembleDebug lub: assembleRelease jest uruchamiane. Zobaczmy, co się stanie, gdy: assembleRelease zostanie uruchomiona: skopiuj to do pliku / gradlew
Zwróć uwagę na zadanie: app: processReleaseGoogleServices. To zadanie jest odpowiedzialne za przetwarzanie głównego pliku google_services.json. Chcemy, aby przetwarzany był prawidłowy plik google_services.json, dlatego musimy natychmiast uruchomić nasze zadanie kopiowania. Dodaj to do swojego build.gradle. Zwróć uwagę na otaczającą wartość afterEvaluate.
skopiuj to do pliku app / Gradle
Teraz, w dowolnym momencie wywoływana jest funkcja: app: processReleaseGoogleServices, nasze nowo zdefiniowane: app: switchToRelease zostanie wcześniej wywołane. Ta sama logika dla debugowania buildType. Możesz uruchomić: app: assembleRelease, a wersja google_services.json zostanie automatycznie skopiowana do folderu głównego modułu aplikacji.
źródło
google-services.json
pliku do katalogu głównego, jeśli go przechowujesz folder ze smakami, który jest w porządku. Zamiast tegoassembleRelease
możesz po prostu wywołaćassembleTestRelease
zadanie.