Przewodnik po integracji EMM

Ten przewodnik ułatwia integrację dostawców usług zarządzania urządzeniami mobilnymi (EMM) rejestracji typu zero-touch w konsoli. Czytaj dalej, aby dowiedzieć się więcej o rejestracji i poznać sprawdzone metody ułatwiają DPC (kontroler zasad urządzeń) obsługę administracyjną urządzeń. Jeśli masz DPC, poznasz sprawdzone metody obsługi administracyjnej urządzeń i porady programowania i testowania.

Funkcje dla administratorów IT

Użyj interfejsu API klienta, aby pomóc administratorom IT skonfigurować rejestrację typu zero-touch bezpośrednio z poziomu w konsoli. Oto niektóre zadania, które administrator IT może wykonywać w konsoli:

  • Tworzenie, edytowanie i usuwanie konfiguracji rejestracji typu zero-touch na podstawie zasad dotyczących urządzeń mobilnych.
  • ustawić domyślną konfigurację, by DPC udostępniał w przyszłości urządzenia zakupów organizacji.
  • Zastosować na urządzeniach poszczególne konfiguracje lub usunąć urządzenia z rejestracji typu zero-touch.

Więcej informacji o rejestracji typu zero-touch znajdziesz w omówienie.

Wymagania wstępne

Zanim dodasz rejestrację typu zero-touch w konsoli EMM, sprawdź, czy obsługuje te rozwiązania:

  • Rozwiązanie EMM musi skonfigurować należące do firmy urządzenie z Androidem 8.0 lub nowszym (Pixel 7.1 lub nowszy) w trybie w pełni zarządzanego urządzenia. Urządzenia z Androidem 10 lub nowszym należące do firmy mogą udostępnione jako w pełni zarządzane lub z profilem służbowym;
  • Rejestracja typu zero-touch automatycznie pobiera i instaluje profil DPC, dlatego musi on być dostępny w Google Play. Prowadzimy listę zgodnych dostawców usług w zakresie ochrony danych osobowych, którą administratorzy IT mogą konfigurować za pomocą interfejsu API dla klientów lub portalu. Prześlij prośbę o modyfikację usługi przesłaną przez społeczność dostawców usług EMM. aby dodać DPC do listy.
  • Aby móc wywoływać interfejs API klienta, klienci muszą mieć konto rejestracji typu zero-touch. Sprzedawca partnerski konfiguruje konto dla organizacji administratora IT, gdy organizacja kupuje swoje urządzenia.
  • Aby rejestracja typu zero-touch działała prawidłowo, urządzenie musi być zgodne z Usługami mobilnymi Google (GMS), a Usługi Google Play muszą być zawsze włączone.

Wywoływanie interfejsu API

Użytkownicy konsoli (przy użyciu swoich kont Google) autoryzują Twoje żądania do interfejsu API, aby do interfejsu API klienta. Ten proces różni się od autoryzacji, którą przeprowadzasz lub inne interfejsy API usług EMM. Aby dowiedzieć się, jak to zrobić w aplikacji, przeczytaj artykuł Autoryzacja.

Zaakceptuj Warunki korzystania z usługi

Użytkownicy muszą zaakceptować najnowsze Warunki korzystania z usługi do i wywołać interfejs API. Jeśli wywołanie interfejsu API zwraca kod stanu HTTP 403 Forbidden i treść odpowiedzi zawiera TosError, prośba do użytkownika o zaakceptowanie z Warunków korzystania z usługi, logując się w portalu rejestracji typu zero-touch. Przykład poniżej pokazuje jeden ze sposobów:

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)

Jeśli klient interfejsu API Google obsługuje błędy szczegółowe (Java, Python lub HTTP żądania), dołącz nagłówek HTTP X-GOOG-API-FORMAT-VERSION z wartością 2 w Twoich żądaniach. Jeśli klient nie obsługuje szczegółowych błędów (.NET i inne), pasują do komunikatu o błędzie.

Jeśli w przyszłości zaktualizujemy Warunki korzystania z usługi, Twoja aplikacja będzie kierować użytkownika do ponownego zaakceptowania nowych Warunków.

Administratorzy IT mogą korzystać z portalu rejestracji typu zero-touch do zarządzania użytkownikami organizacji – nie można oferować tej funkcji za pomocą interfejsu API klienta. Administratorzy IT mogą też zarządzać urządzeniami i konfiguracjami za pomocą portalu. Jeśli chcesz połączyć portalu w konsoli lub w dokumentacji, użyj tego adresu URL:

https://partner.android.com/zerotouch

Możesz poinformować administratorów IT, że są proszeni o zalogowanie się przy użyciu Konto Google.

Rejestrowanie urządzenia

Rejestracja typu zero-touch to mechanizm rejestracji urządzeń, który działa podobnie do rejestracji za pomocą NFC lub kodu QR. Konsola musi obsługiwać urządzenia zarządzane a DPC musi działać w trybie w pełni zarządzanym.

Rejestracja typu zero-touch jest dostępna na obsługiwanych urządzeniach z Androidem 8.0 lub później. Administratorzy IT muszą kupić obsługiwane urządzenia od partnera sprzedawcy. Konsola może śledzić które z urządzeń administratora IT są dostępne do rejestracji typu zero-touch przez Wywołuję: customers.devices.list.

Oto omówienie procesu rejestracji:

  1. Urządzenie sprawdza serwer Google przy pierwszym uruchomieniu (lub po przywróceniu ustawień fabrycznych) w celu rejestracji typu zero-touch.
  2. Jeśli administrator IT zastosował konfigurację na urządzeniu, rejestracja bezdotykowa uruchamia kreatora konfiguracji Androida na urządzeniu w pełni zarządzanym i personalizuje ekrany za pomocą metadanych z konfiguracji.
  3. Rejestracja typu zero-touch umożliwia pobieranie i instalowanie modelu DPC z Google Play.
  4. DPC otrzymuje ACTION_PROVISION_MANAGED_DEVICE udostępnia urządzenie.

Jeśli nie masz połączenia z internetem, kontrola zachodzi, gdy połączenie zostanie i dostępności informacji. Aby dowiedzieć się więcej o obsłudze administracyjnej urządzeń w ramach rejestracji typu zero-touch, zapoznaj się z sekcją Obsługa administracyjna poniżej.

Konfiguracje domyślne

Rejestracja typu zero-touch najczęściej pomaga administratorom IT w przypadku ustawienia domyślnej konfiguracji na wszystkich nowych urządzeniach zakupionych przez organizację. Zmień ustawienie domyślną konfigurację w konsoli, jeśli nie została określona. Informacje na temat wartość z customers.configurations.isDefault do jak sprawdzić, czy organizacja ustawiła konfigurację domyślną.

Poniższy przykład pokazuje, jak można wykorzystać istniejącą konfigurację jako domyślnie:

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

Tworzenie odwołania do DPC

Zalecamy użycie nazwy zasobu API customers.dpcs.name do identyfikacji DPC i używania go w konfiguracjach. Nazwa zasobu zawiera unikalny i niezmienny identyfikator DPC. Zadzwoń do nas customers.dpcs.list, aby pobrać listę wszystkich obsługiwanych elementów. DPC. Nazwa zasobu zawiera też identyfikator klienta, więc odfiltruj listę za pomocą ostatniego komponentu ścieżki, aby znaleźć pasującą instancję Dpc. Przykład poniżej pokazuje, jak dopasować DPC i zachować do niego później Konfiguracja:

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

Jeśli musisz wyświetlić nazwę DPC w interfejsie konsoli, wyświetl wartość zwracaną przez funkcję customers.dpcs.dpcName.

Udostępniam

Skorzystaj z okazji, aby zapewnić użytkownikom wygodę obsługi administracyjnej urządzeń. Do obsługi administracyjnej urządzenia wystarczy nazwa użytkownika i hasło. Pamiętaj, że sprzedawcy mogą wysyłać urządzenia bezpośrednio do użytkowników zdalnych. Uwzględnij wszystkie inne ustawienia, takie jak serwer EMM czy jednostka organizacyjna, w customers.configuration.dpcExtras.

Fragment kodu JSON poniżej zawiera część przykładowej konfiguracji:

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

Rejestracja typu zero-touch instaluje i uruchamia DPC przy użyciu intencji Androida. System wysyła wartości w kolumnie android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE właściwość JSON na platformie DPC jako dodatki. DPC może odczytać ustawienia obsługi z PersistableBundle, używając tych samych kluczy.

Zalecane – użyj tych dodatków do intencji aby skonfigurować DPC:

Niezalecane – nie uwzględniaj: z innych metod rejestracji:

Aby dowiedzieć się, jak wyodrębnić i używać tych ustawień w DPC, przeczytaj sekcję Udostępnianie urządzeń klientów.

Programowanie i testowanie

Aby utworzyć i przetestować funkcje rejestracji typu zero-touch w konsoli, musisz: następujące:

  • obsługiwane urządzenie
  • konto klienta do rejestracji typu zero-touch.

Programuj i testuj na urządzeniach obsługujących rejestrację typu zero-touch. rejestracji użytkowników, takich jak Google Pixel. Nie musisz możesz kupić urządzenia przeznaczone do programowania u partnera sprzedażowego.

Skontaktuj się z nami, aby uzyskać testowe konto klienta i uzyskać dostęp do portalu rejestracji typu zero-touch. Wyślij do nas e-maila ze swojego firmowego adresu e-mail powiązane z Google Konto. Podaj producenta i numer IMEI 1 lub 2 urządzeń, a dodamy je do projektu. koncie.

Pamiętaj, że ponieważ rejestracja typu zero-touch automatycznie pobiera i instaluje DPC, Twój DPC musi być dostępny w Google Play, aby można było przeprowadzać testy i udostępnianie danych. Nie możesz przeprowadzać testów z użyciem wersji deweloperskiej DPC.

Pomoc dla administratorów IT

Jeśli chcesz pomóc administratorom IT w obsłudze interfejsu konsoli lub dokumentacji, Wskazówki znajdziesz w artykule Rejestracja typu zero-touch dla administratorów IT. Ty możesz też skierować użytkowników konsoli do tego artykułu w Centrum pomocy.

Więcej informacji

Zapoznaj się z tymi dokumentami, aby zintegrować rejestrację typu zero-touch w konsola: