راهنمای یکپارچه‌سازی EMM

این راهنما به ارائه‌دهندگان مدیریت تحرک سازمانی (EMM) کمک می‌کند ثبت‌نام تمام خودکار را در کنسولشان ادغام کنند. برای کسب اطلاعات بیشتر درباره ثبت‌نام و دیدن توصیه‌هایی درباره روال‌های مطلوب برای کمک به «کنترل‌کننده خط‌مشی دستگاه» (DPC) در آماده‌سازی دستگاه‌ها، به خواندن ادامه دهید. اگر «کنترل‌کننده خط‌مشی دستگاه» دارید، هنگام آماده‌سازی دستگاه‌ها با روال‌های مطلوب آشنا خواهید شد و برای توسعه و آزمایش راهنمایی دریافت خواهید کرد.

ویژگی‌های مخصوص سرپرستان فناوری اطلاعات

از API مشتری استفاده کنید تا به سرپرستان فناوری اطلاعات کمک کنید ثبت‌نام تمام خودکار را مستقیماً از کنسول شما راه‌اندازی کنند. در اینجا برخی‌از کارهایی که سرپرست فناوری اطلاعات ممکن است در کنسول شما انجام دهد آورده شده است:

  • پیکربندی‌های ثبت‌نام تمام خودکار را براساس خط‌مشی‌های تلفن همراهتان ایجاد، ویرایش، و حذف کنید.
  • پیکربندی پیش‌فرضی تنظیم کنید تا DPC شما دستگاه‌های آینده‌ای را که سازمان خریداری می‌کند آماده‌سازی کند.
  • پیکربندی‌های تکی را بر دستگاه‌ها اعمال کنید یا دستگاه‌ها را از ثبت‌نام تمام خودکار بردارید.

برای کسب اطلاعات بیشتر درباره ثبت‌نام تمام‌خودکار، نمای کلی را بخوانید.

پیش‌نیازها

قبل‌از افزودن ثبت‌نام تمام خودکار به کنسول «مدیریت سیار شرکت‌ها» (EMM)، مطمئن شوید که راهکار شما از موارد زیر پشتیبانی می‌کند:

  • راه‌حل EMM شما باید دستگاه Android نسخه ۸.۰ به بالا (Pixel نسخه ۷.۱ به بالا) متعلق به شرکت را در حالت کاملاً مدیریت‌شده آماده‌سازی کند. دستگاه‌های Android 10+ متعلق به شرکت را می‌توان به‌عنوان کاملاً مدیریت‌شده یا با نمایه کاری آماده‌سازی کرد.
  • ازآنجایی‌که ثبت‌نام تمام خودکار به‌طور خودکار DPC را بارگیری و نصب می‌کند، DPC شما باید از Google Play دردسترس باشد. ما فهرستی از «کنترل‌کننده‌های خط‌مشی دستگاه» سازگار را نگهداری می‌کنیم که سرپرستان فناوری اطلاعات می‌توانند بااستفاده از میانای برنامه‌سازی کاربردی مشتری یا پورتال پیکربندی کنند. درخواست اصلاح محصول را ازطریق انجمن ارائه‌دهنده EMM ارسال کنید تا DPC شما به فهرست اضافه شود.
  • مشتریان شما برای فراخوانی API مشتری به حساب ثبت‌نام تمام خودکار نیاز دارند. وقتی سازمانی دستگاه‌هایش را خریداری می‌کند، یک فروشنده شریک حساب را برای سرپرست فناوری اطلاعات سازمان راه‌اندازی می‌کند.
  • دستگاه باید با خدمات Google Mobile (GMS) سازگار باشد و خدمات Google Play باید همیشه فعال باشد تا ثبت‌نام تمام خودکار به‌درستی کار کند.

فراخوانی میانای برنامه‌سازی کاربردی

کاربران کنسول شما (بااستفاده از «حساب Google» خود) درخواست‌های میانای برنامه‌سازی کاربردی شما را برای میانای برنامه‌سازی کاربردی مشتری مجاز می‌کنند. این جریان با مجوزی که برای دیگر میاناهای برنامه‌سازی کاربردی EMM انجام می‌دهید متفاوت است. برای آشنایی با نحوه انجام این کار در برنامه‌تان، مجوز را بخوانید.

شرایط خدمات نام کاربری

