เผยแพร่แอป

Google Play EMM API รองรับวิธีการเผยแพร่ต่อไปนี้สําหรับแอปสาธารณะและแอปส่วนตัว

ติดตั้งแอปด้วยตนเองจาก Google Play Store ที่มีการจัดการ

คุณสามารถกำหนดแอปที่ผู้ใช้จะติดตั้งได้ใน policy ของ Device และตั้งค่าโดยเรียกใช้ Devices.update เมื่อจัดสรรอุปกรณ์ใหม่ คุณควรตั้งค่านโยบายก่อนเพิ่มบัญชี Google Play ที่มีการจัดการลงในอุปกรณ์ ไม่เช่นนั้นนโยบายจะไม่มีผลบังคับใช้เป็นเวลาสั้นๆ หลังจากเพิ่มบัญชีลงในอุปกรณ์

ลักษณะการทำงานของ Managed Play Store จะกำหนดโดยค่าของ policy.productAvailabilityPolicy ดังนี้

  • all: แอปสาธารณะทั้งหมดจาก Play Store พร้อมให้ใช้งาน
  • whitelist: มีเฉพาะแอปที่แสดงใน policy.productPolicy เท่านั้น

ไม่ว่าในกรณีใด ระบบจะเพิ่มแอปทั้งหมดใน policy.productPolicy ลงในเลย์เอาต์ Store ขององค์กรโดยค่าเริ่มต้น เลย์เอาต์ Store ขององค์กรคือหน้าแรกของ Managed Play Store เมื่อเลือก whitelist และเข้าถึงได้ในแท็บ "แอปสำหรับการทำงาน" เมื่อเลือก all คุณสามารถอนุญาตให้ลูกค้าปรับแต่งเลย์เอาต์ร้านค้าขององค์กรได้โดยฝัง iframe ของ Managed Google Play (ดูจัดระเบียบแอปด้วย iframe ของ Managed Google Play)

ติดตั้งแอปในอุปกรณ์ของผู้ใช้จากระยะไกล

หากต้องการติดตั้งแอปในอุปกรณ์ของผู้ใช้จากระยะไกล (หรือที่เรียกว่าการติดตั้งแบบ Push) ให้ตั้งค่า policy.productPolicy.autoInstallPolicy ใน policy ของ Device เมื่อจัดสรรอุปกรณ์ใหม่ คุณควรตั้งค่านโยบายก่อนเพิ่มบัญชี Google Play ที่มีการจัดการลงในอุปกรณ์ ไม่เช่นนั้นนโยบายจะไม่มีผลบังคับใช้ในช่วงระยะเวลาสั้นๆ หลังจากเพิ่มบัญชีลงในอุปกรณ์

คุณสามารถตั้งค่า autoInstallMode เป็นค่าต่อไปนี้

  • doNotAutoInstall: ระบบจะไม่ติดตั้งแอปโดยอัตโนมัติ
  • autoInstallOnce: ระบบจะติดตั้งแอปโดยอัตโนมัติ 1 ครั้ง หากผู้ใช้ถอนการติดตั้งแอป ระบบจะไม่ติดตั้งแอปนั้นอีก
  • forceAutoInstall: ระบบจะติดตั้งแอปโดยอัตโนมัติ หากผู้ใช้ถอนการติดตั้งแอป ระบบจะติดตั้งแอปอีกครั้ง ในอุปกรณ์ที่มีการจัดการ DPC ควรบล็อกการถอนการติดตั้งโดยใช้ DevicePolicyManager.setUninstallBlocked

ในกรณีที่ติดตั้งไม่สำเร็จ (การเชื่อมต่อขาดหายไป ไม่มีพื้นที่เก็บข้อมูล ฯลฯ) ระบบจะพยายามติดตั้งอีกครั้งโดยอัตโนมัติจนกว่าจะสำเร็จ ระบบจะใช้กลยุทธ์การลองอีกครั้งแบบ Exponential Backoff เพื่อหลีกเลี่ยงการสิ้นเปลืองแบตเตอรี่และข้อมูลในกรณีที่เกิดความล้มเหลวที่กู้คืนไม่ได้

ลำดับความสำคัญของการติดตั้ง

คุณเลือกลําดับการติดตั้งได้โดยการตั้งค่า autoInstallPriority ลำดับความสำคัญต้องเป็นจำนวนเต็มแบบไม่ลงนามและค่าเริ่มต้นคือ 0 ระบบจะติดตั้งแอปตามลําดับหรือลําดับความสําคัญที่เพิ่มขึ้น ซึ่งหมายความว่าแอปที่มีค่าลําดับความสําคัญต่ำกว่าจะได้รับการติดตั้งก่อน

ติดตั้งข้อจำกัด

คุณตั้งข้อจำกัดการติดตั้งสำหรับแต่ละแอปได้โดยการตั้งค่า autoInstallConstraint ซึ่งจะช่วยให้คุณควบคุมสถานะที่จำเป็นของอุปกรณ์ในระหว่างการติดตั้งได้

  • อุปกรณ์ควรเชื่อมต่อกับเครือข่าย Wi-Fi หรือไม่
  • อุปกรณ์ควรชาร์จหรือไม่
  • และอุปกรณ์ควรไม่มีการใช้งาน (ผู้ใช้ไม่ได้ใช้งาน) หรือไม่

หากไม่เป็นไปตามข้อจำกัดในทันที ระบบจะจัดคิวการติดตั้งที่ได้รับผลกระทบไว้จนกว่าจะเป็นไปตามข้อจำกัด

ใน autoInstallConstraint ระบบจะใช้กฎ AND ระหว่างช่อง ตัวอย่างเช่น เมื่อใช้ autoInstallConstraint ต่อไปนี้ อุปกรณ์จะต้องทั้งชาร์จอยู่และเชื่อมต่อกับเครือข่ายที่ไม่มีบริการวัดปริมาณการใช้งาน (เช่น Wi-Fi) จึงจะติดตั้งแอปได้

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

ติดตั้งแอปในอุปกรณ์ที่จัดสรรใหม่โดยอัตโนมัติ

Google Play EMM API จะส่งNewDeviceEventการแจ้งเตือนเมื่อมีการมอบหมายอุปกรณ์เป็นครั้งแรก หากต้องการพุชติดตั้งแอปลงในอุปกรณ์ที่จัดสรรใหม่โดยอัตโนมัติ ให้รอการแจ้งเตือน NewDeviceEvent จาก NewDeviceEvent แต่ละรายการ ให้ดึงข้อมูล userId และ deviceId แล้วเรียกใช้ Devices.update เพื่อกำหนดนโยบายสำหรับอุปกรณ์นั้น

ดูวิธีสมัครรับการแจ้งเตือน EMM ได้ที่หัวข้อตั้งค่าการแจ้งเตือน EMM

ความคิดเห็นเกี่ยวกับข้อผิดพลาดในการติดตั้งแอปโดยอัตโนมัติ

ระบบจะรายงานข้อผิดพลาดที่เกี่ยวข้องกับการติดตั้งแอปผ่านความคิดเห็นเกี่ยวกับแอป และ DPC จะตรวจสอบข้อความ EnterprisePolicyStatus ที่ส่งผ่าน KeyedAppStatesService ได้

หากต้องการถอดรหัสข้อมูลที่เข้ารหัส Base64 DPC จะต้องสร้างคลาสตามคำจำกัดความ proto ของ EnterprisePolicyStatus โปรดดูวิธีการสร้างคลาสโปรโตในเอกสารประกอบของ Protocol Buffers

เมื่อใช้คลาสที่สร้างขึ้น DPC จะถอดรหัสEnterprisePolicyStatus ออบเจ็กต์ได้ดังนี้

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

ตอนนี้นโยบายอุปกรณ์มีช่องใหม่ที่ไม่บังคับ PolicyId แล้ว เมื่อสร้างหรืออัปเดตนโยบาย EMM สามารถตั้งค่า PolicyId เป็นสตริงค่าใดก็ได้เพื่อระบุเวอร์ชันนโยบายอุปกรณ์ที่เฉพาะเจาะจง

ความคิดเห็นเกี่ยวกับการติดตั้งแอปจะรายงาน PolicyId (หากมี) เพื่อให้ DPC จับคู่ข้อผิดพลาดที่ได้รับกับนโยบายที่เฉพาะเจาะจงได้

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;
}

เผยแพร่แอปสำหรับการทดสอบแบบปิด

การทดสอบแบบปิดช่วยให้นักพัฒนาแอปได้รับความคิดเห็นเกี่ยวกับแอปเวอร์ชันแรกๆ จากผู้ใช้ที่เชื่อถือได้ นักพัฒนาแอปสามารถตั้งค่าการทดสอบแบบปิดใน Google Play Console คุณใช้ Play EMM API เพื่อให้ผู้ดูแลระบบไอทีสามารถเผยแพร่แอปเวอร์ชันที่ปิด (หรือที่เรียกว่าแทร็ก) ไปยังผู้ใช้บางราย ลูกค้าองค์กรสามารถใช้ฟีเจอร์นี้ไม่เพียงเพื่อทดสอบแอปของบุคคลที่สามเท่านั้น แต่ยังทดสอบแอปส่วนตัวที่พัฒนาขึ้นภายในองค์กรได้ด้วย

แอปที่มีสิทธิ์

ก่อนที่นักพัฒนาแอปจะเพิ่มองค์กรลงในรายชื่อผู้ทดสอบแบบปิดของแอป แอปควรมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้

  • เผยแพร่แอปเวอร์ชันที่ใช้งานจริงใน Google Play แล้ว
  • ใน Google Play Console ให้เปิดใช้ Managed Google Play ในหน้าการตั้งค่าขั้นสูงของแอป
  • แอปเวอร์ชันที่ปิดอยู่ต้องเป็นไปตามข้อกำหนดเกี่ยวกับรหัสเวอร์ชัน

เพิ่มองค์กรในการทดสอบแบบปิด

นักพัฒนาแอปสามารถเพิ่มองค์กรในการทดสอบที่ใช้วิธีการการทดสอบอัลฟาแบบปิดหรือการทดสอบอัลฟาโดยใช้ Google Groups ดูวิธีการได้ที่คำแนะนำเกี่ยวกับวิธีตั้งค่าการทดสอบแบบเปิด แบบปิด หรือแบบภายใน นักพัฒนาแอปต้องป้อนรหัสองค์กร (หรือที่เรียกว่ารหัสองค์กร) ขององค์กรที่เข้าร่วมแต่ละแห่ง ผู้ดูแลระบบไอทีสามารถระบุรหัสขององค์กรให้แก่นักพัฒนาแอปบุคคลที่สามได้โดยทำตามขั้นตอนต่อไปนี้

  1. ลงชื่อเข้าใช้ Managed Google Play Store
  2. คลิกที่การตั้งค่าสำหรับผู้ดูแลระบบ
  3. คัดลอกสตริงรหัสองค์กรจากช่องข้อมูลองค์กร แล้วส่งไปให้นักพัฒนาแอป

ข้อกำหนดเพิ่มเติมสำหรับแอปส่วนตัว

สำหรับแอปส่วนตัว นักพัฒนาแอปจะต้องเพิ่มรหัสองค์กรขององค์กรที่เข้าร่วมแต่ละแห่งในแท็บ Managed Google Play ของหน้าการตั้งค่าขั้นสูงของแอปด้วย โปรดดูวิธีการที่หัวข้อเผยแพร่แอปส่วนตัว

เผยแพร่แทร็กแบบปิดให้กับผู้ใช้

หากต้องการเรียกข้อมูลรายการแทร็กที่พร้อมใช้งานสำหรับองค์กรสำหรับแอปที่ระบุ ให้เรียกใช้ Products.get รายการ appTracks[] ที่มีในการตอบกลับจะประกอบด้วยแทร็กที่ใช้ได้สำหรับแต่ละแอป โดย appTracks[].trackAlias คือชื่อที่แทร็กแสดงได้ซึ่งผู้ใช้อ่านได้ และ appTracks[].trackId คือรหัสที่เครื่องอ่านได้สำหรับแทร็ก

หากต้องการให้ผู้ใช้มองเห็นแทร็กแบบปิดของแอป ให้ตั้งค่า policy.productPolicy[].trackIds[] ใน policy ของ Device หากอุปกรณ์มีแทร็กหลายรายการ ระบบจะติดตั้งเวอร์ชันที่มีรหัสเวอร์ชันสูงสุดที่พร้อมใช้งาน

ระบบจะนำรหัสแทร็กออกจากการเรียก Products.get โดยอัตโนมัติในบางสถานการณ์ เช่น ต่อไปนี้

  • โปรโมตเวอร์ชันแอปของแทร็กไปยังแทร็กอื่นหรือเวอร์ชันที่ใช้งานจริง
  • เวอร์ชันที่ใช้งานจริงได้รับการอัปเดตเป็นเวอร์ชันที่สูงกว่าแทร็ก
  • นักพัฒนาแอปหยุดแทร็ก

ติดตามใบอนุญาตแอปแบบชำระเงิน

สําหรับแอปที่ต้องซื้อ ออบเจ็กต์ Grouplicenses จะติดตามจํานวนใบอนุญาตที่องค์กรเป็นเจ้าของและจํานวนใบอนุญาตที่ใช้อยู่ คุณสามารถโทรไปที่ Grouplicenses.get เพื่อขอรายละเอียดใบอนุญาตสำหรับแอป

ก่อนที่อุปกรณ์จะติดตั้งแอปที่ต้องซื้อได้ องค์กรต้องมีใบอนุญาตสำหรับแอปนั้น หากมีใบอนุญาต ระบบจะติดตั้งแอปในอุปกรณ์และสร้างออบเจ็กต์ Entitlements ออบเจ็กต์ Entitlements จะลิงก์ใบอนุญาตกับผู้ใช้และลดจำนวนใบอนุญาตที่ใช้ได้สำหรับแอป หากไม่มีใบอนุญาต การติดตั้งแอปจะล้มเหลวและระบบจะไม่สร้างออบเจ็กต์ Entitlements

แอปพลิเคชันที่เผยแพร่โดยไม่มีค่าใช้จ่ายจะไม่ใช้ออบเจ็กต์ Grouplicenses และ Entitlements