Gần đây mình có làm app android dùng Firebase, Facebook SDK, chạy test trên máy ảo, apk release trên máy thật ngon lành nhưng đến khi submit lên Play Store thì bản trên store lại bị lỗi. Cùng mình xem tại sao lại lỗi và khắc phục thế nào nhé.
Khi code android mà sử dụng Firebase hay Facebook SDK thì Firebase hay Facebook sẽ yêu cầu bạn cung cấp mã hash của signing key mà bạn dùng cho ứng dụng của bạn.
Trong quá trình phát triển thì sẽ điền hash của debug key:
- Cấu hình cho Facebook App
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
- Cấu hình cho Firebase App
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
Đến khi build bản release (App Bundle hoặc APK) thì sẽ dùng 1 key khác và cũng cấu hình cho Facebook App, Firebase App. Với việc cấu hình như vậy thì app sẽ hoạt động bình thường ở chế độ Debug hoặc bản Release cài qua file APK.
Giờ đến khi submit lên Play Store, mình mới dùng lần đầu nên thấy Google đề xuất dùng Play App Signing (chưa biết nó là cái gì) thì cũng dùng luôn
Sau một vài bước cũng submit được bản Internal testing để có thể cài app qua Play Store, và kết quả là tính năng Đăng nhập bằng Facebook bị lỗi:
Nếu mà chỉ cần xong việc thôi thì rất đơn giản, chỉ việc copy cái key hash mà Facebook đang hiện ra rồi update lại vào Facebook App là xong.
Nhưng không, là một người luôn muốn làm chủ công nghệ thì mình quyết tâm phải kiểm tra xem là cái app của mình nó đang dùng cái key nào mà nó lại có cái mã hash thế kia. Thử cả 2 key là key debug và key release trên máy mình đều không ra cái mã hash kia. Rà soát lại một lượt thì chỉ thấy cái đoạn Play App Signing kia là khả nghi, đọc tài liệu của Google một lúc thì cũng máng máng là cái Play App Signing nó hoạt động dư lày:
Hoá ra là nếu dùng Play App Signing thì trước khi publish lên store để người dùng tải về thì Google sẽ bóc cái Release Key của mình ra khỏi app và ký lại với cái key mà Google quản lý. Việc này làm cho app mà tải qua store sẽ có hash key khác với app cài qua bản Release APK => Firebase, Facebook chưa được cấu hình là hash key này hợp lệ nên sẽ không chạy được.
Giờ cần tìm cái key mà Google đã dùng để ký app và cấu hình vào Firebase, Facebook là xong.
Truy cập Google Play Console: App > Setting > App Integrity sẽ thấy phần App signing key certificate
Đây là hash của cái key mà Google đã dùng, dùng mã hash này để cấu hình vào Firebase, Facebook là xong
- Cấu hình Facebook (định dạng base64)
echo YOUR_HEXADECIMAL_KEY | xxd -r -p | openssl base64
- Cấu hình Firebase: copy trực tiếp từ Google Play Console và dán vào Firebase
Như vậy sau khi hoàn thành thì Firebase, Facebook App của bạn sẽ cho phép 3 key được sử dụng: Debug Key (để dùng trong lúc phát triển), Release Key (để dùng khi cài trực tiếp từ APK) và App Signing Key (để dùng khi app được tải qua store).
Tham khảo:
- https://developer.android.com/studio/publish/app-signing