EMM entegrasyon kılavuzu

Bu kılavuz, kurumsal mobilite yönetimi (EMM) sağlayıcılarının sıfır dokunmayla kaydı konsollarına entegre etmesine yardımcı olur. Kaydolma hakkında daha fazla bilgi edinmek ve DPC'nizin (cihaz politikası denetleyicisi) cihazları sağlamasına yardımcı olacak en iyi uygulama önerilerini görmek için okumaya devam edin. Bir DPC'niz varsa cihazları sağlarken en iyi uygulamaları öğrenecek ve geliştirme ile test konusunda yardımcı olacak tavsiyeler alacaksınız.

BT yöneticileri için özellikler

BT yöneticilerinin doğrudan konsolunuzdan el değmeden kayıt kurulumu yapmasına yardımcı olmak için müşteri API'sini kullanın. BT yöneticisinin konsolunuzda yapabileceği bazı görevler şunlardır:

  • Mobil politikalarınıza göre el değmeden kayıt yapılandırmaları oluşturma, düzenleme ve silme
  • DPC'nizin, kuruluşun gelecekte satın alacağı cihazları sağlaması için varsayılan bir yapılandırma ayarlayın.
  • Cihazlara ayrı ayrı yapılandırmalar uygulayabilir veya cihazları el değmeden kayıt sürecinden kaldırabilirsiniz.

El değmeden kayıt hakkında daha fazla bilgi edinmek için genel bakış başlıklı makaleyi inceleyin.

Ön koşullar

EMM konsolunuza el değmeden kayıt özelliğini eklemeden önce çözümünüzün aşağıdakileri desteklediğini onaylayın:

  • EMM çözümünüzün, şirkete ait bir Android 8.0+ (Pixel 7.1+) cihazı tamamen yönetilen modda sağlaması gerekir. Şirkete ait Android 10 veya sonraki sürümlerin yüklü olduğu cihazlar tümüyle yönetilen veya iş profiliyle sağlanabilir.
  • El değmeden kayıt, bir DPC'yi otomatik olarak indirip yüklediğinden DPC'niz Google Play'de bulunmalıdır. BT yöneticilerinin müşteri API'sini veya portalı kullanarak yapılandırabileceği uyumlu DPC'lerin bir listesini tutuyoruz. DPC'nizi listeye eklemek için EMM Sağlayıcı Topluluğu üzerinden bir ürün değişikliği isteği gönderin.
  • Müşterilerinizin müşteri API'sini çağırmak için el değmeden kayıt hesabına ihtiyacı vardır. Bir iş ortağı bayi, kuruluş cihazlarını satın aldığında BT yöneticisinin kuruluşu için hesabı oluşturur.
  • El değmeden kayıt özelliğinin doğru şekilde çalışması için cihazın Google Mobil Hizmetleri (GMS) ile uyumlu olması ve Google Play Hizmetleri'nin her zaman etkin olması gerekir.

API'yi çağırma

Konsolunuzun kullanıcıları (Google Hesaplarını kullanarak) müşteri API'sine yönelik API isteklerinizi yetkilendirir. Bu akış, diğer EMM API'leri için gerçekleştirdiğiniz yetkilendirmeden farklıdır. Bunu uygulamanızda nasıl yapacağınızı öğrenmek için Yetkilendirme başlıklı makaleyi okuyun.

Herkese Açık Ad Hizmet Şartları

Kullanıcılarınızın API'yi çağırmadan önce en son Hizmet Şartları'nı kabul etmesi gerekir. API çağrısı bir HTTP 403 Forbidden durum kodu döndürürse ve yanıt gövdesinde TosError varsa kullanıcıdan sıfır dokunma kayıt portalına giriş yaparak Hizmet Şartları'nı kabul etmesini isteyin. Aşağıdaki örnekte bu işlemi yapabileceğiniz yöntemlerden biri gösterilmektedir:

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 istemciniz ayrıntılı hataları destekliyorsa (Java, Python veya HTTP istekleri), isteklerinize X-GOOG-API-FORMAT-VERSION HTTP başlığını 2 değeriyle birlikte ekleyin. İstemciniz ayrıntılı hataları desteklemiyorsa (.NET ve diğerleri) hata mesajını eşleştirin.

Gelecekte Hizmet Şartları'nı güncellediğimizde bu yaklaşımı izlerseniz uygulamanız, kullanıcıyı yeni Hizmet Şartları'nı yeniden kabul etmeye yönlendirir.

BT yöneticileri, kuruluşlarındaki kullanıcıları yönetmek için el değmeden kayıt portalını kullanır. Bu özelliği müşteri API'si üzerinden sunamazsınız. BT yöneticileri, portalı kullanarak cihazları ve yapılandırmaları da yönetebilir. Konsolunuzdan veya dokümanlarınızdan portala bağlantı vermeniz gerekiyorsa şu URL'yi kullanın:

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

BT yöneticilerini, Google Hesaplarıyla oturum açmaları istendiği konusunda bilgilendirebilirsiniz.

Cihaz kaydı

El değmeden kayıt, cihazları kaydetmek için kullanılan bir mekanizmadır ve NFC kaydı veya QR kodu kaydına benzer. Konsolunuzun yönetilen cihazları desteklemesi ve DPC'nizin tümüyle yönetilen cihaz modunda çalışabilmesi gerekir.

El değmeden kayıt, Android 8.0 veya sonraki sürümlerin yüklü olduğu desteklenen cihazlarda kullanılabilir. BT yöneticileri, desteklenen cihazları bir iş ortağı bayisinden satın almalıdır. Konsolunuz, customers.devices.list işlevini çağırarak BT yöneticisinin cihazlarından hangilerinin el değmeden kayıt için kullanılabilir olduğunu takip edebilir.

