Bu kılavuz, kurumsal mobilite yönetimi (EMM) sağlayıcılarının konsollarına el değmeden kayıt özelliğini entegre etmelerine yardımcı olur. Kayıt hakkında daha fazla bilgi edinmek ve DPC'nizin (cihaz politikası denetleyici) cihazların temel hazırlığını yapmasına yardımcı olacak en iyi uygulama önerilerini görmek için okumaya devam edin. DPC'niz varsa cihazların temel hazırlığını yapmayla ilgili en iyi uygulamaları öğrenecek, geliştirme ve test konusunda yardım almak için öneriler alacaksınız.
BT yöneticileri için özellikler
BT yöneticilerinin doğrudan konsolunuzdan el değmeden kayıt ayarlarını yapmalarına yardımcı olmak için müşteri API'sini kullanın. Bir BT yöneticisinin konsolunuzda tamamlayabileceği bazı görevler şunlardır:
- Mobil politikalarınıza göre el değmeden kayıt yapılandırmaları oluşturun, düzenleyin ve silin.
- DPC'nizin kuruluşun satın alacağı cihazların temel hazırlığını yapmak için varsayılan bir yapılandırma belirleyin.
- Cihazlara ayrı yapılandırmalar uygulayın veya cihazları el değmeden kayıttan kaldırın.
El değmeden kayıt hakkında daha fazla bilgi edinmek için genel bakış sayfasını okuyun.
Ö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 veya sonraki sürüm (Pixel 7.1+) cihazın tümüyle yönetilen modda temel hazırlığını yapması gerekiyor. Şirkete ait Android 10 ve sonraki sürümleri çalıştıran cihazlar tümüyle yönetilen olarak veya bir iş profiliyle sağlanabilir.
- El değmeden kayıt özelliği DPC'yi otomatik olarak indirip yüklediği için DPC'niz Google Play'den edinilebilir olmalıdır. BT yöneticilerinin müşteri API'sini veya portalı kullanarak yapılandırabileceği uyumlu DPC'lerin listesini sunuyoruz. DPC'nizi listeye eklemek için EMM Sağlayıcı topluluğu aracılığıyla 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 hesapları olmalıdır. İş ortağı bayi, kuruluş cihazlarını satın aldığında BT yöneticisinin kuruluşu için hesap oluşturur.
- Cihazın Google Mobil Hizmetleri (GMS) ile uyumlu olması ve el değmeden kayıt özelliğinin doğru şekilde çalışması için Google Play hizmetlerinin her zaman etkin olması gerekir.
API'yi çağırma
Konsolunuzun kullanıcıları (Google Hesaplarını kullanarak), API isteklerinizi müşteri API'sine 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 bölümünü okuyun.
Hizmet Şartları'nı işleme
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ür ve yanıt gövdesinde bir TosError
varsa kullanıcıdan el değmeden kayıt portalında oturum açarak Hizmet Şartları'nı kabul etmesini isteyin. Aşağıdaki örnekte bunu yapmanın yollarından 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://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)
Google API istemciniz ayrıntılı hataları (Java, Python veya HTTP istekleri) destekliyorsa isteklerinize 2
değeriyle X-GOOG-API-FORMAT-VERSION
HTTP başlığını ekleyin. İstemciniz ayrıntılı hataları (.NET ve diğerleri) desteklemiyorsa hata mesajıyla eşleştirin.
İleride Hizmet Şartları'nı güncellediğimizde, bu yaklaşımı izlerseniz uygulamanız kullanıcıyı yeni Hizmet Şartları'nı yeniden kabul etmeye yönlendirir.
Portal bağlantısı
BT yöneticileri, kuruluşlarının kullanıcılarını yönetmek için el değmeden kayıt portalını kullanır. Bunu müşteri API'si aracılığıyla sunamazsınız. BT yöneticileri, portalı kullanarak cihaz ve yapılandırmaları da yönetebilir. Konsolunuzdan veya belgelerinizden portala bağlantı oluşturmanız gerekiyorsa şu URL'yi kullanın:
https://partner.android.com/zerotouch
BT yöneticilerini, Google Hesaplarıyla oturum açmalarının istendiği konusunda bilgilendirmek isteyebilirsiniz.
Cihaz kaydı
El değmeden kayıt, cihazları kaydettirmek için kullanılan bir mekanizmadır ve NFC kaydı veya QR kodu ile kayıt gibidir. 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ümleri çalıştıran, desteklenen cihazlarda kullanılabilir. BT yöneticileri, desteklenen cihazları bir iş ortağı bayisinden satın almalıdır. Konsolunuz, customers.devices.list
numarasını arayarak hangi BT yöneticisinin el değmeden kayıt için uygun olduğunu izleyebilir.
Kayıt sürecinin işleyişi aşağıdaki gibi özetlenebilir:
- Bir cihaz el değmeden kayıt için ilk başlatma sırasında (veya fabrika ayarlarına sıfırlandıktan sonra) bir Google sunucusuna bağlanır.
- BT yöneticisi cihaza bir yapılandırma uyguladıysa el değmeden kayıt, tümüyle yönetilen cihaz Android kurulum sihirbazını çalıştırır ve yapılandırmadaki meta verilerle ekranları kişiselleştirir.
- El değmeden kayıt özelliği, DPC'nizi Google Play'den indirip yükler.
- DPC'niz
ACTION_PROVISION_MANAGED_DEVICE
amacını alır ve cihazın temel hazırlığını yapar.
İnternet bağlantısı yoksa kontrol, bağlantı kurulduğunda yapılır. El değmeden kayıt ile cihaz temel hazırlığı hakkında daha fazla bilgi edinmek için aşağıdaki Temel hazırlık bölümüne bakın.
Varsayılan yapılandırmalar
El değmeden kayıt, BT yöneticilerine kuruluşlarının satın aldığı yeni cihazlara uygulanan varsayılan bir yapılandırma ayarlarken daha çok yardımcı olur. Ayarlanmamışsa konsolunuzdan varsayılan bir yapılandırma
ayarlamayı yükseltin. Bir kuruluşun varsayılan yapılandırma belirleyip belirlemediğini öğrenmek için customers.configurations.isDefault
değerini kontrol edebilirsiniz.
Aşağıdaki örnekte, mevcut bir yapılandırmayı nasıl varsayılan ayarlayabileceğ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 kaynağı adını 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ı aynı zamanda müşteri kimliğini de içerdiğinden, eşleşen bir Dpc
örneği bulmak için son yol bileşenini kullanarak listeyi filtreleyin. Aşağıdaki örnekte, DPC'nizin nasıl eşleştirileceği ve daha sonra yapılandırmada kullanılmak üzere nasıl korunacağı 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
öğesinden döndürülen değeri görüntüleyin.
Temel hazırlık yapılıyor
Cihaz temel hazırlığı için mükemmel bir kullanıcı deneyimi sağlama fırsatını kaçırmayın.
Cihazın temel hazırlığını yapmak için tek gereken bir kullanıcı adı ve şifre olmalıdır.
Bayilerin cihazları doğrudan uzak kullanıcılara gönderebileceğini unutmayın. EMM sunucusu veya kuruluş birimi gibi diğer tüm ayarları customers.configuration.dpcExtras
içine dahil edin.
Aşağıdaki JSON snippet'i, örnek bir yapılandırmanın bir kısmını gösterir:
{
"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, bir 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
üzerindeki temel hazırlık ayarlarını okuyabilir.
Önerilir: DPC'nizi ayarlamak için aşağıdaki intent ekstralarını kullanın:
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
Önerilmez. Diğer kayıt yöntemlerinde kullanabileceğiniz aşağıdaki ekstraları eklemeyin:
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
Bu ayarları DPC'nizde nasıl çıkarıp kullanacağınızı öğrenmek için Müşteri cihazlarının temel hazırlığını yapma bölümünü okuyun.
Geliştirme ve test
Konsolunuzun el değmeden kayıt özelliklerini geliştirip test etmek için aşağıdakilere ihtiyacınız olacaktır:
- desteklenen bir cihaz
- müşteri el değmeden kayıt hesabı
Google Pixel gibi el değmeden kaydı destekleyen cihazları geliştirin ve test edin. Geliştirme cihazlarınızı bir bayi iş ortağından satın almanız gerekmez.
Bir test müşteri hesabı edinmek ve el değmeden kayıt portalına erişmek için bize ulaşın. Bir Google Hesabı ile ilişkilendirilmiş kurumsal e-posta adresinizden bize e-posta gönderin. Bir veya iki cihazın üreticisini ve IMEI numarasını bize bildirirseniz bunları geliştirme hesabınıza ekleriz.
El değmeden kayıt özelliğinin otomatik olarak bir DPC'yi indirip yüklediğinden, temel hazırlığı test edebilmeniz için DPC'nizin Google Play'de mevcut olması gerektiğini unutmayın. DPC'nizin geliştirme sürümüyle test yapamazsınız.
BT yöneticileri için destek
BT yöneticilerine konsolunuzun arayüzünde veya belgelerinizde yardım etmeniz gerekiyorsa yardım almak üzere BT yöneticileri için el değmeden kayıt sayfasına göz atın. Konsolunuzun kullanıcılarını bu yardım merkezi makalesine de yönlendirebilirsiniz.
Daha fazla bilgi
El değmeden kayıt özelliğini konsolunuza entegre etmenize yardımcı olması için şu belgeleri okuyun:
- Android Enterprise Yardım sayfasından BT yöneticileri için el değmeden kayıt sayfasına göz atın.
- Android EMM Geliştiricileri sitesinden müşteri cihazlarının temel hazırlığını yapın.