Cara kerja

API pelanggan memberikan kontrol terprogram atas perangkat dan konfigurasi untuk pendaftaran zero-touch Android. Dokumen ini memperkenalkan API ke penyedia pengelolaan mobilitas perusahaan (EMM) dan IT perusahaan developer. Setelah membaca dokumen ini, Anda harus memahami inti dari resource yang digunakan dalam API dan cara interaksinya. Jika Anda baru menggunakan zero-touch pendaftaran, baca keterangan singkat android.com pengantar.

Ringkasan

API pelanggan membantu organisasi yang membeli pendaftaran zero-touch Android perangkat. Aplikasi atau alat Anda dapat membantu admin IT melakukan hal berikut:

  • Membuat, mengedit, dan menghapus konfigurasi penyediaan.
  • Terapkan atau hapus konfigurasi pada perangkat.
  • Pilih konfigurasi default untuk perangkat apa pun yang ditambahkan ke pendaftaran zero-touch ke depannya.

Melalui API ini, admin IT juga dapat membatalkan pendaftaran perangkat dari zero-touch pendaftaran. Untuk mengelola pengguna organisasi mereka atau menyetujui Persyaratan Layanan, Admin IT menggunakan portal pendaftaran zero-touch.

Pengguna umum API ini adalah:

  • Penyedia EMM menambahkan dukungan untuk pendaftaran zero-touch ke konsolnya.
  • Developer IT perusahaan yang membuat alat untuk mengotomatiskan pendaftaran zero-touch tugas klasifikasi.

Referensi inti

Konfigurasi dan perangkat adalah resource inti yang Anda gunakan di API. Organisasi juga dapat membuat konfigurasi dan perangkat menggunakan portal pendaftaran zero-touch.

Hubungan perangkat dan resource pelanggan

Konfigurasi
Admin IT menetapkan opsi penyediaan untuk perangkat menggunakan konfigurasi. Konfigurasi mencakup kebijakan seluler EMM dan info kontak yang ditampilkan kepada membantu pengguna. Konfigurasi merupakan inti dari API, jadi Anda akan menggunakannya di berbagai metode. Untuk mempelajari lebih lanjut, lihat Konfigurasi di bawah.
Perangkat
Perangkat Android yang mendukung pendaftaran zero-touch, yang dibeli oleh organisasi reseller-nya. Menerapkan konfigurasi untuk menyertakan perangkat dalam zero-touch pendaftaran. Perangkat memiliki ID hardware dan metadata terlampir. Untuk mempelajari lebih lanjut, lihat Perangkat di bawah.
DPC
Referensi hanya baca ke DPC EMM (kebijakan perangkat) pengontrol). Tambahkan DPC ke konfigurasi guna memilih solusi EMM untuk perangkat. Semua DPC yang tercantum oleh API mendukung pendaftaran zero-touch dan tersedia di Google Play. Kepada pelajari lebih lanjut, lihat Dpc.

Untuk menampilkan daftar semua metode dan resource API yang dapat digunakan aplikasi Anda, lihat Referensi API.

Konfigurasi

Resource API Configuration menggabungkan hal berikut:

  • DPC EMM yang diinstal di perangkat.
  • Kebijakan EMM diterapkan pada perangkat.
  • Informasi kontak yang ditampilkan di perangkat untuk membantu pengguna selama penyiapan.

Dengan menggunakan API, aplikasi Anda dapat mengelola konfigurasi untuk admin IT. Memanggil API ke mengambil, membuat, memperbarui, dan menghapus konfigurasi. Contoh di bawah ini menunjukkan cara buat konfigurasi baru:

Java

// Add metadata to help the device user during provisioning.
Configuration configuration = new Configuration();
configuration.setConfigurationName("Sales team");
configuration.setCompanyName("XYZ Corp.");
configuration.setContactEmail("it-support@example.com");
configuration.setContactPhone("+1 (800) 555-0112");
configuration.setCustomMessage("We're setting up your phone. Call or email for help.");

// Set the DPC that zero-touch enrollment downloads and installs from Google Play.
configuration.setDpcResourcePath(dpc.getName());

// Set the JSON-formatted EMM provisioning extras that are passed to the DPC.
configuration.setDpcExtras("{"
      + "\"android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED\":true,"
      + "\"android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE\":{"
      + "\"default_min_password_length\":6,"
      + "\"company_name\":\"XYZ Corp\","
      + "\"management_server\":\"emm.example.com\","
      + "\"terms_url\":\"https://www.example.com/policies/terms/\","
      + "\"allowed_user_domains\":\"[\\\"example.com\\\", \\\"example.org\\\"]\""
      + "}"
      + "}");

