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

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

Nếu là một Nhà phát triển web mới làm quen với Android và Google Play, bạn cần lưu ý một số thông tin sau. Đã có nhiều tài nguyên và tài liệu cho vấn đề này (nhờ có nhóm Android), nhưng ở đây, chúng tôi 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 chúng với Bubblewrap.

So sánh khoá tải lên so với khoá ký

Nếu bạn định 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 đều phải sử dụng định dạng Android App Bundle) hoặc tệp APK để tải và phát hành lên Google Play, thì bạn sẽ phải ký ứng dụng bằng một khoá ký. Google Play cung cấp cho bạn 2 cách để xử lý vấn đề này:

  • Tính năng ký ứng dụng của Play (rất 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 tính năng này để ký tệp APK của bạn để phân phối. Tính năng ký ứng dụng của Play dùng 2 khoá. "Khoá ký ứng dụng" mà Google sẽ quản lý cho bạn và "khoá tải lên" mà bạn giữ và phải ở chế độ riêng tư cho bạn. Bạn sử dụng khoá tải lên này để ký ứng dụng rồi 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 tệp AAB hoặc APK:
    • Android App Bundle (AAB): Khi tải tệp AAB lên Play Console, bạn sẽ trì hoãn việc 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 của bạn, 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 của mình dưới dạng tệp AAB lên Play Console, 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 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ý. Như đã lưu ý trước đó, Google Play sẽ sớm yêu cầu bạn tải tất cả ứng dụng mới lên ở định dạng AAB. Vì vậy, bạn nên làm việc 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ý cho ứng dụng của mình. 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 đó, khi mất khoá ký ứng dụng, bạn cũng không thể cập nhật ứng dụng của mình.

Trong quá trình thiết lập bubblewrap init, khi đến phần "Ký thông tin khoá (5/5)", bạn sẽ được nhắc nhập "Vị trí kho khoá""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ó nào có tên khoá đó ở vị trí, thì 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 những mật khẩu bạn đã nhập vì sẽ cần đến trong quá trình xây dựng (bubblewrap build). Khoá 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ù chọn sử dụng khoá được tạo bằng Bubblewrap làm khoá ký hoặc khoá tải lên, bạn cũng nên bảo vệ và giữ khoá riêng tư. Bạn không nên cam kết với 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ệp đó.

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 của bạn. Để đảm bảo rằng ứ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 đá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 đó, tải tệp đó lên trang web của bạn tại .well-known/assetlinks.json (tương ứng với thư mục gốc). Tệp assetlinks.json của bạn phải 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ố cho 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 số liên kết với khoá ký và tải lên của bạn sẽ khác nhau. Bạn cần phải lưu ý đến sự khác biệt này, đặc biệt là khi bạn thấy ứng dụng của mình khởi chạy dưới dạng Thẻ tuỳ chỉnh của Chrome (trong đó thanh trình duyệt hiển thị). Khi đó, 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 cục bộ cho ứng dụng. 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 vài 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 mẫu đó sẽ 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 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 Play Console
  2. Chọn ứng dụng mà bạn quan tâm
  3. Trên trình đơn điều hướng ở bên trái, trong phần Bản phát hành, hãy chuyển đến mục 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ố cho chứng chỉ SHA256 thích hợp làm khoá ký hoặc khoá tải lên

  • Khoá ký: Sao chép vân tay số SHA256 của "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 ứng dụng xuống từ Cửa hàng Google Play vì Google Play phân phối ứng dụng được ký bằng khoá ký.

  • Khoá tải lên: Sao chép vân tay số SHA256 của "Chứng chỉ khoá tải lên". Vân tay 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 cục bộ (ví dụ: qua ADB qua USB). APK đó (trên máy cục bộ của bạn) do Bubblewrap tạo và do đó được ký bằng khoá mà nó cũng 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ần cài đặt trên máy, nhưng thực ra khoá nà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 số 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 để tải đúng tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) cho ứng dụng của bạn 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 chính 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 ứng dụng trên thiết bị.
  3. Mở ứng dụng Asset Link Tool và bạn sẽ thấy danh sách tất cả các ứng dụng được 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 và 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 nút Sao chép hoặc Chia sẻ ở dưới cùng để xuất báo cáo theo cách bạn muốn (ví dụ: lưu vào Google Keep, gửi báo cáo cho chính bạn qua email).

Ý tưởng này cũng áp dụng như trước đây đối 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, Công cụ liên kết tài sản sẽ cung cấp cho bạn vân tay số 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 là dành cho khoá được tạo bằng Bubblewrap.

Giờ bạn đã tải tài sản lên, hãy đảm bảo bạn có thể truy cập vào tệp đường liên kết đến tài sản trong trình duyệt. Kiểm tra để đảm bảo rằng https://example.com/.well-known/assetlinks.json phân giải thành 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 do Jekyll (chẳng hạn như các Trang GitHub) tạo), thì bạn cần thêm một dòng cấu hình để đưa thư mục .well-known vào kết quả. Trang trợ giúp của GitHub có thêm thông tin về chủ đề này. Tạo một tệp có tên là _config.yml ở thư mục gốc của trang web (hoặc thêm vào tệp nếu tệp đã tồn tại) và 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 tài sả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 một dấu phẩy thừa ở 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 Đườ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ị được 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.