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.
Link do portalu
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:
- Urządzenie sprawdza serwer Google przy pierwszym uruchomieniu (lub po przywróceniu ustawień fabrycznych) w celu rejestracji typu zero-touch.
- 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.
- Rejestracja typu zero-touch umożliwia pobieranie i instalowanie modelu DPC z Google Play.
- 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:
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
EXTRA_PROVISIONING_LOCALE
EXTRA_PROVISIONING_TIME_ZONE
EXTRA_PROVISIONING_LOCAL_TIME
EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED
EXTRA_PROVISIONING_MAIN_COLOR
EXTRA_PROVISIONING_DISCLAIMERS
Niezalecane – nie uwzględniaj: z innych metod rejestracji:
EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION
EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
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:
- Rejestracja typu zero-touch dla administratorów IT w Android Enterprise Pomoc.
- Obsługa administracyjna urządzeń klientów przy użyciu usług EMM na urządzeniach z Androidem Witryna dla deweloperów.