Nếu là một nhà phát triển web mới sử dụng Android và Google Play, bạn nên lưu ý một số thông tin chi tiết. Hiện đã có nhiều tài nguyên và tài liệu về vấn đề này (cảm ơn nhóm Android), nhưng ở đây chúng ta sẽ làm nổi bật một số khái niệm quan trọng và mối liên hệ của các khái niệm đó với Bubblewrap.
Khoá tải lên so với khoá ký
Nếu dự định sử dụng Bubblewrap để tạo Android App Bundle (AAB) (Lưu ý: Kể từ tháng 8 năm 2021, Google Play sẽ yêu cầu tất cả ứng dụng mới sử dụng định dạng Android App Bundle) hoặc APK để tải lên và phát hành lên Google Play, bạn cần ký ứng dụng bằng khoá ký. Google Play cung cấp cho bạn hai cách để xử lý vấn đề này:
- Tính năng ký ứng dụng của Play (nên dùng): Google sẽ quản lý và bảo vệ khoá ký cho ứng dụng của bạn. Tính năng này sử dụng khoá đó để ký các tệp APK cho hoạt động phân phối. Tính năng ký ứng dụng của Play sử dụng 2 khoá. "khoá ký ứng dụng" do Google quản lý cho bạn và "khoá tải lên" do bạn giữ và phải luôn ở chế độ riêng tư. Bạn sử dụng khoá tải lên để ký ứng dụng của mình nhằm tải lên Play Console. Hệ thống này cho phép bạn đặt lại khoá tải lên nếu khoá đó bị mất hoặc bị xâm phạm bằng cách liên hệ với nhóm hỗ trợ của Play. Hiện tại, Google Play cho phép bạn tải ứng dụng lên dưới dạng AAB hoặc APK:
- Android App Bundle (AAB): Khi tải AAB lên Play Console, bạn sẽ hoãn việc tạo và tạo APK cho Cửa hàng Google Play. Khi người dùng tải xuống và cài đặt ứng dụng, Google Play sẽ phân phối ứng dụng đó cho họ dưới dạng tệp APK đã ký. Do đó, Google Play cũng sẽ phải ký các tệp APK. Vì vậy, theo mặc định, nếu bạn tải ứng dụng lên Play Console dưới dạng tệp AAB, thì bạn sẽ phải sử dụng tính năng Ký ứng dụng của Play.
- APK: Với tệp APK, bạn có thể chọn sử dụng Tính năng ký ứng dụng của Play. Bạn nên chọn sử dụng tính năng Ký ứng dụng của Play vì tính năng này giúp tăng cường bảo mật cho khoá ký của bạn. Như đã lưu ý trước đó, Google Play sẽ sớm yêu cầu tất cả ứng dụng mới phải được tải lên ở định dạng AAB. Vì vậy, bạn nên tải lên theo định dạng này thay vì tải tệp APK lên.
- Quản lý khoá ký của riêng bạn: Nếu chọn quản lý khoá của riêng mình và không chọn sử dụng Tính năng ký ứng dụng của Play, thì bạn sẽ chịu toàn bộ trách nhiệm đối với khoá ký của ứng dụng. Không giống như Tính năng ký ứng dụng của Play, bạn không thể đặt lại khoá này nếu bị mất khoá. Do đó, nếu mất khoá ký của ứng dụng, bạn cũng sẽ không thể cập nhật ứng dụng.
Trong quá trình thiết lập bubblewrap init
, khi đến phần "Signing key information (5/5)" (Thông tin khoá ký (5/5)), bạn sẽ được nhắc nhập "Key store location" (Vị trí kho khoá) và "Key name" (Tên khoá) hoặc sử dụng các giá trị mặc định. Vị trí kho khoá mặc định là tệp android.keystore
trong thư mục dự án và tên khoá mặc định là android
. Nếu không tìm thấy kho khoá hiện có có tên khoá đó tại vị trí đó, Bubblewrap sẽ tạo một kho khoá cho bạn và cũng nhắc bạn nhập mật khẩu. Hãy ghi lại mật khẩu bạn đã nhập vì bạn sẽ cần mật khẩu đó trong quá trình tạo bản dựng (bubblewrap build
). Quá trình này sẽ sử dụng khoá để ký ứng dụng. Nếu bạn chọn sử dụng Tính năng ký ứng dụng của Play, thì khoá ký mà Bubblewrap đã tạo và dùng để ký ứng dụng sẽ trở thành "khoá tải lên". Cho dù bạn chọn sử dụng khoá do Bubblewrap tạo làm khoá ký hay khoá tải lên, bạn đều phải bảo vệ và giữ khoá ở chế độ riêng tư.
Bạn không nên cam kết thay đổi này trong hệ thống quản lý phiên bản. Thay vào đó, hãy giới hạn số lượng cá nhân có quyền truy cập vào tài khoản đó.
Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số)
Bạn cần có Đường liên kết đến tài sản kỹ thuật số để khai báo mối quan hệ giữa trang web và ứng dụng Android. Để đảm bảo ứng dụng Android do Bubblewrap tạo được xác minh đúng cách và khởi chạy dưới dạng Hoạt động web đáng tin cậy (thay vì Thẻ tuỳ chỉnh của Chrome), bạn cần thêm khoá thích hợp vào tệp assetlinks.json
. Sau đó, hãy tải tệp này lên trang web của bạn tại .well-known/assetlinks.json
(so với thư mục gốc). Tệp assetlinks.json
của bạn phải tuân theo định dạng sau:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.your.package_name",
"sha256_cert_fingerprints": [
"XX:XX:XX:..."
]
}
}]
Lấy vân tay số chứng chỉ SHA256
Để tạo tệp assetlinks.json
, bạn cần có vân tay số của chứng chỉ SHA 256 được liên kết với khoá ký của ứng dụng. Điều quan trọng cần lưu ý là các vân tay được liên kết với khoá ký và khoá tải lên sẽ khác nhau. Bạn cần lưu ý đến sự khác biệt này, đặc biệt là nếu quan sát thấy ứng dụng của mình khởi chạy dưới dạng Thẻ tuỳ chỉnh của Chrome (với thanh trình duyệt hiển thị). Sau đó, có thể tệp assetlinks.json
của bạn không có vân tay số tương ứng với khoá thích hợp.
Bạn nên có cả vân tay số của chứng chỉ ký và tải lên trong assetlinks.json để dễ dàng gỡ lỗi ứng dụng trên máy hơn. Hãy xem phần Thêm khoá khác bên dưới để biết thêm thông tin về cách có cả hai khoá trong tệp assetlinks.json
.
Có một số cách để lấy vân tay số, được trình bày chi tiết trong các phần tiếp theo. Tất cả các phương thức này đều cung cấp cho bạn cùng một vân tay số, vì vậy, hãy chọn phương thức thuận tiện nhất.
Qua Play Console
Tuỳ thuộc vào việc bạn có chọn sử dụng Tính năng ký ứng dụng của Play hay không, bạn có thể có một hoặc hai khoá. Để truy xuất vân tay số SHA256 thích hợp cho từng khoá:
- Truy cập vào Play Console
- Chọn ứng dụng mà bạn quan tâm
- Trong trình đơn điều hướng ở bên trái, trong mục Bản phát hành, hãy chuyển đến Thiết lập -> Tính toàn vẹn của ứng dụng.
- Sao chép SHA256 cho khoá thích hợp:
Khoá ký: Sao chép vân tay số SHA256 cho "Chứng chỉ khoá ký ứng dụng". Vân tay số này sẽ tương ứng với ứng dụng của bạn nếu bạn tải ứng dụng đó xuống từ Cửa hàng Google Play vì Google Play phân phối ứng dụng của bạn đã ký bằng khoá ký.
Tải khoá lên: Sao chép vân tay số SHA256 cho "Tải chứng chỉ khoá lên". Vân tay số này sẽ tương ứng với ứng dụng của bạn nếu bạn cài đặt ứng dụng đó trên máy (ví dụ: thông qua ADB qua USB). APK đó (trên máy cục bộ của bạn) được tạo bởi Bubblewrap và do đó, cũng được ký bằng khoá mà Bubblewrap đã tạo cho bạn (trong quá trình thiết lập
init
). Hãy nhớ rằng đây có thể là khoá ký cho ứng dụng được cài đặt cục bộ, nhưng thực sự đây sẽ trở thành "khoá tải lên" sau khi bạn phát hành ứng dụng thông qua Play.
Qua keytool
keytool là một công cụ quản lý khoá và chứng chỉ. Bạn có thể sử dụng keytool để trích xuất vân tay SHA 256 liên kết với APK hoặc AAB Bubblewrap đã tạo. Xin lưu ý rằng vân tay số này là dành cho khoá ký cục bộ và nếu bạn tải ứng dụng lên Play và chọn sử dụng Tính năng ký ứng dụng của Play, thì khoá này sẽ trở thành "khoá tải lên".
keytool -printcert -jarfile [path to APK or AAB] | grep SHA256
Thông qua Công cụ liên kết thành phần
Bạn cũng có thể sử dụng Công cụ liên kết tài sản để lấy tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) chính xác cho ứng dụng:
- Cài đặt Công cụ liên kết tài sản từ Cửa hàng Play.
- Trên cùng một thiết bị, hãy tải ứng dụng xuống từ Cửa hàng Google Play hoặc cài đặt ứng dụng trên thiết bị.
- Mở ứng dụng Asset Link Tool (Công cụ liên kết tài sản) và bạn sẽ thấy danh sách tất cả ứng dụng đã cài đặt trên thiết bị theo tên gói. Lọc danh sách theo mã ứng dụng mà bạn đã chọn trước đó trong
bubblewrap init
rồi nhấp vào mục đó. - Bạn sẽ thấy một trang liệt kê chữ ký của ứng dụng và một Đường liên kết đến tài sản kỹ thuật số đã tạo. Nhấp vào các nút Sao chép hoặc Chia sẻ ở dưới cùng để xuất theo cách bạn muốn (ví dụ: lưu vào Google Keep, gửi email cho chính bạn).
Bạn cũng có thể áp dụng cách tương tự như trước đây với khoá ký hoặc khoá tải lên. Nếu bạn đã cài đặt ứng dụng từ Cửa hàng Google Play, thì Công cụ liên kết tài sản sẽ cung cấp cho bạn vân tay cho khoá ký của ứng dụng. Nếu bạn cài đặt ứng dụng trực tiếp từ máy cục bộ, thì vân tay số sẽ dành cho khoá Bubblewrap được tạo.
Đảm bảo tệp đường liên kết đến thành phần có thể truy cập được
Giờ đây, sau khi tải tệp lên, hãy đảm bảo bạn có thể truy cập vào tệp đường liên kết đến thành phần trong trình duyệt.
Kiểm tra để đảm bảo https://example.com/.well-known/assetlinks.json
phân giải đến tệp bạn vừa tải lên.
Trang web dựa trên Jekyll
Nếu trang web của bạn được tạo bằng Jekyll (chẳng hạn như GitHub Pages), bạn cần thêm một dòng cấu hình để thư mục .well-known
được đưa vào kết quả.
Trang trợ giúp của GitHub có thông tin khác về chủ đề này.
Tạo một tệp có tên _config.yml
ở thư mục gốc của trang web (hoặc thêm vào nếu tệp này đã tồn tại) rồi nhập:
# Folders with dotfiles are ignored by default.
include: [.well-known]
Thêm khoá khác
Tệp Digital Asset Link có thể chứa nhiều ứng dụng và mỗi ứng dụng có thể chứa nhiều khoá. Ví dụ: để thêm khoá thứ hai, bạn chỉ cần sử dụng Công cụ liên kết thành phần để xác định khoá và thêm khoá đó làm mục nhập thứ hai. Mã trong Chrome phân tích cú pháp JSON này khá nghiêm ngặt, vì vậy, hãy đảm bảo bạn không vô tình thêm dấu phẩy thừa vào cuối danh sách.
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.your.package_name",
"sha256_cert_fingerprints": [
"XX:XX:XX:..."
]
}
},{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.your.package_name",
"sha256_cert_fingerprints": [
"XX:XX:XX:..."
]
}
}]
Khắc phục sự cố
Chrome ghi lại lý do không xác minh được Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) và bạn có thể xem nhật ký trên thiết bị Android bằng adb logcat
.
Nếu đang phát triển trên Linux/Mac, bạn có thể xem nhật ký liên quan từ một thiết bị đã kết nối bằng:
> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links
Ví dụ: nếu thấy thông báo Statement failure matching fingerprint.
, bạn nên sử dụng Công cụ liên kết tài sản để xem chữ ký của ứng dụng và đảm bảo chữ ký đó khớp với chữ ký trong tệp assetlinks.json
.