کاربرانتان باید پیش‌از فراخوانی میانای برنامه‌سازی کاربردی، جدیدترین «شرایط خدمات» را بپذیرند. اگر فراخوانی میانای برنامه‌سازی کاربردی رمز وضعیت HTTP 403 Forbidden را برگرداند و بدنه پاسخ حاوی TosError باشد، از کاربر بخواهید با ورود به سیستم درگاه ثبت‌نام تمام خودکار، «شرایط خدمات» را بپذیرد. مثال زیر یکی از روش‌هایی را که می‌توانید این کار را انجام دهید نشان می‌دهد:

جاوا

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

دات نت

// 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. و غیره) پشتیبانی نمی‌کند، پیام خطا را مطابقت دهید.

وقتی در آینده «شرایط خدمات» را به‌روزرسانی می‌کنیم، اگر این رویکرد را دنبال کنید، برنامه‌تان کاربر را هدایت می‌کند تا «شرایط خدمات» جدید را دوباره بپذیرد.

سرپرستان فناوری اطلاعات از پرتال ثبت‌نام تمام خودکار برای مدیریت کاربران سازمانشان استفاده می‌کنند—نمی‌توانید این را ازطریق میانای برنامه‌سازی کاربردی مشتری ارائه دهید. سرپرستان فناوری اطلاعات همچنین می‌توانند دستگاه‌ها و پیکربندی‌ها را بااستفاده از درگاه مدیریت کنند. اگر لازم است از کنسول یا در اسناد خود به درگاه پیوند دهید، از این نشانی وب استفاده کنید:

https://enterprise.google.com/android/zero-touch/customers

شاید بخواهید به سرپرستان فناوری اطلاعات اطلاع دهید که از آن‌ها خواسته می‌شود با «حساب Google» خود به سیستم وارد شوند.

ثبت‌نام دستگاه

ثبت‌نام تمام خودکار مکانیزمی برای ثبت‌نام دستگاه‌ها است و مانند ثبت‌نام NFC یا ثبت‌نام با رمزینه پاسخ‌سریع است. کنسول شما باید از دستگاه‌های مدیریت‌شده پشتیبانی کند و DPC شما باید بتواند در حالت دستگاه کاملاً مدیریت‌شده اجرا شود.

ثبت‌نام تمام‌خودکار در دستگاه‌های پشتیبانی‌شده با Android نسخه ۸.۰ یا بالاتر دردسترس است. سرپرستان فناوری اطلاعات باید دستگاه‌های پشتیبانی‌شده را از فروشنده شریک خریداری کنند. کنسول شما می‌تواند با فراخوانی customers.devices.list ردیابی کند که کدام‌یک از دستگاه‌های سرپرست فناوری اطلاعات برای ثبت‌نام تمام خودکار دردسترس است.

در اینجا خلاصه‌ای از نحوه عملکرد ثبت‌نام آورده شده است:

  1. دستگاه در اولین راه‌اندازی (یا پس‌از بازنشانی کارخانه‌ای) برای ثبت‌نام تمام خودکار با سرور Google ارتباط برقرار می‌کند.
  2. اگر سرپرست فناوری اطلاعات پیکربندی‌ای را بر دستگاه اعمال کرده باشد، ثبت‌نام تمام خودکار دستیار راه‌اندازی Android دستگاه کاملاً مدیریت‌شده را اجرا می‌کند و صفحه‌ها را با فراداده‌های پیکربندی شخصی‌سازی می‌کند.
  3. ثبت‌نام تمام خودکار، DPC شما را از Google Play بارگیری و نصب می‌کند.
  4. DPC شما هدف ACTION_PROVISION_MANAGED_DEVICE را دریافت می‌کند و دستگاه را آماده‌سازی می‌کند.

اگر اتصال اینترنت وجود نداشته باشد، این بررسی زمانی انجام می‌شود که اتصال اینترنت دردسترس قرار گیرد. برای کسب اطلاعات بیشتر درباره آماده‌سازی دستگاه با ثبت‌نام تمام خودکار، آماده‌سازی را در زیر ببینید.

پیکربندی‌های پیش‌فرض

