Khái niệm Android (dành cho Nhà phát triển web)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

Nếu bạn là nhà phát triển web mới sử dụng Android và Google Play, thì có một số chi tiết bạn cần lưu ý. 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ẽ giúp bạn quản lý và bảo vệ khoá ký ứng dụng. 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 hai 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 giúp bạn có thể đặt lại khoá tải lên nếu khoá này 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 tệp AAB lên Play Console, bạn sẽ hoãn quá trình tạo và tạo tệp 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 cần thực hiện việc ký 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 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 hoàn toàn chịu trách nhiệm về 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 nếu 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 Bubblewrap không tìm thấy kho khoá hiện có có tên khoá đó tại vị trí đó, thì Bubblewrap sẽ tạo một kho khoá cho bạn đồng thời 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 của bạn. 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 của bạn 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 áp dụng để quản lý phiên bản. Thay vào đó, hãy giới hạn số lượng người có quyền truy cập vào dữ liệu đó.

Bạn cần có Digital Asset Links (Đườ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 rằng ứng dụng Android do Bubblewrap tạo ra được xác minh đúng cách và khởi chạy dưới dạng Hoạt động đáng tin cậy trên web (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ố cho 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 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 vân tay đều phải cung cấp cho bạn cùng một vân tay, 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á:

  1. Truy cập vào Play Console
  2. Chọn ứng dụng mà bạn quan tâm
  3. 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.
  4. Sao chép SHA256 cho khoá thích hợp:

Truy xuất vân tay số SHA256 thích hợp cho khoá ký hoặc khoá tải lên

  • Khoá ký: Sao chép vân tay số SHA256 cho "Chứng chỉ khoá ký ứng dụng". Vân tay này sẽ tương ứng với ứng dụng của bạn nếu bạn tải xuống từ Cửa hàng Google Play vì Google Play phân phối ứng dụng đã 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

Một cách khác để lấy đúng tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) cho ứng dụng là sử dụng Công cụ liên kết tài sản:

  1. Cài đặt Công cụ liên kết tài sản từ Cửa hàng Play.
  2. Trên cùng một thiết bị, hãy tải ứng dụng của bạn xuống từ Cửa hàng Google Play hoặc cài đặt trên thiết bị.
  3. 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 đó.
  4. 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.

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ả. Trung tâm trợ giúp GitHub có thêm thông tin 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 các 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 bằng Đường liên kết đến tài sản kỹ thuật số. Bạn có thể xem nhật ký trên một thiết bị Android có 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.