// Create the new configuration on the server.
AndroidProvisioningPartner.Customers.Configurations.Create request =
      service.customers().configurations().create(customerAccount, configuration);
Configuration response = request.execute();

.NET

// Add metadata to help the device user during provisioning.
Configuration configuration = new Configuration
{
    ConfigurationName = "Sales team",
    CompanyName = "XYZ Corp.",
    ContactEmail = "it-support@example.com",
    ContactPhone = "+1 (800) 555-0112",
    CustomMessage = "We're setting up your phone. Call or email for help."
};

// Set the DPC that zero-touch enrollment downloads and installs from Google Play.
configuration.DpcResourcePath = dpc.Name;

// Set the JSON-formatted EMM provisioning extras that are passed to the DPC.
configuration.DpcExtras = @"{
    ""android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED"":true,
    ""android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE"":{
    ""default_min_password_length"":6,
    ""company_name"":""XYZ Corp"",
    ""management_server"":""emm.example.com"",
    ""terms_url"":""https://www.example.com/policies/terms/"",
    ""allowed_user_domains"":""[\""example.com\"", \""example.org\""]""
  }
}";

// Create the new configuration on the server.
var request = service.Customers.Configurations.Create(configuration, customerAccount);
var response = request.Execute();

Python

# Add metadata to help the device user during provisioning.
configuration = {
    'configurationName': 'Sales team',
    'companyName': 'XYZ Corp.',
    'contactEmail': 'it-support@example.com',
    'contactPhone': '+1 (800) 555-0112',
    'customMessage': 'We\'re setting up your phone. Call or email for help.'}

# Set the DPC that zero-touch enrollment installs from Google Play.
configuration['dpcResourcePath'] = dpc['name']

# Set the JSON-formatted EMM provisioning extras that are passed to the DPC.
configuration['dpcExtras'] = '''{
    "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED":true,
    "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE":{
      "default_min_password_length":6,
      "company_name":"XYZ Corp",
      "management_server":"emm.example.com",
      "terms_url":"https://www.example.com/policies/terms/",
      "allowed_user_domains":"[\\"example.com\\", \\"example.org\\"]"}
}'''

# Create the new configuration on the server.
response = service.customers().configurations().create(
    parent=customer_account, body=configuration).execute()

Saat Anda mengupdate konfigurasi menggunakan patch API, ingatlah untuk menyertakan field mask—atau untuk setiap kolom yang tidak Anda inginkan berupa null. Lihat Default konfigurasi (di bawah) untuk contoh yang menunjukkan cara memperbarui konfigurasi secara efisien.

Hapus konfigurasi

Anda tidak dapat menghapus konfigurasi jika konfigurasi tersebut masih diterapkan ke perangkat. Jika Anda mencoba menghapus konfigurasi yang sedang digunakan, metode API akan menampilkan 400 Bad Request HTTP kode status dan pesan yang menjelaskan berapa banyak perangkat yang menggunakan konfigurasi itu. Telepon customers.devices.removeConfiguration untuk menghapus konfigurasi dari perangkat sebelum mencoba lagi.

Konfigurasi default

Pendaftaran zero-touch berfungsi paling optimal jika organisasi menetapkan konfigurasi default yang diterapkan ke semua perangkat baru yang dibeli organisasi. Pertimbangkan untuk meminta admin IT menetapkan konfigurasi default jika belum disetel. Contoh di bawah ini menunjukkan cara menjadikan konfigurasi yang ada sebagai default dengan menetapkan isDefault ke true:

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

Hanya boleh ada satu konfigurasi default. Membuat konfigurasi {i>default<i} baru, menyetel kolom isDefault konfigurasi sebelumnya ke false. Anda mungkin perlu muat ulang instance Configuration yang di-cache untuk melihat nilai yang benar dalam isDefault kolom.

Memandu pengguna perangkat

Konfigurasi zero-touch menampilkan panduan pengguna yang disesuaikan di Penyiapan perangkat Wizard untuk membantu pengguna. Anda harus menyertakan nomor telepon kontak dan alamat email bersama dengan nama organisasi yang mengelola perangkat dalam konfigurasi. Sebaiknya Anda juga menyertakan satu atau dua kalimat dalam Kolom customMessage untuk memberikan detail selengkapnya tentang apa yang terjadi pada perangkat seluler.

Karena pengguna tidak akan dapat menelepon atau mengirim email dari perangkat yang mereka setel format nomor telepon dan alamat email agar lebih mudah melihat sekilas informasi.

Perangkat

Reseller membuat perangkat saat pelanggan membelinya untuk pendaftaran zero-touch—admin IT tidak dapat membuat perangkat. Agar dapat digunakan dengan perangkat, panggil metode di resource Device API. Jika Anda perlu menelusuri perangkat, cantumkan semua perangkat dan filter setiap batch secara lokal di aplikasi Anda. Sebagai contoh, lihat Hasil yang di-paging di bawah.

Mengonfigurasi perangkat

Menerapkan konfigurasi ke perangkat akan mendaftarkan perangkat untuk zero-touch pendaftaran. Untuk menerapkan konfigurasi, panggil customers.devices.applyConfiguration. Setelah menerapkan konfigurasi, perangkat secara otomatis melakukan penyediaan sendiri {i>booting<i} pertama, atau {i>factory reset<i} berikutnya. Contoh di bawah ini menunjukkan cara menerapkan konfigurasi ke sekumpulan perangkat:

Java

List<Device> devices = getDevicesToConfigure(service);
Configuration configurationToApply = getConfigurationToApply(service);

// Loop through the collection and apply the configuration to each device. This might
// take some time if the collection contains many devices.
for (Device device : devices) {
    System.out.println(device.getDeviceIdentifier().getImei());

    // Wrap the device ID in a DeviceReference.
    DeviceReference deviceRef = new DeviceReference();
    deviceRef.setDeviceId(device.getDeviceId());

    // Build and send the request to the API.
    CustomerApplyConfigurationRequest body = new CustomerApplyConfigurationRequest();
    body.setConfiguration(configurationToApply.getName());
    body.setDevice(deviceRef);

    AndroidProvisioningPartner.Customers.Devices.ApplyConfiguration request = service
          .customers()
          .devices()
          .applyConfiguration(customerAccount, body);
    request.execute();
}

.NET

IList<Device> devices = GetDevicesToConfigure(service);
Configuration configurationToApply = GetConfigurationToApply(service);

// Loop through the collection and apply the configuration to each device. This might
// take some time if the collection contains many devices.
foreach (Device device in devices)
{
    Console.WriteLine(device.DeviceIdentifier.Imei);

    // Wrap the device ID in a DeviceReference.
    var deviceRef = new DeviceReference
    {
        DeviceId = device.DeviceId
    };

    // Build and send the request to the API.
    CustomerApplyConfigurationRequest body = new CustomerApplyConfigurationRequest
    {
        Configuration = configurationToApply.Name,
        Device = deviceRef
    };
    var request = service.Customers.Devices.ApplyConfiguration(body,
                                                               customerAccount);
    request.Execute();
}

Python

devices = get_devices_to_configure(service)
configuration = get_configuration_to_apply(service)

# Loop through the collection and apply the configuration to each device.
# This might take some time if the collection contains many devices.
for device in devices:
  print(device['deviceIdentifier']['imei'])

  # Wrap the device ID in a DeviceReference.
  device_ref = {'deviceId': device['deviceId']}

  # Build and send the request to the API.
  body = {'configuration': configuration['name'], 'device': device_ref}
  service.customers().devices().applyConfiguration(
      parent=customer_account, body=body).execute()

Untuk menghapus konfigurasi dari perangkat, panggil customers.devices.removeConfiguration Perubahan ini berlaku setelah mereset perangkat ke setelan pabrik.

Batalkan klaim perangkat

Admin IT dapat membatalkan klaim perangkat untuk menghapusnya dari pendaftaran zero-touch. Seorang IT admin mungkin membatalkan klaim perangkat yang ingin mereka migrasikan ke akun lain, dijual, atau dikembalikan ke reseller. Memanggil metode customers.devices.unclaim untuk membatalkan klaim perangkat dari suatu organisasi.

Contoh di bawah ini menunjukkan cara membatalkan klaim perangkat dari nomor IMEI dan nama produsen:

Java

// Wrap the hardware ID and manufacturer values in a DeviceIdentifier.
// Then wrap the DeviceIdentifier in a DeviceReference.
DeviceIdentifier identifier = new DeviceIdentifier();
identifier.setImei("123456789012347");
identifier.setManufacturer("Google");
DeviceReference reference = new DeviceReference();
reference.setDeviceIdentifier(identifier);

// Create the body of the request.
CustomerUnclaimDeviceRequest body = new CustomerUnclaimDeviceRequest();
body.setDevice(reference);

// Call the API method to unclaim the device from the organization.
service.customers().devices().unclaim(customerAccount, body).execute();

.NET

// Wrap the hardware ID and manufacturer values in a DeviceIdentifier.
// Then wrap the DeviceIdentifier in a DeviceReference.
DeviceIdentifier identifier = new DeviceIdentifier
{
    Imei = "123456789012347",
    Manufacturer = "Google"
};
DeviceReference reference = new DeviceReference();
reference.DeviceIdentifier = identifier;