ثبت‌نام تمام خودکار زمانی بیشترین کمک را به سرپرستان فناوری اطلاعات می‌کند که پیکربندی پیش‌فرضی را تنظیم کنند که برای هر دستگاه جدیدی که سازمانشان خریداری می‌کند اعمال شود. اگر پیکربندی پیش‌فرض تنظیم نشده است، تنظیم آن را از کنسول خود ترویج کنید. می‌توانید مقدار customers.configurations.isDefault را بررسی کنید تا متوجه شوید که آیا سازمانی پیکربندی پیش‌فرضی را تنظیم کرده است یا نه.

مثال زیر نشان می‌دهد که چگونه می‌توانید پیکربندی موجود را به پیش‌فرض تبدیل کنید:

جاوا

// 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();

دات نت

// 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()

ارجاع به «کنترل‌کننده خط‌مشی دستگاه» شما

توصیه می‌کنیم از نام منبع API customers.dpcs.name برای شناسایی DPC خود استفاده کنید و از آن در پیکربندی‌ها استفاده کنید. نام منبع حاوی شناسه یکتا و تغییرناپذیر برای DPC است. برای دریافت فهرست همه DPCهای پشتیبانی‌شده، با customers.dpcs.list تماس بگیرید. چون نام منبع شامل شناسه مشتری نیز می‌شود، فهرست را بااستفاده از آخرین مؤلفه مسیر فیلتر کنید تا نمونه Dpc منطبق را پیدا کنید. مثال زیر نشان می‌دهد که چگونه DPC خود را مطابقت دهید و آن را برای استفاده بعدی در پیکربندی حفظ کنید:

جاوا

// 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...

دات نت

// 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\"]"
    }
}

ثبت‌نام تمام‌خودکار بااستفاده از Android Intent،‏ DPC شما را نصب و راه‌اندازی می‌کند. سیستم مقادیر موجود در android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE ویژگی JSON را به DPC شما به‌عنوان موارد اضافی در هدف ارسال می‌کند. DPC شما می‌تواند تنظیمات تدارک را از PersistableBundle بااستفاده از همان کلیدها بخواند.

توصیه‌شده—از موارد اضافی هدف زیر برای راه‌اندازی DPC استفاده کنید:

توصیه نمی‌شود—موارد اضافی زیر را که ممکن است در روش‌های دیگر ثبت‌نام استفاده کنید، اضافه نکنید:

برای آشنایی با نحوه استخراج و استفاده از این تنظیمات در DPC، آماده‌سازی دستگاه‌های مشتری را بخوانید.

توسعه و آزمایش

برای توسعه و آزمایش ویژگی‌های ثبت‌نام تمام خودکار کنسولتان، به موارد زیر نیاز دارید:

  • دستگاه پشتیبانی‌شده
  • حساب ثبت‌نام تمام‌خودکار مشتری

با دستگاه‌هایی که از ثبت‌نام تمام خودکار پشتیبانی می‌کنند، مثل Google Pixel، توسعه و آزمایش کنید. لازم نیست دستگاه‌های توسعه‌تان را از شریک توزیع‌کننده خریداری کنید.

برای دریافت حساب مشتری آزمایشی و دسترسی به درگاه ثبت‌نام تمام‌خودکار، با ما تماس بگیرید. از نشانی ایمیل شرکتی‌تان که با «حساب Google» مرتبط است به ما ایمیل بزنید. سازنده و شماره IMEI یک یا دو دستگاه را به ما بگویید تا آن‌ها را به حساب توسعه‌دهنده شما اضافه کنیم.

به‌یاد داشته باشید که چون ثبت‌نام تمام خودکار به‌طور خودکار یک DPC را بارگیری و نصب می‌کند، DPC شما باید قبل‌از اینکه بتوانید آماده‌سازی را آزمایش کنید، از Google Play دردسترس باشد. نمی‌توانید با نسخه توسعه DPC خودتان آزمایش کنید.

پشتیبانی برای سرپرستان فناوری اطلاعات

اگر لازم است به سرپرستان فناوری اطلاعات در میانای کنسول یا اسناد خود کمک کنید، برای راهنمایی به ثبت‌نام تمام خودکار برای سرپرستان فناوری اطلاعات مراجعه کنید. همچنین می‌توانید کاربران کنسولتان را به آن مقاله مرکز راهنمایی هدایت کنید.

مطالعه بیشتر

این اسناد را بخوانید تا به شما کمک کند ثبت‌نام تمام خودکار را در کنسولتان ادغام کنید: