Vibeloy
Zarejestruj się
Wszystkie wpisy

Blog

Jak uzyskać odcisk SHA-1 i SHA-256 (keytool, Firebase)

Opublikowano: Zaktualizowano: 7 min czytania

Czym jest odcisk SHA-1/SHA-256 i gdzie jest potrzebny?

Odcisk to wartość skrótu (hash) wyprowadzona z certyfikatu podpisującego Twoją aplikację; udowadnia on, który certyfikat wygenerował dany pakiet. Każda para keystore/alias dla aplikacji Android generuje własny odcisk — ta sama aplikacja podpisana innym keystore daje inny SHA-1.

Ta wartość jest najczęściej potrzebna w trzech miejscach: przy dodawaniu aplikacji Android w konsoli Firebase (dla funkcji takich jak Google Sign-In, Phone Authentication, App Check), przy ograniczaniu klucza API Maps SDK for Android według nazwy pakietu + SHA-1 w Google Cloud Console, oraz w pliku assetlinks.json hostowanym na Twoim serwerze do automatycznej weryfikacji Android App Links.

SHA-1 od dawna jest wymagane w klasycznych scenariuszach, takich jak Google Sign-In i ograniczanie klucza API Maps; SHA-256 jest wymagane do weryfikacji App Links (assetlinks.json) i niektórych nowszych funkcji Firebase. Polecenie keytool -list -v wypisuje oba w tym samym wyniku, więc jedno polecenie wystarczy niezależnie od tego, o które Cię proszą.

Uzyskiwanie SHA z keystore debug

Android Studio i Flutter automatycznie generują keystore debug do programowania lokalnego, dostarczany ze stałymi danymi: znajduje się w ~/.android/debug.keystore na macOS/Linuksie oraz w C:\Users\<TwojaNazwaUżytkownika>\.android\debug.keystore w Windows; alias to zawsze androiddebugkey, a hasło magazynu i klucza to android.

Mając te dane, polecenie brzmi: keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android. Wynik pokazuje wiersze „SHA1:" i „SHA256:", oba sformatowane jako pary szesnastkowe rozdzielone dwukropkami.

Ten odcisk działa tylko dla buildów debug; keystore debug jest też specyficzny dla maszyny — własny plik debug.keystore każdego dewelopera i każdej maszyny CI generuje inny SHA-1. Jeśli pracujesz w zespole, każdy członek (i CI) musi osobno dodać własny debug SHA-1 do Firebase; to najczęstsza przyczyna sytuacji „Google Sign-In działa u mnie, ale nie u kolegi z zespołu".

Uzyskiwanie SHA z keystore release/upload

Jeśli masz już keystore typu release lub upload (jak go utworzyć za pomocą keytool, opisujemy w naszym innym przewodniku), polecenie ma tę samą postać — po prostu wskaż w nim własny plik i alias: keytool -list -v -keystore /ścieżka/do/twojego/upload-keystore.jks -alias upload. Poprosi o hasło magazynu ustawione podczas tworzenia keystore.

Te dane możesz odczytać z pliku android/key.properties (storeFile, keyAlias); wpisanie hasła interaktywnie, gdy zostaniesz o nie poproszony, zamiast podawania go w wierszu poleceń, pozwala uniknąć pozostawienia go w postaci zwykłego tekstu w historii powłoki.

SHA-1/SHA-256 wygenerowany w ten sposób należy do Twojego „upload key". Jeśli Twoja aplikacja jest zapisana do Play App Signing (obowiązkowe dla nowych aplikacji od 2021 roku), ta wartość MOŻE NIE odpowiadać rzeczywistemu podpisowi pakietu dystrybuowanego użytkownikom — kolejna sekcja to omawia.

W ramach Play App Signing: debug vs. upload vs. app signing key (błąd numer jeden)

Przy włączonym Play App Signing podpisujesz AAB własnym upload key, ale Google Play ponownie podpisuje pakiet własnym „app signing key" przed dystrybucją do użytkowników. Rezultat: certyfikat rzeczywistej aplikacji, którą użytkownicy pobierają ze sklepu, NIE odpowiada SHA-1 wyodrębnionemu z Twojego lokalnego keystore upload.

To dokładnie najczęstszy błąd: deweloper dodaje do Firebase SHA-1 z lokalnego keystore upload, wszystko działa na jego własnym urządzeniu i w wewnętrznych buildach testowych, ale u prawdziwych użytkowników pobierających z Play Store Google Sign-In lub Maps API po cichu zawodzi — ponieważ pakiet ze sklepu ma inny certyfikat.

Pobierz poprawne wartości z ekranu Protected with Play > Play Store protection > Manage Play app signing w Play Console, gdzie wymienione są dwa osobne certyfikaty: „App signing key certificate" (rzeczywisty podpis otrzymywany przez użytkowników) oraz „Upload key certificate". Oba wyświetlają na tym ekranie własne wartości SHA-1, SHA-256 i MD5.

Praktyczne rozwiązanie: Firebase pozwala zarejestrować więcej niż jeden odcisk na aplikację Android. Dodaj jednocześnie SHA-1 z keystore debug, SHA-1 z upload key ORAZ SHA-1 z app signing key; dzięki temu programowanie lokalne, wewnętrzne buildy testowe dystrybuowane bezpośrednio jako APK oraz rzeczywiste instalacje z Play Store będą się poprawnie uwierzytelniać.

Dodawanie odcisku SHA do Firebase

Przejdź do Firebase Console > Project settings (ikona koła zębatego) > „Your apps", znajdź kartę swojej aplikacji Android, przejdź do pola „SHA certificate fingerprints", dodaj tam wartość SHA-1 lub SHA-256 z wyniku keytool i zapisz. Do tej samej karty aplikacji możesz dodać tyle odcisków, ile potrzebujesz.

Podczas wklejania skopiuj wynik keytool dokładnie tak, jak został wypisany (pary szesnastkowe rozdzielone dwukropkami); Firebase akceptuje wartość z dwukropkami lub bez, ale ręczne przepisywanie zostawia miejsce na błędy transkrypcji. W przypadku niektórych funkcji zależnych od SHA, takich jak Google Sign-In czy App Check, zaleca się ponowne pobranie zaktualizowanego pliku google-services.json i umieszczenie go z powrotem w projekcie po dodaniu odcisku.

Ponieważ Skarbiec Keystore Vibeloy przechowuje Twój plik keystore i hasła w szyfrowaniu end-to-end, pozwala on wyświetlać i kopiować wartości SHA-1/SHA-256 jednym kliknięciem ze skarbca, bez konieczności szukania ścieżki pliku i hasła za każdym razem, gdy potrzebujesz keytool. To funkcja premium Vibeloy.

Częste pytania

Dlaczego moje wartości SHA-1 debug i release są różne?
Ponieważ pochodzą z różnych keystore. Keystore debug jest generowany automatycznie i specyficzny dla maszyny, natomiast keystore release/upload to stały klucz, który utworzyłeś samodzielnie. To normalne, że ich odciski się różnią; musisz dodać oba osobno do Firebase.
Czy powinienem użyć SHA-1 czy SHA-256?
Użyj tego, o które prosi integrowana funkcja; jeśli nie masz pewności, dodaj oba. Polecenie keytool -list -v już wypisuje oba w tym samym wyniku, więc nie musisz uruchamiać osobnego polecenia dla każdego z nich.
W ramach Play App Signing, który SHA powinienem dodać do Firebase?
Dodaj zarówno SHA Twojego upload key, jak i SHA app signing key — oba możesz uzyskać z ekranu Protected with Play > Play Store protection > Manage Play app signing w Play Console. Dodanie tylko wartości z lokalnego keystore upload spowoduje, że funkcja nie zadziała u prawdziwych użytkowników pobierających z Play Store.
Podczas uruchamiania keytool otrzymuję błąd „command not found" — co powinienem zrobić?
keytool jest dołączony do JDK i nie można go znaleźć bezpośrednio, jeśli nie znajduje się w PATH. Na macOS/Linuksie JDK zwykle jest już w PATH; jeśli nie, wskaż katalog bin JDK zainstalowanego przez Android Studio. W Windows najbardziej niezawodnym sposobem jest uruchomienie flutter doctor -v i odnalezienie w wyniku wiersza „Java binary at:", aby zlokalizować katalog bin tego JDK; założenie ścieżki „%JAVA_HOME%\bin\keytool" może wprowadzać w błąd, jeśli zmienna nie jest ustawiona lub masz zainstalowane więcej niż jedno JDK.
Ile czasu zajmuje aktywacja odcisku dodanego do Firebase?
Zwykle staje się aktywny w ciągu kilku minut. W przypadku niektórych funkcji, takich jak Google Sign-In czy App Check, po dodaniu może być konieczne ponowne pobranie zaktualizowanego pliku google-services.json i umieszczenie go z powrotem w projekcie; w przeciwnym razie stary plik nie rozpozna nowego odcisku.