// Create the body of the request.
CustomerUnclaimDeviceRequest body = new CustomerUnclaimDeviceRequest();
body.Device = reference;

// Call the API method to unclaim the device from the organization.
service.Customers.Devices.Unclaim(body, customerAccount).Execute();

Python

# Wrap the hardware ID and manufacturer values in a DeviceIdentifier.
# Then wrap the DeviceIdentifier in a DeviceReference.
identifier = {'imei': '123456789012347', 'manufacturer': 'Google'}
reference = {'deviceIdentifier': identifier}

# Create the body of the request.
body = {'device': reference}

# Call the API method to unclaim the device from the organization.
service.customers().devices().unclaim(
    parent=customer_account, body=body).execute()

Metadata perangkat

Admin IT dapat melihat metadata yang dilampirkan ke perangkat oleh reseller. Tampilkan metadata perangkat ini di aplikasi Anda untuk membantu admin IT mengenali perangkat.

Untuk mempelajari lebih lanjut tentang metadata yang mungkin Anda lihat, baca Perangkat panduan metadata untuk reseller.

Hasil yang di-page

Metode customers.devices.list API mungkin menampilkan daftar perangkat yang sangat banyak. Untuk mengurangi ukuran respons, API ini dan API lainnya (seperti customers.list) mendukung hasil yang dibagi-bagi. Dengan hasil yang di-paging, aplikasi Anda dapat secara iteratif meminta dan memproses daftar besar satu halaman pada satu waktu.

Setelah memanggil metode API, periksa apakah respons mencakup nilai untuk nextPageToken Jika nextPageToken bukan null, aplikasi Anda dapat menggunakannya untuk mengambil halaman perangkat lain dengan memanggil metode lagi. Anda perlu menetapkan batas atas untuk jumlah perangkat dalam parameter pageSize. Jika nextPageToken adalah null, aplikasi Anda telah meminta halaman terakhir.

Contoh metode di bawah menunjukkan cara aplikasi Anda mencetak daftar perangkat, satu halaman pada satu waktu:

Java

private void printDevices(AndroidProvisioningPartner service, String customerAccount,
      String pageToken) throws IOException {

    // Call the API to get a page of Devices. Send a page token from the method argument.
    // If the page token is null, the API returns the first page.
    AndroidProvisioningPartner.Customers.Devices.List request =
          service.customers().devices().list(customerAccount);
    request.setPageSize(50L);
    request.setPageToken(pageToken);
    CustomerListDevicesResponse response = request.execute();

    // Print the devices included in this page of results.
    for (Device device : response.getDevices()) {
        System.out.format("Device: %s\n", device.getName());
    }
    System.out.println("---");

    // Check to see if another page of devices is available. If yes, fetch & print the devices.
    if (response.getNextPageToken() != null) {
        this.printDevices(service, customerAccount, response.getNextPageToken());
    }
}

.NET

private void PrintDevices(AndroidProvisioningPartnerService service, String customerAccount,
                          String pageToken)
{
    // Call the API to get a page of Devices. Send a page token from the method argument.
    // If the page token is null, the API returns the first page.
    var request = service.Customers.Devices.List(customerAccount);
    request.PageSize = 50;
    request.PageToken = pageToken;
    var response = request.Execute();

    // Print the devices included in this page of results.
    foreach (Device device in response.Devices)
    {
        Console.WriteLine("Device: {0}", device.Name);
    }
    Console.WriteLine("---");

    // Check to see if another page of devices is available. If yes, fetch and print the devices.
    if (response.NextPageToken != null)
    {
        this.PrintDevices(service, customerAccount, response.NextPageToken);
    }
}

Python

def print_devices(service, customer_account, page_token):
  """Demonstrates how to loop through paginated lists of devices."""

  # Call the API to get a page of Devices. Send a page token from the method
  # argument. If the page token is None, the API returns the first page.
  response = service.customers().devices().list(
      parent=customer_account, pageSize=50, pageToken=page_token).execute()

  # Print the devices included in this page of results.
  for device in response['devices']:
    print('Device: {0}'.format(device['name']))
  print('---')

  # Check to see if another page of devices is available. If yes,
  # fetch and print the devices.
  if 'nextPageToken' in response:
    print_devices(service, customer_account, response['nextPageToken'])

Mulai

Selanjutnya, baca cara memberikan otorisasi panggilan API di bagian Otorisasi. Jika Anda ingin mempelajari API, lihat panduan memulai untuk Java, .NET, dan Python. Anda dapat menggunakan colab untuk melihat contoh panggilan API dan bereksperimen dengan memanggil API sendiri.