Kayıt işleminin işleyiş şekliyle ilgili genel bilgileri aşağıda bulabilirsiniz:

  1. Bir cihaz, ilk başlatıldığında (veya fabrika ayarlarına sıfırlandıktan sonra) el değmeden kayıt için Google sunucusuna kaydolur.
  2. BT yöneticisi cihaza bir yapılandırma uyguladıysa sıfır dokunmayla kayıt, tümüyle yönetilen cihaz Android kurulum sihirbazını çalıştırır ve ekranları yapılandırmadaki meta verilerle kişiselleştirir.
  3. El değmeden kayıt özelliği, Google Play'den DPC'nizi indirip yükler.
  4. KYS'niz ACTION_PROVISION_MANAGED_DEVICE amacını alır ve cihazı sağlar.

İnternet bağlantısı yoksa kontrol, bağlantı kullanılabilir olduğunda yapılır. El değmeden kayıt ile cihaz sağlama hakkında daha fazla bilgi edinmek için aşağıdaki Sağlama bölümüne bakın.

Varsayılan yapılandırmalar

El değmeden kayıt, BT yöneticilerine en çok kuruluşlarının satın aldığı yeni cihazlara uygulanan varsayılan yapılandırmayı ayarladıklarında yardımcı olur. Ayarlanmamışsa konsolunuzdan varsayılan yapılandırma ayarlamanızı öneririz. Bir kuruluşun varsayılan yapılandırma ayarlayıp ayarlamadığını öğrenmek için customers.configurations.isDefault değerini kontrol edebilirsiniz.

Aşağıdaki örnekte, mevcut bir yapılandırmayı nasıl varsayılan yapabileceğiniz gösterilmektedir:

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'nize referans verme

DPC'nizi tanımlamak ve yapılandırmalarda kullanmak için API kaynak adı customers.dpcs.name'ı kullanmanızı öneririz. Kaynak adı, DPC için benzersiz ve değişmeyen bir tanımlayıcı içerir. Desteklenen tüm DPC'lerin listesini almak için customers.dpcs.list numaralı telefonu arayın. Kaynak adı müşteri kimliğini de içerdiğinden, eşleşen bir Dpc örneğini bulmak için listeyi son yol bileşenini kullanarak filtreleyin. Aşağıdaki örnekte, DPC'nizi nasıl eşleştireceğiniz ve daha sonra yapılandırmada kullanmak üzere nasıl kalıcı hale getireceğiniz gösterilmektedir:

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

Konsolunuzun kullanıcı arayüzünde bir DPC'nin adını göstermeniz gerekiyorsa customers.dpcs.dpcName tarafından döndürülen değeri gösterin.

Temel hazırlık yapılıyor

Cihaz hazırlama için mükemmel bir kullanıcı deneyimi sunma fırsatını değerlendirin. Cihazı sağlama için kullanıcı adı ve şifre yeterli olmalıdır. Bayilerin cihazları doğrudan uzaktaki kullanıcılara gönderebileceğini unutmayın. EMM sunucusu veya kuruluş birimi gibi diğer tüm ayarları customers.configuration.dpcExtras içine ekleyin.

Aşağıdaki JSON snippet'inde örnek bir yapılandırmanın bir kısmı gösterilmektedir:

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

El değmeden kayıt, Android Intent kullanarak DPC'nizi yükler ve başlatır. Sistem, android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE JSON özelliğindeki değerleri, amaçtaki ekstralar olarak DPC'nize gönderir. DPC'niz, aynı anahtarları kullanarak PersistableBundle içindeki hazırlama ayarlarını okuyabilir.

Önerilen: DPC'nizi ayarlamak için aşağıdaki amaç ekstralarını kullanın:

Önerilmez: Diğer kayıt yöntemlerinde kullanabileceğiniz aşağıdaki ek bilgileri eklemeyin:

Bu ayarları DPC'nizde nasıl çıkarıp kullanacağınızı öğrenmek için Müşteri cihazlarını sağlama başlıklı makaleyi okuyun.

Geliştirme ve test

Konsolunuzun el değmeden kayıt özelliklerini geliştirip test etmek için aşağıdakilere ihtiyacınız vardır:

  • Desteklenen bir cihaz
  • Müşterinin el değmeden kayıt hesabı

Google Pixel gibi el değmeden kayıt özelliğini destekleyen cihazlarla geliştirme ve test yapın. Geliştirme cihazlarınızı bir bayi iş ortağından satın almanız gerekmez.

Test müşteri hesabı ve el değmeden kayıt portalına erişim elde etmek için bize ulaşın. Google Hesabı ile ilişkilendirilmiş şirket e-posta adresinizden bize e-posta gönderin. Bize bir veya iki cihazın üreticisini ve IMEI numarasını bildirin. Bu cihazları geliştirici hesabınıza ekleriz.

El değmeden kayıt, bir DPC'yi otomatik olarak indirip yüklediğinden, temel hazırlığı test edebilmeniz için DPC'nizin Google Play'de kullanıma sunulması gerektiğini unutmayın. DPC'nizin geliştirme sürümüyle test yapamazsınız.

BT yöneticileri için destek

Konsolunuzun arayüzünde veya dokümanlarınızda BT yöneticilerine yardımcı olmanız gerekiyorsa rehberlik için BT yöneticileri için el değmeden kayıt sayfasına bakın. Ayrıca konsolunuzun kullanıcılarını da bu Yardım Merkezi makalesine yönlendirebilirsiniz.

Daha fazla bilgi

El değmeden kaydı konsolunuza entegre etmenize yardımcı olması için aşağıdaki dokümanları okuyun: