Phân phối ứng dụng

API EMM của Google Play hỗ trợ các phương thức phân phối sau đây cho ứng dụng công khai và riêng tư:

Tự cài đặt ứng dụng từ cửa hàng Managed Google Play

Bạn có thể xác định những ứng dụng mà người dùng có thể cài đặt trong policy của Device và đặt ứng dụng đó bằng cách gọi Devices.update. Khi cấp phép cho một thiết bị mới, bạn nên đặt chính sách trước khi thêm Tài khoản Google Play được quản lý vào thiết bị, nếu không, chính sách sẽ không được áp dụng trong một khoảng thời gian ngắn sau khi thêm tài khoản vào thiết bị.

Hành vi của Cửa hàng Play được quản lý được xác định bằng giá trị của policy.productAvailabilityPolicy:

  • all: Tất cả ứng dụng công khai trên Cửa hàng Play đều có sẵn.
  • whitelist: Chỉ có các ứng dụng được liệt kê trong policy.productPolicy.

Trong cả hai trường hợp, tất cả ứng dụng trong policy.productPolicy đều được thêm theo mặc định vào bố cục cửa hàng của doanh nghiệp. Bố cục cửa hàng của doanh nghiệp là trang chủ của Cửa hàng Play được quản lý khi bạn chọn whitelist và có thể truy cập trong thẻ "Ứng dụng công việc" khi bạn chọn all. Bạn có thể cho phép khách hàng tùy chỉnh bố cục cửa hàng của doanh nghiệp bằng cách nhúng iframe Google Play được quản lý (xem phần Sắp xếp ứng dụng bằng iframe Google Play được quản lý).

Cài đặt ứng dụng từ xa trên thiết bị của người dùng

Để cài đặt từ xa (còn gọi là cài đặt đẩy) một ứng dụng trên thiết bị của người dùng, hãy đặt policy.productPolicy.autoInstallPolicy trong policy của Device. Khi cấp phép cho một thiết bị mới, bạn nên đặt chính sách trước khi thêm Tài khoản Google Play được quản lý vào thiết bị, nếu không, chính sách sẽ không được áp dụng trong một khoảng thời gian ngắn sau khi thêm tài khoản vào thiết bị.

Bạn có thể đặt autoInstallMode thành:

  • doNotAutoInstall: Ứng dụng không được cài đặt tự động.
  • autoInstallOnce: Ứng dụng được cài đặt tự động một lần, nếu người dùng gỡ cài đặt ứng dụng thì ứng dụng sẽ không được cài đặt lại.
  • forceAutoInstall: Ứng dụng được cài đặt tự động, nếu người dùng gỡ cài đặt ứng dụng thì ứng dụng sẽ được cài đặt lại. Trên các thiết bị được quản lý, DPC sẽ chặn việc gỡ cài đặt bằng DevicePolicyManager.setUninstallBlocked.

Trong trường hợp không thành công (mất kết nối, thiếu bộ nhớ, v.v.), các lượt cài đặt sẽ tự động thử lại cho đến khi thành công. Chiến lược thử lại thời gian đợi luỹ thừa được áp dụng để tránh lãng phí pin và dữ liệu trong trường hợp xảy ra lỗi không thể khôi phục.

Mức độ ưu tiên cài đặt

Bạn có thể chọn thứ tự cài đặt bằng cách đặt autoInstallPriority. Mức độ ưu tiên phải là số nguyên chưa ký và giá trị mặc định là 0. Các ứng dụng sẽ được cài đặt theo thứ tự hoặc mức độ ưu tiên tăng dần, nghĩa là các ứng dụng có giá trị mức độ ưu tiên thấp hơn sẽ được cài đặt trước.

Cài đặt điều kiện ràng buộc

Bạn có thể đặt các quy tắc ràng buộc cài đặt cho từng ứng dụng bằng cách đặt autoInstallConstraint, cho phép bạn kiểm soát trạng thái bắt buộc của thiết bị trong quá trình cài đặt:

  • liệu thiết bị có được kết nối với mạng Wi-Fi hay không,
  • liệu thiết bị có đang sạc hay không,
  • và liệu thiết bị có ở trạng thái rảnh (người dùng không chủ động sử dụng) hay không.

Nếu không đáp ứng được các quy tắc ràng buộc ngay lập tức, thì các lượt cài đặt bị ảnh hưởng sẽ được đưa vào hàng đợi cho đến khi đáp ứng được các quy tắc ràng buộc.

Trong autoInstallConstraint, quy tắc AND được áp dụng giữa các trường. Ví dụ: với autoInstallConstraint sau đây, thiết bị phải vừa sạc vừa kết nối với một mạng không đo lượng dữ liệu (ví dụ: Wi-Fi) để cài đặt ứng dụng:

"autoInstallConstraint": [
  "chargingStateConstraint" : "chargingRequired",
  "networkTypeConstraint" : "unmeteredNetwork"
]

Tự động cài đặt ứng dụng trên các thiết bị mới được cấp phép

API EMM của Google Play sẽ gửi thông báo NewDeviceEvent khi thiết bị được cấp phép lần đầu. Để tự động đẩy cài đặt ứng dụng lên các thiết bị mới được cấp phép, hãy nghe thông báo NewDeviceEvent. Từ mỗi NewDeviceEvent, hãy truy xuất userIddeviceId, sau đó gọi Devices.update để đặt chính sách cho thiết bị đó.

Để tìm hiểu cách đăng ký nhận thông báo của EMM, hãy xem phần Thiết lập thông báo của EMM.

Phản hồi về lỗi tự động cài đặt ứng dụng

Các lỗi liên quan đến việc cài đặt ứng dụng được báo cáo thông qua tính năng Phản hồi ứng dụng và DPC có thể theo dõi thông báo EnterprisePolicyStatus được gửi thông qua KeyedAppStatesService.

Để giải mã dữ liệu được mã hoá Base64, DPC phải tạo các lớp dựa trên định nghĩa proto của EnterprisePolicyStatus. Tham khảo tài liệu về Vùng đệm giao thức để biết hướng dẫn về cách tạo lớp proto.

Với các lớp được tạo, DPC có thể giải mã đối tượng EnterprisePolicyStatus:

EnterprisePolicyStatus enterprisePolicyStatus = EnterprisePolicyStatus.parseFrom(
    BaseEncoding.base64().decode(base64EncodedString)
);

Chính sách thiết bị hiện bao gồm trường tuỳ chọn mới PolicyId. Khi tạo hoặc cập nhật chính sách, EMM có thể đặt PolicyId thành bất kỳ giá trị chuỗi nào để xác định một phiên bản Chính sách thiết bị cụ thể.

Nếu có, phản hồi cài đặt ứng dụng sẽ báo cáo PolicyId để DPC có thể so khớp các lỗi đã nhận được với các chính sách cụ thể.

EnterprisePolicyStatus

message EnterprisePolicyStatus {
  // Individual status for an app in the policy
  repeated ApplicationStatus app_status = 1;

  // Version of the policy for which this status applies.
  PolicyVersion version = 2;
}

ApplicationStatus

// Individual status for an app.
message ApplicationStatus {
  // The package name for the app.
  string package_name = 1;

  // The install status for the app. Only includes status for apps scheduled
  // to be auto-installed via the policy resource.
  AutoInstallStatus install_status = 2;
}

AutoInstallStatus

// Auto-install status for an app.
message AutoInstallStatus {
  // The error causing the install to fail if state is INSTALL_ERROR.
  EnterpriseAutoInstallError error = 1;

  // The current install state of the app.
  EnterpriseAutoInstallState state = 2;
}

PolicyVersion

// The version of the policy which these install states apply to.
message PolicyVersion {
  // A policy id which may be optionally set by the EMM.
  string policy_id = 1;
}

EnterpriseAutoInstallError

// Install errors resulting in failure to install an app.
enum EnterpriseAutoInstallError {
  // Catch-all for unrecognized enum values.
  ENTERPRISE_AUTO_INSTALL_ERROR_UNKNOWN = 0;

  // The app could not be found.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_FOUND = 1;

  // The app is not available in the user's country.
  ENTERPRISE_AUTO_INSTALL_ERROR_UNAVAILABLE_COUNTRY = 2;

  // The app is not compatible with the device hardware.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE = 3;

  // No license remained to grant ownership of the app, and the user did not
  // already own the app.
  ENTERPRISE_AUTO_INSTALL_ERROR_NO_LICENSES_REMAINING = 4;

  // Required permissions for the app have not been accepted.
  ENTERPRISE_AUTO_INSTALL_ERROR_MISSING_PERMISSION = 5;

  // The app is not available based on the enterprise availability policy.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_APPROVED_OR_UNAVAILABLE = 6;

  // The app is not available to the user or device.
  ENTERPRISE_AUTO_INSTALL_ERROR_APP_UNAVAILABLE = 7;

  // Failed to grant license because the user already has ownership.
  ENTERPRISE_AUTO_INSTALL_ERROR_INCOMPATIBLE_OWNERSHIP = 8;

  // The admin has not accepted the terms of service.
  ENTERPRISE_AUTO_INSTALL_ERROR_TOS_NOT_ACCEPTED = 9;

  // The device does not have enough RAM.
  ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_RAM = 10;

  // The app is incompatible with the device carrier.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_CARRIER = 11;

  // The app is incompatible with the country or carrier.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_COUNTRY_OR_CARRIER = 12;

  // The app is incompatible with the safe search level.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_SAFE_SEARCH_LEVEL = 13;

  // The app could not be installed due to an installer error.
  ENTERPRISE_AUTO_INSTALL_ERROR_INSTALL_FAILED = 14;

  // The app could not be installed due to network errors.
  ENTERPRISE_AUTO_INSTALL_ERROR_NETWORK_FAILED = 15;

  // The device does not have enough storage.
  ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_STORAGE = 16;
}

EnterpriseAutoInstallState

// The current install state for an app.
enum EnterpriseAutoInstallState {
  // Catch-all for unrecognized enum values.
  INSTALL_STATE_UNKNOWN = 0;

  // The app has been received by Play but an install attempt has not completed
  // yet.
  INSTALL_STATE_PENDING = 1;

  // The latest install attempt failed and will be retried automatically.
  INSTALL_STATE_ERROR = 2;

  // The app has been installed.
  INSTALL_STATE_INSTALLED = 3;
}

Phân phối ứng dụng để thử nghiệm khép kín

Tính năng thử nghiệm khép kín cho phép nhà phát triển ứng dụng nhận ý kiến phản hồi của người dùng đáng tin cậy về các phiên bản ban đầu của ứng dụng. Nhà phát triển có thể thiết lập các thử nghiệm khép kín trong Google Play Console. Bạn sử dụng API Play EMM để cho phép quản trị viên CNTT phân phối các phiên bản kín (còn gọi là kênh) của ứng dụng cho một số người dùng cụ thể. Khách hàng doanh nghiệp của bạn có thể sử dụng tính năng này không chỉ để kiểm thử ứng dụng của bên thứ ba mà còn để kiểm thử ứng dụng riêng do họ tự phát triển.

Ứng dụng đủ điều kiện

Trước khi nhà phát triển thêm một doanh nghiệp vào danh sách người thử nghiệm khép kín của ứng dụng, ứng dụng đó phải đáp ứng các tiêu chí sau:

  • Phiên bản chính thức của ứng dụng được phát hành trên Google Play.
  • Trong Google Play Console, chế độ Google Play được quản lý được bật trong trang Cài đặt nâng cao của ứng dụng.
  • Mọi phiên bản đóng của ứng dụng đều đáp ứng các yêu cầu về mã phiên bản.

Thêm một doanh nghiệp vào thử nghiệm khép kín

Nhà phát triển ứng dụng có thể thêm các doanh nghiệp vào các thử nghiệm sử dụng phương thức Thử nghiệm alpha kín hoặc Thử nghiệm alpha bằng Google Groups. Để biết hướng dẫn, hãy xem hướng dẫn về cách thiết lập thử nghiệm công khai, khép kín hoặc nội bộ. Nhà phát triển cần nhập mã tổ chức (còn gọi là mã doanh nghiệp) của từng doanh nghiệp tham gia. Quản trị viên CNTT có thể cung cấp mã nhận dạng của tổ chức cho nhà phát triển ứng dụng bên thứ ba bằng cách làm theo các bước sau:

  1. Đăng nhập vào cửa hàng Managed Google Play.
  2. Nhấp vào Cài đặt quản trị.
  3. Sao chép chuỗi mã tổ chức trong hộp Thông tin về tổ chức rồi gửi mã đó cho nhà phát triển.

Yêu cầu bổ sung đối với ứng dụng riêng tư

Đối với ứng dụng riêng tư, nhà phát triển cũng cần thêm mã nhận dạng tổ chức của từng doanh nghiệp tham gia vào thẻ Managed Google Play của trang Cài đặt nâng cao của ứng dụng. Để biết hướng dẫn, hãy xem phần Xuất bản ứng dụng riêng tư.

Phân phối bản nhạc riêng tư cho người dùng

Để truy xuất danh sách các bản nhạc mà một doanh nghiệp có thể sử dụng cho một ứng dụng cụ thể, hãy gọi Products.get. Danh sách appTracks[] có trong phản hồi bao gồm các kênh có sẵn cho từng ứng dụng. appTracks[].trackAlias là tên mà người dùng có thể đọc được cho kênh mà bạn có thể hiển thị trong bảng điều khiển EMM và appTracks[].trackId là mã nhận dạng mà máy có thể đọc được cho kênh.

Để cấp cho người dùng quyền xem kênh kín của ứng dụng, hãy đặt policy.productPolicy[].trackIds[] trong policy của Device. Nếu một thiết bị có nhiều kênh, thì phiên bản có sẵn có mã phiên bản cao nhất sẽ được cài đặt.

trackIds sẽ tự động bị xoá khỏi lệnh gọi Products.get trong một số trường hợp như sau:

  • Phiên bản ứng dụng của kênh được chuyển lên một kênh khác hoặc lên kênh phát hành công khai.
  • Phiên bản phát hành công khai được cập nhật bằng phiên bản cao hơn kênh.
  • Nhà phát triển dừng kênh.

Theo dõi giấy phép ứng dụng có tính phí

Đối với ứng dụng có tính phí, đối tượng Grouplicenses theo dõi số lượng giấy phép mà một tổ chức sở hữu và số lượng giấy phép đang được sử dụng. Bạn có thể gọi Grouplicenses.get để lấy thông tin chi tiết về giấy phép của một ứng dụng.

Trước khi có thể cài đặt ứng dụng có tính phí trên một thiết bị, doanh nghiệp cần có giấy phép cho ứng dụng đó. Nếu có giấy phép, ứng dụng sẽ được cài đặt trên thiết bị và đối tượng Entitlements sẽ được tạo. Đối tượng Entitlements liên kết giấy phép với người dùng và giảm số lượng giấy phép có sẵn cho ứng dụng. Nếu không có giấy phép nào, thì quá trình cài đặt ứng dụng sẽ không thành công và không có đối tượng Entitlements nào được tạo.

Các đối tượng GrouplicensesEntitlements không được các ứng dụng miễn phí sử dụng.