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 w konsoli. Oto niektóre zadania, które administrator IT może wykonywać w konsoli:

  • tworzyć, edytować i usuwać konfiguracje 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.
  • Stosowanie poszczególnych konfiguracji na urządzeniach lub usuwanie ich z rejestracji typu zero-touch rejestracji.

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:

  • Twoje rozwiązanie EMM wymaga udostępnienia należącego do firmy Androida 8.0 lub nowszego (Pixel 7.1 lub nowszy) urządzenie w trybie pełnego zarządzania. 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 DPC, DPC musi być dostępne w Google Play. Mamy listę zgodnych platform DPC które administratorzy IT mogą skonfigurować za pomocą interfejsu API klienta 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.
  • Urządzenie musi być zgodne z Usługami mobilnymi Google (GMS). i Usługi Google Play muszą być cały czas włączone w przypadku rejestracji typu zero-touch. aby działać prawidłowo.

Wywoływanie interfejsu API

Użytkownicy konsoli (przy użyciu swoich kont Google) autoryzują Twoje żądania do interfejsu API 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, jak to zrobić:

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.

Gdy w przyszłości zaktualizujemy Warunki korzystania z usługi, prosi użytkownika o ponowne zaakceptowanie nowych Warunków korzystania z usługi.

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ż i zarządzać urządzeniami oraz konfiguracjami w 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 rejestrowania urządzeń. Działa on podobnie do komunikacji NFC lub rejestracji przy użyciu 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 zgłasza się do serwera Google przy pierwszym uruchomieniu (lub po konfiguracji fabrycznej). resetowania).
  2. Jeśli administrator zastosował na urządzeniu konfigurację, rejestracja typu zero-touch uruchamia w pełni zarządzane urządzenie z kreatorem konfiguracji Androida i personalizuje z metadanymi pochodzącymi 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 wszystkich innych ustawień, takich jak serwer EMM lub 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 odczytywać ustawienia obsługi administracyjnej z PersistableBundle przy użyciu 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: