คู่มือนี้จะช่วยให้ผู้ให้บริการ Enterprise Mobility Management (EMM) ผสานรวมการลงทะเบียนแบบไม่ต้องสัมผัสเข้ากับคอนโซลของตน อ่านต่อเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการลงทะเบียนและดูคำแนะนำเกี่ยวกับแนวทางปฏิบัติแนะนำเพื่อ ช่วยให้ DPC (ตัวควบคุมนโยบายอุปกรณ์) จัดสรรอุปกรณ์ หากคุณมี DPC คุณจะได้เรียนรู้แนวทางปฏิบัติแนะนำเมื่อจัดสรรอุปกรณ์และรับคำแนะนำที่จะช่วย ในการพัฒนาและการทดสอบ
ฟีเจอร์สำหรับผู้ดูแลระบบไอที
ใช้ API ของลูกค้าเพื่อช่วยผู้ดูแลระบบไอทีในการตั้งค่าการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มโดยตรงจาก คอนโซล ต่อไปนี้คืองานบางอย่างที่ผู้ดูแลระบบไอทีอาจดำเนินการในคอนโซล
- สร้าง แก้ไข และลบการกำหนดค่าการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มตาม นโยบายอุปกรณ์เคลื่อนที่
- ตั้งค่าเริ่มต้นเพื่อให้ DPC จัดสรรอุปกรณ์ในอนาคตที่องค์กรซื้อ
- ใช้การกำหนดค่าแต่ละรายการกับอุปกรณ์หรือนำอุปกรณ์ออกจากการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม โปรดอ่านภาพรวม
ข้อกำหนดเบื้องต้น
ก่อนที่จะเพิ่มการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มลงในคอนโซล EMM โปรดตรวจสอบว่าโซลูชันของคุณรองรับสิ่งต่อไปนี้
- โซลูชัน EMM ของคุณต้องจัดสรรอุปกรณ์ Android 8.0 ขึ้นไป (Pixel 7.1 ขึ้นไป) ของบริษัทในโหมดที่มีการจัดการครบวงจร อุปกรณ์ Android 10 ขึ้นไปของบริษัทสามารถจัดสรรเป็นอุปกรณ์ที่มีการจัดการครบวงจรหรือมีโปรไฟล์งานได้
- เนื่องจากการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะดาวน์โหลดและติดตั้ง DPC โดยอัตโนมัติ DPC ของคุณจึงต้องพร้อมให้บริการจาก Google Play เรามีรายชื่อ DPC ที่เข้ากันได้ ซึ่งผู้ดูแลระบบไอทีสามารถกำหนดค่าได้โดยใช้ API ของลูกค้าหรือพอร์ทัล ส่ง คำขอแก้ไขผลิตภัณฑ์ผ่านชุมชนผู้ให้บริการ EMM เพื่อเพิ่ม DPC ของคุณลงในรายการ
- ลูกค้าต้องมีบัญชีการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มเพื่อเรียกใช้ Customer API ตัวแทนจำหน่ายพาร์ทเนอร์จะตั้งค่าบัญชีให้องค์กรของผู้ดูแลระบบไอทีเมื่อ องค์กรซื้ออุปกรณ์
- อุปกรณ์ต้องรองรับการใช้บริการของ Google Mobile (GMS) และต้องมีการเปิดใช้บริการ Google Play ไว้ตลอดเวลาเพื่อให้การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม ทำงานได้อย่างถูกต้อง
เรียก API
ผู้ใช้คอนโซล (ใช้บัญชี Google) จะให้สิทธิ์คำขอ API ของคุณไปยัง API ของลูกค้า ขั้นตอนการทำงานนี้แตกต่างจากการให้สิทธิ์ที่คุณดำเนินการสำหรับ API ของ EMM อื่นๆ อ่านการให้สิทธิ์เพื่อดูวิธีดำเนินการนี้ในแอป
ข้อกำหนดในการให้บริการของแฮนเดิล
ผู้ใช้ของคุณต้องยอมรับข้อกำหนดในการให้บริการ (ToS) ล่าสุดก่อน
เรียกใช้ API หากการเรียก API แสดงรหัสสถานะ HTTP 403 Forbidden และเนื้อความของการตอบกลับมี TosError ให้แจ้งให้ผู้ใช้ยอมรับ
ข้อกำหนดในการให้บริการโดยลงชื่อเข้าใช้พอร์ทัลการลงทะเบียนแบบไม่มีการโต้ตอบ ตัวอย่างด้านล่าง
แสดงวิธีหนึ่งที่คุณทำได้
Java
// Authorize this method call as a user that hasn't yet accepted the ToS. final String googleApiFormatHttpHeader = "X-GOOG-API-FORMAT-VERSION"; final String googleApiFormatVersion = "2"; final String tosErrorType = "type.googleapis.com/google.android.device.provisioning.v1.TosError"; try { // Send an API request to list all the DPCs available including the HTTP header // X-GOOG-API-FORMAT-VERSION with the value 2. Import the exception: // from googleapiclient.errors import HttpError AndroidProvisioningPartner.Customers.Dpcs.List request = service.customers().dpcs().list(customerAccount); request.getRequestHeaders().put(googleApiFormatHttpHeader, googleApiFormatVersion); CustomerListDpcsResponse response = request.execute(); return response.getDpcs(); } catch (GoogleJsonResponseException e) { // Get the error details. In your app, check details exists first. ArrayList<Map> details = (ArrayList<Map>) e.getDetails().get("details"); for (Map detail : details) { if (detail.get("@type").equals(tosErrorType) && (boolean) detail.get("latestTosAccepted") != true) { // Ask the user to accept the ToS. If they agree, open the portal in a browser. // ... } } return null; }
.NET
// Authorize this method call as a user that hasn't yet accepted the ToS. try { var request = service.Customers.Dpcs.List(customerAccount); CustomerListDpcsResponse response = request.Execute(); return response.Dpcs; } catch (GoogleApiException e) { foreach (SingleError error in e.Error?.Errors) { if (error.Message.StartsWith("The user must agree the terms of service")) { // Ask the user to accept the ToS. If they agree, open the portal in a browser. // ... } } }
Python
# Authorize this method call as a user that hasn't yet accepted the ToS. tos_error_type = ('type.googleapis.com/' 'google.android.device.provisioning.v1.TosError') portal_url = 'https://enterprise.google.com/android/zero-touch/customers' # Send an API request to list all the DPCs available including the HTTP # header X-GOOG-API-FORMAT-VERSION with the value 2. Import the exception: # from googleapiclient.errors import HttpError try: request = service.customers().dpcs().list(parent=customer_account) request.headers['X-GOOG-API-FORMAT-VERSION'] = '2' response = request.execute() return response['dpcs'] except HttpError as err: # Parse the JSON content of the error. In your app, check ToS exists first. error = json.loads(err.content) tos_error = error['error']['details'][0] # Ask the user to accept the ToS (not shown here). If they agree, then open # the portal in a browser. if (tos_error['@type'] == tos_error_type and tos_error['latestTosAccepted'] is not True): if raw_input('Accept the ToS in the zero-touch portal? y|n ') == 'y': webbrowser.open(portal_url)
หากไคลเอ็นต์ Google API รองรับข้อผิดพลาดโดยละเอียด (Java, Python หรือคำขอ HTTP) ให้ใส่ส่วนหัว HTTP X-GOOG-API-FORMAT-VERSION ที่มีค่า
2 ในคำขอ หากไคลเอ็นต์ไม่รองรับข้อผิดพลาดแบบละเอียด (.NET และ
อื่นๆ) ให้จับคู่ข้อความแสดงข้อผิดพลาด
เมื่อเราอัปเดตข้อกำหนดในการให้บริการในอนาคต หากคุณใช้วิธีนี้ แอปของคุณจะนำผู้ใช้ไปยอมรับข้อกำหนดในการให้บริการใหม่ซ้ำอีกครั้ง
ลิงก์ไปยังพอร์ทัล
ผู้ดูแลระบบไอทีใช้พอร์ทัลการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มเพื่อจัดการผู้ใช้สำหรับองค์กรของตน โดยคุณไม่สามารถเสนอการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มผ่าน API ของลูกค้าได้ นอกจากนี้ ผู้ดูแลระบบไอทียัง จัดการอุปกรณ์และการกำหนดค่าโดยใช้พอร์ทัลได้ด้วย หากต้องการลิงก์ไปยัง พอร์ทัลจากคอนโซลหรือในเอกสารประกอบ ให้ใช้ URL นี้
https://enterprise.google.com/android/zero-touch/customers
คุณอาจต้องแจ้งให้ผู้ดูแลระบบไอทีทราบว่าระบบจะแจ้งให้ลงชื่อเข้าใช้ด้วยบัญชี Google
การลงทะเบียนอุปกรณ์
การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มเป็นกลไกในการลงทะเบียนอุปกรณ์และคล้ายกับการลงทะเบียน NFC หรือการลงทะเบียนคิวอาร์โค้ด คอนโซลต้องรองรับอุปกรณ์ที่มีการจัดการ และ DPC ต้องเรียกใช้ในโหมดอุปกรณ์ที่มีการจัดการครบวงจรได้
การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มพร้อมใช้งานในอุปกรณ์ที่รองรับซึ่งใช้ Android 8.0 ขึ้นไป ผู้ดูแลระบบไอทีต้องซื้ออุปกรณ์ที่รองรับจากพาร์ทเนอร์
ตัวแทนจำหน่าย คอนโซลสามารถติดตาม
อุปกรณ์ของผู้ดูแลระบบไอทีที่พร้อมสำหรับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มได้โดย
เรียกใช้ customers.devices.list
ต่อไปนี้เป็นโครงร่างของวิธีการลงทะเบียน
- อุปกรณ์จะเช็คอินกับเซิร์ฟเวอร์ของ Google เมื่อเริ่มต้นระบบเป็นครั้งแรก (หรือหลังจากรีเซ็ตเป็นค่าเริ่มต้น) เพื่อทำการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม
- หากผู้ดูแลระบบไอทีได้ใช้การกำหนดค่ากับอุปกรณ์ การลงทะเบียนแบบไม่ต้องสัมผัส จะเรียกใช้ตัวช่วยการตั้งค่า Android สำหรับอุปกรณ์ที่มีการจัดการครบวงจรและปรับแต่ง หน้าจอด้วยข้อมูลเมตาจากการกำหนดค่า
- การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะดาวน์โหลดและติดตั้ง DPC จาก Google Play
- DPC จะได้รับ Intent
ACTION_PROVISION_MANAGED_DEVICEและ จัดสรรอุปกรณ์
หากไม่มีการเชื่อมต่ออินเทอร์เน็ต ระบบจะตรวจสอบเมื่อมีการเชื่อมต่อ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดสรรอุปกรณ์ด้วยการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มได้ที่การจัดสรรด้านล่าง
การกำหนดค่าเริ่มต้น
การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะมีประโยชน์มากที่สุดเมื่อผู้ดูแลระบบไอทีตั้งการกำหนดค่าเริ่มต้น
ที่ใช้กับอุปกรณ์ใหม่ทั้งหมดที่องค์กรซื้อ แนะนำให้ตั้งค่าเริ่มต้นจากคอนโซลหากยังไม่ได้ตั้งค่า คุณสามารถตรวจสอบ
ค่าของ customers.configurations.isDefault เพื่อ
ดูว่าองค์กรได้ตั้งค่าเริ่มต้นไว้หรือไม่
ตัวอย่างด้านล่างแสดงวิธีที่คุณอาจใช้เพื่อกำหนดค่าที่มีอยู่ให้เป็นค่าเริ่มต้น
Java
// Send minimal data with the request. Just the 2 required fields. // targetConfiguration is an existing configuration that we want to make the default. Configuration configuration = new Configuration(); configuration.setIsDefault(true); configuration.setConfigurationId(targetConfiguration.getConfigurationId()); // Call the API, including the FieldMask to avoid setting other fields to null. AndroidProvisioningPartner.Customers.Configurations.Patch request = service .customers() .configurations() .patch(targetConfiguration.getName(), configuration); request.setUpdateMask("isDefault"); Configuration results = request.execute();
.NET
// Send minimal data with the request. Just the 2 required fields. // targetConfiguration is an existing configuration that we want to make the default. Configuration configuration = new Configuration { IsDefault = true, ConfigurationId = targetConfiguration.ConfigurationId, }; // Call the API, including the FieldMask to avoid setting other fields to null. var request = service.Customers.Configurations.Patch(configuration, targetConfiguration.Name); request.UpdateMask = "IsDefault"; Configuration results = request.Execute();
Python
# Send minimal data with the request. Just the 2 required fields. # target_configuration is an existing configuration we'll make the default. configuration = { 'isDefault': True, 'configurationId': target_configuration['configurationId']} # Call the API, including the FieldMask to avoid setting other fields to null. response = service.customers().configurations().patch( name=target_configuration['name'], body=configuration, updateMask='isDefault').execute()
การอ้างอิง DPC
เราขอแนะนำให้ใช้ชื่อทรัพยากร API customers.dpcs.name
เพื่อระบุ DPC และใช้ในการกำหนดค่า ชื่อทรัพยากรมีตัวระบุที่ไม่ซ้ำกันและไม่เปลี่ยนแปลงสำหรับ DPC โทร
customers.dpcs.list เพื่อดูรายการ DPC ทั้งหมดที่รองรับ
เนื่องจากชื่อทรัพยากรรวมถึงรหัสลูกค้าด้วย ให้กรองรายการ
โดยใช้คอมโพเนนต์เส้นทางสุดท้ายเพื่อค้นหาอินสแตนซ์ Dpc ที่ตรงกัน ตัวอย่างด้านล่างแสดงวิธีจับคู่ DPC และเก็บไว้เพื่อใช้ในการกำหนดค่าในภายหลัง
Java
// Return a customer Dpc instance for the specified DPC ID. String myDpcIdentifier = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...xMSWCiYiuHRWeBbu86Yjq"; final int dpcIdIndex = 3; final String dpcComponentSeparator = "/"; // ... for (Dpc dpcApp : dpcs) { // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the // fourth component matches the DPC ID. String dpcId = dpcApp.getName().split(dpcComponentSeparator)[dpcIdIndex]; if (dpcId.equals(myDpcIdentifier)) { System.out.format("My DPC is: %s\n", dpcApp.getDpcName()); return dpcApp; } } // Handle the case when the DPC isn't found...
.NET
// Return a customer Dpc instance for the specified DPC ID. var myDpcIdentifer = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...fE9WdHcxMSWCiYiuHRWeBbu86Yjq"; const int dpcIdIndex = 3; const String dpcComponentSeparator = "/"; // ... foreach (Dpc dpcApp in dpcs) { // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the // fourth component matches the DPC ID. String dpcId = dpcApp.Name.Split(dpcComponentSeparator)[dpcIdIndex]; if (dpcId.Equals(myDpcIdentifer)) { Console.WriteLine("Matched DPC is: {0}", dpcApp.DpcName); return dpcApp; } } // Handle the case when the DPC isn't found...
Python
# Return a customer Dpc instance for the specified DPC ID. my_dpc_id = 'AH6Gbe4aiS459wlz58L30cqb...fE9WdHcxMSWCiYiuHRWeBbu86Yjq' # ... for dpc_app in dpcs: # Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, # check the fourth component matches the DPC ID. dpc_id = dpc_app['name'].split('/')[3] if dpc_id == my_dpc_id: return dpc_app # Handle the case when the DPC isn't found...
หากต้องการแสดงชื่อ DPC ในอินเทอร์เฟซผู้ใช้ของคอนโซล ให้แสดงค่าที่ส่งคืนจาก customers.dpcs.dpcName
การจัดสรร
ใช้โอกาสนี้ในการมอบประสบการณ์การใช้งานที่ยอดเยี่ยมสำหรับการจัดสรรอุปกรณ์
คุณควรมีเพียงชื่อผู้ใช้และรหัสผ่านเพื่อจัดสรรอุปกรณ์
โปรดทราบว่าตัวแทนจำหน่ายอาจจัดส่งอุปกรณ์ให้ผู้ใช้ที่ทำงานจากระยะไกลโดยตรง รวมการตั้งค่าอื่นๆ ทั้งหมด เช่น เซิร์ฟเวอร์ EMM หรือหน่วยขององค์กร ไว้ใน
customers.configuration.dpcExtras
ข้อมูลโค้ด JSON ด้านล่างแสดงส่วนหนึ่งของการกำหนดค่าตัวอย่าง
{
"android.app.extra.PROVISIONING_LOCALE": "en_GB",
"android.app.extra.PROVISIONING_TIME_ZONE": "Europe/London",
"android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED": true,
"android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": {
"workflow_type": 3,
"default_password_quality": 327680,
"default_min_password_length": 6,
"company_name": "XYZ Corp",
"organizational_unit": "sales-uk",
"management_server": "emm.example.com",
"detail_tos_url": "https://www.example.com/policies/terms/",
"allowed_user_domains": "[\"example.com\", \"example.org\", \"example.net\"]"
}
}
การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะติดตั้งและเปิดใช้ DPC โดยใช้ Android Intent
ระบบจะส่งค่าในพร็อพเพอร์ตี้
android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE JSON ไปยัง DPC
เป็นส่วนเสริมใน Intent DPC สามารถอ่านการตั้งค่าการจัดสรรจาก
PersistableBundleโดยใช้คีย์เดียวกัน
แนะนำ - ใช้ส่วนเพิ่มเติมของ Intent ต่อไปนี้ เพื่อตั้งค่า DPC
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLEEXTRA_PROVISIONING_LOCALEEXTRA_PROVISIONING_TIME_ZONEEXTRA_PROVISIONING_LOCAL_TIMEEXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLEDEXTRA_PROVISIONING_MAIN_COLOREXTRA_PROVISIONING_DISCLAIMERS
ไม่แนะนำ - อย่ารวมข้อมูลต่อไปนี้ ซึ่งคุณอาจใช้ในวิธีการลงทะเบียนอื่นๆ
EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAMEEXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUMEXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADEREXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATIONEXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
หากต้องการดูวิธีแยกและใช้การตั้งค่าเหล่านี้ใน DPC โปรดอ่านจัดสรร อุปกรณ์ของลูกค้า
การพัฒนาและการทดสอบ
หากต้องการพัฒนาและทดสอบฟีเจอร์การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มของคอนโซล คุณจะต้องมีสิ่งต่อไปนี้
- อุปกรณ์ที่รองรับ
- บัญชีการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มของลูกค้า
พัฒนาและทดสอบด้วยอุปกรณ์ที่รองรับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม เช่น Google Pixel คุณไม่จำเป็นต้องซื้ออุปกรณ์สำหรับพัฒนาแอปจากพาร์ทเนอร์ตัวแทนจำหน่าย
ติดต่อเราเพื่อรับบัญชีลูกค้าทดสอบและสิทธิ์เข้าถึง พอร์ทัลการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม ส่งอีเมลถึงเราจากอีเมลบริษัทที่เชื่อมโยงกับบัญชี Google โปรดแจ้งผู้ผลิตและหมายเลข IMEI ของอุปกรณ์ 1 หรือ 2 เครื่อง แล้วเราจะเพิ่มอุปกรณ์เหล่านั้นลงในบัญชี นักพัฒนาแอปของคุณ
โปรดทราบว่าการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะดาวน์โหลดและติดตั้ง DPC โดยอัตโนมัติ ดังนั้น DPC ของคุณต้องพร้อมใช้งานจาก Google Play ก่อนจึงจะทดสอบการจัดสรรได้ คุณไม่สามารถทดสอบด้วย DPC เวอร์ชันพัฒนาได้
การสนับสนุนสำหรับผู้ดูแลระบบไอที
หากต้องการช่วยเหลือผู้ดูแลระบบไอทีในอินเทอร์เฟซของคอนโซลหรือเอกสารประกอบ โปรดดูคำแนะนำในการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มสำหรับผู้ดูแลระบบไอที คุณ ยังแนะนำให้ผู้ใช้คอนโซลไปที่บทความในศูนย์ช่วยเหลือนั้นได้ด้วย
อ่านเพิ่มเติม
โปรดอ่านเอกสารต่อไปนี้เพื่อช่วยคุณผสานรวมการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มในคอนโซล
- การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มสำหรับผู้ดูแลระบบไอทีในความช่วยเหลือของ Android Enterprise
- จัดสรรอุปกรณ์ของลูกค้าจากเว็บไซต์ Android EMM สำหรับนักพัฒนาแอป