Blog
SHA-1 ve SHA-256 Fingerprint Nasıl Alınır? (keytool, Firebase)
Yayınlanma: Güncelleme: 7 dk okuma
SHA-1/SHA-256 fingerprint nedir, nerede istenir?
Fingerprint, uygulamanızı imzalayan sertifikadan türetilen bir özet (hash) değeridir; o sertifikayı kimin ürettiğini kanıtlamak için kullanılır. Bir Android uygulaması için her keystore/alias çifti kendi fingerprint'ini üretir — farklı bir keystore ile imzalanan aynı uygulama farklı bir SHA-1 verir.
Bu değer en sık üç yerde istenir: Firebase konsolunda bir Android uygulaması eklerken (Google ile Giriş, Phone Authentication, App Check gibi özellikler için), Google Cloud Console'da bir Maps SDK for Android API anahtarını paket adı + SHA-1 ile kısıtlarken, ve Android App Links'in otomatik doğrulaması için sunucunuzda barındırdığınız assetlinks.json dosyasında.
SHA-1 uzun süredir Google ile Giriş ve Maps API anahtarı kısıtlaması gibi klasik senaryolarda istenir; SHA-256 ise App Links doğrulaması (assetlinks.json) ve daha yeni Firebase özellikleri için gerekir. keytool -list -v komutu ikisini de aynı çıktıda gösterir, bu yüzden hangisi istenirse istensin tek komut yeterlidir.
Debug keystore'dan SHA alma
Android Studio ve Flutter, yerel geliştirme için otomatik bir debug keystore üretir ve sabit bilgilerle gelir: macOS/Linux'ta ~/.android/debug.keystore, Windows'ta C:\Users\<KullanıcıAdı>\.android\debug.keystore yolunda bulunur; alias her zaman androiddebugkey, depo (store) ve anahtar (key) şifresi ise ikisi de android'dir.
Bu bilgilerle komut şudur: keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android. Çıktıda "SHA1:" ve "SHA256:" satırlarını göreceksiniz; ikisi de iki nokta üst üste ile ayrılmış onaltılık (hex) çiftler halindedir.
Bu fingerprint yalnızca debug build'ler için geçerlidir; ayrıca debug keystore makineye özgüdür — her geliştiricinin ve her CI makinesinin kendi debug.keystore dosyası farklı bir SHA-1 üretir. Bir ekip halinde çalışıyorsanız her üyenin (ve CI'ın) kendi debug SHA-1'ini ayrı ayrı Firebase'e eklemesi gerekir; aksi halde "Google ile Giriş bende çalışıyor ama arkadaşımda çalışmıyor" şikayetinin en sık nedeni budur.
Release / upload keystore'dan SHA alma
Zaten bir release veya upload keystore'unuz varsa (keytool ile nasıl oluşturulacağını rehberimizde anlattık) komut aynı yapıdadır, yalnızca kendi dosya yolunuzu ve alias'ınızı verirsiniz: keytool -list -v -keystore /size/ozel/yol/upload-keystore.jks -alias upload. Komut, keystore'u oluştururken belirlediğiniz depo şifresini soracaktır.
Bu bilgileri android/key.properties dosyanızdan (storeFile, keyAlias) okuyabilirsiniz; storePassword alanını komut satırına yazmak yerine şifre sorulduğunda elle girmeniz, şifrenin terminal geçmişinde düz metin olarak kalmasını önler.
Burada çıkan SHA-1/SHA-256, sizin "upload key"inize aittir. Uygulamanız Play App Signing'e kayıtlıysa (2021'den beri yeni uygulamalarda zorunlu) bu değer, kullanıcıya dağıtılan paketin gerçek imzasıyla AYNI OLMAYABİLİR — bir sonraki bölüm bunu ele alıyor.
Play App Signing kullanıyorsanız: debug/upload/app signing farkı (en sık hata)
Play App Signing açıkken siz AAB'yi kendi upload key'inizle imzalarsınız, ama Google Play kullanıcılara dağıtmadan önce paketi kendi elindeki "app signing key" ile yeniden imzalar. Sonuç: mağazadan indirilen gerçek uygulamanın sertifikası, sizin yerel upload keystore'unuzdan çıkardığınız SHA-1 ile AYNI DEĞİLDİR.
En sık yapılan hata tam olarak budur: geliştirici yerel upload keystore'undan aldığı SHA-1'i Firebase'e ekler, her şey kendi test cihazında ve iç test sürümlerinde çalışır, ama Play Store'dan indiren gerçek kullanıcılarda Google ile Giriş ya da Maps API sessizce başarısız olur — çünkü mağazadaki paket farklı bir sertifikayla imzalıdır.
Doğru değerleri Play Console'da Protected with Play > Play Store protection > Manage Play app signing ekranından alın; burada iki ayrı sertifika listelenir: "Uygulama imzalama anahtarı sertifikası" (App signing key certificate — kullanıcıya giden gerçek imza) ve "Yükleme anahtarı sertifikası" (Upload key certificate). Her ikisinin de SHA-1, SHA-256 ve MD5 değerleri bu ekranda ayrı ayrı gösterilir.
Pratik çözüm: Firebase bir Android uygulamasına birden fazla fingerprint eklemenize izin verir. Debug keystore'un SHA-1'ini, upload key'in SHA-1'ini VE app signing key'in SHA-1'ini aynı anda ekleyin; böylece yerel geliştirme, doğrudan APK ile dağıtılan iç test sürümleri ve Play Store'dan gelen gerçek kullanıcı kurulumlarının hepsi sorunsuz doğrulanır.
Firebase'e SHA fingerprint ekleme
Firebase Console > Project settings (dişli ikonu) > "Your apps" altında ilgili Android uygulamanızın kartını bulun, "SHA certificate fingerprints" alanına gidin, keytool çıktısındaki SHA-1 veya SHA-256 değerini ekleyin ve kaydedin. Aynı uygulama kartına istediğiniz kadar fingerprint ekleyebilirsiniz.
Yapıştırırken keytool çıktısını olduğu gibi kopyalayın (iki nokta üst üste ile ayrılmış onaltılık çiftler); Firebase hem kolonlu hem kolonsuz biçimi kabul eder ama elle yeniden yazmak transkripsiyon hatasına açık kapı bırakır. Google ile Giriş veya App Check gibi SHA'ya dayalı bazı özellikler için fingerprint ekledikten sonra güncel google-services.json dosyasını yeniden indirip projenize koymanız önerilir.
Vibeloy Keystore Kasası, keystore dosyanızı ve şifrelerinizi uçtan uca şifreli sakladığı için SHA-1/SHA-256 değerlerini keytool'a her seferinde dosya yolu ve şifre aratmadan, kasadan tek tıkla görüntüleyip kopyalamanızı sağlar. Bu, premium bir Vibeloy özelliğidir.
Sık sorulan sorular
- Debug ve release SHA-1 değeri neden farklı çıkıyor?
- Çünkü farklı keystore'lardan üretiliyorlar. Debug keystore otomatik ve makineye özgüdür, release/upload keystore ise sizin oluşturduğunuz kalıcı anahtardır. İkisinin fingerprint'i farklı olması normaldir; her ikisini de ayrı ayrı Firebase'e eklemeniz gerekir.
- SHA-1 mi SHA-256 mı kullanmalıyım?
- Hangi özelliği entegre ediyorsanız onun istediği değeri kullanın; emin değilseniz ikisini de ekleyin. keytool -list -v komutu zaten ikisini de aynı çıktıda gösterdiği için ek bir komut çalıştırmanız gerekmez.
- Play App Signing açıkken Firebase'e hangi SHA'yı eklemeliyim?
- Hem upload key'inizin hem de app signing key'in SHA'sını ekleyin; ikisini de Play Console'daki Protected with Play > Play Store protection > Manage Play app signing ekranından alabilirsiniz. Yalnızca yerel upload keystore'unuzdan çıkardığınız değeri eklemek, Play Store'dan indiren gerçek kullanıcılarda özelliğin çalışmamasına yol açar.
- keytool komutu çalıştırınca "command not found" hatası alıyorum, ne yapmalıyım?
- keytool, JDK ile birlikte gelir ve PATH'e ekli değilse doğrudan bulunamaz. macOS/Linux'ta JDK PATH'e eklidir genelde; bulunamıyorsa Android Studio'nun kurduğu JDK'nın bin dizinini kullanın. Windows'ta en güvenilir yol flutter doctor -v çalıştırıp çıktıdaki "Java binary at:" satırından o JDK'nın bin dizinine ulaşmaktır; "%JAVA_HOME%\bin\keytool" varsayımı, değişken ayarlı değilse veya birden fazla JDK kuruluysa yanıltıcı olabilir.
- Firebase'e eklediğim fingerprint ne kadar sürede etkin olur?
- Genellikle birkaç dakika içinde etkin olur. Google ile Giriş veya App Check gibi bazı özellikler için ekleme sonrası güncel google-services.json dosyasını yeniden indirip projenize koymanız gerekebilir; aksi halde eski dosya yeni fingerprint'i tanımaz.
İlgili araç
Vibeloy Keystore Kasası'nı Aç