คู่มือการผสานรวม EMM

คู่มือนี้ช่วยผู้ให้บริการ Enterprise Mobility Management (EMM) ผสานรวม การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มในคอนโซล อ่านต่อเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการลงทะเบียนและดูคำแนะนำแนวทางปฏิบัติแนะนำเพื่อ ช่วยจัดสรรอุปกรณ์ DPC (เครื่องมือควบคุมนโยบายด้านอุปกรณ์) ของคุณ หากมี DPC คุณจะเห็นแนวทางปฏิบัติแนะนำเมื่อจัดสรรอุปกรณ์ และได้รับคำแนะนำ กับการพัฒนาและการทดสอบ

ฟีเจอร์สำหรับผู้ดูแลระบบไอที

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

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

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม โปรดอ่านภาพรวม

ข้อกำหนดเบื้องต้น

ก่อนเพิ่มการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มลงในคอนโซล EMM ให้ตรวจสอบว่าโซลูชันของคุณรองรับสิ่งต่อไปนี้

  • โซลูชัน EMM ของคุณต้องจัดสรรอุปกรณ์ Android 8.0 ขึ้นไป (Pixel 7.1 ขึ้นไป) ของบริษัทในโหมดที่มีการจัดการครบวงจร สามารถใช้อุปกรณ์ Android 10 ขึ้นไปที่เป็นของบริษัทได้ จัดสรรเป็นจัดการครบวงจรหรือด้วยโปรไฟล์งาน
  • เนื่องจากการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะดาวน์โหลดและติดตั้ง DPC โดยอัตโนมัติ DPC จึงต้องพร้อมให้บริการจาก Google Play เราดูแลรักษารายการ DPC ที่เข้ากันได้ซึ่งผู้ดูแลระบบไอทีสามารถกําหนดค่าได้โดยใช้ API ของลูกค้าหรือพอร์ทัล ส่ง คำขอแก้ไขผลิตภัณฑ์ผ่านชุมชนผู้ให้บริการ EMM เพื่อเพิ่ม DPC ลงในรายการ
  • ลูกค้าต้องมีบัญชีการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มเพื่อเรียกใช้ API ของลูกค้า ตัวแทนจำหน่ายที่เป็นพาร์ทเนอร์จะตั้งค่าบัญชีสำหรับองค์กรของผู้ดูแลระบบไอทีเมื่อ ซื้ออุปกรณ์ของตัวเอง
  • อุปกรณ์ต้องรองรับการใช้บริการของ Google Mobile (GMS) และต้องมีการเปิดใช้บริการ Google Play ไว้ตลอดเวลาเพื่อให้การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มทำงานได้อย่างถูกต้อง

เรียก API

ผู้ใช้คอนโซลของคุณ (โดยใช้บัญชี Google ของตนเอง) ให้สิทธิ์คำขอ API ของคุณเพื่อ API ของลูกค้า ขั้นตอนนี้แตกต่างจากการให้สิทธิ์ที่คุณดําเนินการ EMM API อื่นๆ อ่านการให้สิทธิ์เพื่อดูวิธีดำเนินการในแอป

จัดการข้อกำหนดในการให้บริการ

ผู้ใช้ต้องยอมรับข้อกำหนดในการให้บริการ (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://partner.android.com/zerotouch'

# 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://partner.android.com/zerotouch

คุณอาจต้องแจ้งให้ผู้ดูแลระบบไอทีทราบว่าระบบได้แจ้งให้ลงชื่อเข้าใช้ด้วย บัญชี Google

การลงทะเบียนอุปกรณ์

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

การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มพร้อมให้ใช้งานในอุปกรณ์ที่รองรับซึ่งใช้ Android 8.0 หรือ ในภายหลัง ผู้ดูแลระบบไอทีต้องซื้ออุปกรณ์ที่รองรับจากพาร์ทเนอร์ ตัวแทนจำหน่ายรายย่อย คอนโซลของคุณสามารถติดตาม อุปกรณ์ของผู้ดูแลระบบไอทีที่พร้อมสำหรับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม กำลังโทรหา customers.devices.list

ขั้นตอนการลงทะเบียนมีดังนี้

  1. อุปกรณ์จะตรวจสอบกับเซิร์ฟเวอร์ของ Google เมื่อเริ่มต้นทำงานครั้งแรก (หรือหลังจากโรงงานจากโรงงาน) รีเซ็ต) สำหรับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม
  2. หากผู้ดูแลระบบไอทีใช้การกำหนดค่ากับอุปกรณ์แล้ว การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม การลงทะเบียนจะเรียกใช้วิซาร์ดการตั้งค่า Android ของอุปกรณ์ที่มีการจัดการครบวงจรและปรับเปลี่ยน ที่มีข้อมูลเมตาจากการกำหนดค่า
  3. การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะดาวน์โหลดและติดตั้ง DPC ของคุณจาก Google Play
  4. DPC ของคุณจะได้รับ ACTION_PROVISION_MANAGED_DEVICE Intent และ จะจัดสรรอุปกรณ์

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

การกำหนดค่าเริ่มต้น

การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะมีประโยชน์มากที่สุดเมื่อผู้ดูแลระบบไอทีตั้งค่าเริ่มต้นที่ใช้กับอุปกรณ์ใหม่ทั้งหมดที่องค์กรซื้อ การตั้งค่าการโปรโมต การกำหนดค่าเริ่มต้นจากคอนโซลของคุณหากไม่ได้ตั้งค่าไว้ คุณสามารถตรวจสอบ ค่าของ 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

ไม่แนะนำ—อย่าใส่ข้อมูลต่อไปนี้ บริการเสริมที่คุณอาจใช้ในการลงทะเบียนอื่นๆ

หากต้องการดูวิธีดึงข้อมูลและใช้การตั้งค่าเหล่านี้ใน DPC โปรดอ่านการจัดสรร อุปกรณ์ของลูกค้า

การพัฒนาและการทดสอบ

หากต้องการพัฒนาและทดสอบฟีเจอร์การตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มของคอนโซล คุณจะต้องมีสิ่งต่อไปนี้ ดังต่อไปนี้

  • อุปกรณ์ที่รองรับ
  • บัญชีการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มของลูกค้า

พัฒนาและทดสอบด้วยอุปกรณ์ที่รองรับการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม การลงทะเบียน เช่น Google Pixel คุณไม่ต้องทำ ซื้ออุปกรณ์การพัฒนาจากพาร์ทเนอร์ตัวแทนจำหน่าย

โปรดติดต่อเราเพื่อรับบัญชีลูกค้าทดสอบและเข้าถึง พอร์ทัลการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่ม ส่งอีเมลถึงเราจากอีเมลบริษัทที่เชื่อมโยงกับบัญชี Google บอกให้เราทราบผู้ผลิต และ IMEI ของอุปกรณ์ 1-2 เครื่องและเราจะเพิ่มลงในการพัฒนาซอฟต์แวร์ ของคุณได้

โปรดทราบว่าการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มจะดาวน์โหลดและติดตั้ง DPC, DPC ของคุณต้องพร้อมใช้งานจาก Google Play ก่อนจึงจะทดสอบได้ การจัดสรร คุณทดสอบด้วย DPC เวอร์ชันพัฒนาไม่ได้

การสนับสนุนสำหรับผู้ดูแลระบบไอที

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

อ่านเพิ่มเติม

อ่านเอกสารต่อไปนี้เพื่อช่วยคุณผสานรวมการตั้งค่าอุปกรณ์พร้อมใช้แบบรวมกลุ่มในคอนโซล