Android Enterprise kayıtları için iki temel kullanıcı kimliği türü vardır: Managed Google Play hesapları ve yönetilen Google Hesapları. Yönetilen Google Play hesapları cihaza yöneliktir. Yani belirli bir kullanıcının Google kimliğine bağlı değildir. Yönetilen Google Hesapları ise kullanıcının kurumsal Google kimliğine bağlanır. Bu sayede, kullanıcıların cihazlarında oturumları açık tutularak kullanıcı deneyimi iyileştirilir.
Managed Google Play hesapları eskiden standart olarak kullanılırdı. Ancak Google artık tüm yeni geliştirmelerde, varsayılan olarak yönetilen Google Hesapları oluşturmaya yönelik iyileştirilmiş kayıt akışının kullanılmasını öneriyor.
Eski uygulama için yönergeler bu belgenin sonunda bağlam bilgisi olarak verilse de tüm yeni geliştirmeler, burada ayrıntılı olarak açıklanan yeni kayıt akışına uygun olmalıdır.
Genel Bakış
Geliştirilmiş cihaz kaydı akışı, çeşitli yeni bileşenlerden yararlanarak ve özel cihaz politikası denetleyicilerinin (DPC'ler) uygulanma şeklini değiştirerek cihaz kurulumunu kolaylaştırır. Bu yeni yaklaşım, cihaz hazırlama ve kullanıcı kaydı işlevlerini gerçekleştirmek için özel DPC çözümlerinin Android Management API (AMAPI) SDK ve Android Device Policy ile entegre olmasını gerektirir.
AMAPI SDK, cihazın kendisinde Android Device Policy ile etkileşim kurmak için gerekli API'leri sağlar. Sunucu tarafında, kurumsal mobilite yönetimi (EMM) çözümleri, cihaz kaydı sürecini başlatmak için gereken kayıt jetonlarını oluşturmak üzere Play EMM API'yi kullanır.
Android Device Policy uygulaması artık cihaz tarafındaki işlemlerin yönetilmesinde merkezi bir rol oynuyor. AMAPI SDK, cihazdaki kurulumunu ve gerekli güncellemeleri yönetmek için kullanılır. Android Device Policy, kullanıcı kimlik doğrulama akışını da devralır. Kullanıcı kimlik doğrulamasını doğrudan işler ve kullanıcının kimliğini EMM'ye sağlar. Google, kullanıcıyı herhangi bir nedenle doğrulayamazsa yeni bir Managed Google Play hesabı oluşturulur ve yedek olarak cihaza eklenir.
Bu yeni kayıt akışının önemli bir parçası, cihazın Google hizmetlerine erişimini yönetmektir. Cihazlar varsayılan olarak kısıtlanmış durumda başlar ve EMM, cihaz uyumlu hale geldiğinde erişimi etkinleştirmede önemli bir rol oynar.
API Entegrasyonu
Başlamadan önce Play EMM API istemcisinin ve AMAPI SDK'sının en son sürümünü kullandığınızı doğrulayın.
Kaydolma uygulama kılavuzu
Bu kılavuzda, kaydı uygulama için gerekli adımlar sağlanmaktadır. Bu kılavuzda ortamı hazırlama, farklı kayıt yöntemlerini kullanma ve cihaz yaşam döngüsünü yönetme konuları ele alınmaktadır.
Ortamı hazırlama
Hesap kurulumunu başlatmadan önce cihaz ortamını hazırlamanız gerekir. Bu hazırlık, Play Store'un en son sürümüne güncellenmesini ve Android Device Policy'nin (com.google.android.apps.work.clouddpc) cihaza sessizce yüklenmesini içerir. Android Device Policy'nin yüklenmesi, Hesap Kurulumu sürecinin kritik bileşenlerini barındırdığı için önemlidir. EMM'lerin manuel ortam hazırlığı yapmasına gerek yoktur. Bunun yerine, EnvironmentClient kullanmalı ve sağlanan kod örneklerine uymalıdır.
Örnek kod
DPC, iş hesabını cihaza eklemek için AccountSetup API'sini kullanmadan önce cihaz ortamının hazır olduğunu doğrulamalıdır.
EnvironmentClientFactorykullanarak birEnvironmentClientoluşturun veprepareEnvironmentveyaprepareEnvironmentAsyncöğesini çağırınval notificationReceiverServiceName = ComponentName(context, NotificationReceiver::class.java) // An EMM should implement android.app.admin.DeviceAdminReceiver and use that // class to instantiate a ComponentName val admin = ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java) EnvironmentClientFactory.create(context) .prepareEnvironment( PrepareEnvironmentRequest.builder() .setRoles( listOf( Role.builder().setRoleType( Role.RoleType.DEVICE_POLICY_CONTROLLER ).build() ) ) .setAdmin(admin) .build(), notificationReceiverServiceName, ) [Proceed with AccountSetup]
Uygulamalar, uygun bir çalışma ortamını doğrulamak için yüklenebileceğinden veya güncellenebileceğinden bu işlem birkaç saniye ya da dakika sürebilir. Google, bu işlemin arka planda mümkün olduğunca erken başlatılmasını ve kullanıcı beklerken uygun kullanıcı arayüzünün gösterilmesini önerir. İşlem tamamlandığında cihaz, DPC'nin AccountSetup API'yi kullanmasına hazır olur.
Kayıt akışı
EMM'ler, tüm cihazlar için users.generateAuthenticationToken() ve users.insert() kullanımını durdurmalıdır. Bunun yerine, EMM'lerin son kullanıcı kimlik doğrulaması yapmak için cihaz üzerinde API'yi çağırması gerekir. Yeni API, userId ve email değerlerini DPC'ye döndürür. Google, kullanıcının kimliğini doğrulayamazsa cihazda bir Managed Google Play hesabı oluşturulur ve cihaza eklenir. Bu durumda Google, söz konusu hesabın userId değerini iade eder.
Google artık kayıt jetonlarının kullanımını sunuyor. Bu jetonlar, kimlik doğrulama API'sine iletilmelidir. EMM'ler jetonun ne zaman ve nasıl oluşturulacağını belirler.Jeton, mevcut bir kayıt yükünün (ör. QR kodu veya Zero-touch yapılandırması) parçası olabilir.
Mevcut kayıt jetonları için muafiyet
Bazı müşteriler, tekrarlanan kayıt işlemleri gerçekleştirmek için uzun son kullanma tarihli kayıt jetonları kullanır. Mevcut iş akışlarının kesintiye uğramaması için "Google ile kimlik doğrulama" şartı ilk kez etkinleştirilmeden ÖNCE oluşturulan tüm jetonlar yeni giriş istemlerinden muaftır. Bu eski jetonlar, daha önce olduğu gibi çalışmaya devam edecek ve kullanıcıların Google kimlik doğrulama sürecinden geçmeden cihaz kaydetmesine olanak tanıyacak. Ancak, Google kimlik doğrulama şartı ilk kez etkinleştirildikten SONRA oluşturulan tüm jetonlar yeni kimlik doğrulama kurallarına uyar. Bu, bu yeni jetonları kullanan cihazların, BT yöneticisi tarafından seçilen ayarlara göre kullanıcıların kimlik doğrulaması yapmasını gerektireceği anlamına gelir.
Google, değişikliği en aza indirmek için jetonun isteğe bağlı olarak oluşturulmasını ve Yönetilen Google Play Hesapları için mevcut API'nin yeni API ile değiştirilmesini önerir.
İyileştirilmiş özel DPC kaydı iş akışı aşağıdaki adımları içerir:
Önemli İlk Cihaz Durumu: Özel bir DPC ile cihaz kaydettirirken cihaza eklenen Google Hesabı devre dışı durumda başlar. Bu, Google Play de dahil olmak üzere Google hizmetlerine erişimin başlangıçta kısıtlandığı anlamına gelir.
Bu varsayılan "devre dışı" durumu ve EMM'nin cihazı uyumlu olarak işaretlemesiyle ilgili sonraki koşul (ör. Devices.SetState çağrısı yaparak) özellikle şu koşullarda geçerlidir:
- Kuruluş, alanının sahipliğini Google ile doğruladı.
- BT yöneticisi, Google Yönetici Konsolu'nda kullanıcının belirli kuruluş birimi (KB) için üçüncü taraf Android mobil cihaz yönetimini açıkça etkinleştirmiş olmalıdır.
- Kayıt jetonu oluşturma: EMM, Play EMM API'yi kullanarak kayıt jetonu oluşturur.
- Ortamı Hazırlama: Özel DPC, cihazın kayda hazır olduğunu doğrulamak için Ortamı Hazırlama akışını kullanır.
- Kaydı Başlatma: Özel DPC, kayıt jetonunu ileterek AMAPI SDK'sında
startAccountSetupAPI'sini çağırır. Not: Bu API'yi çağırmadan önce DPC'nin cihaz sahibi veya profil sahibi olması gerekir. - Google kimlik doğrulama etkinliğini başlatın: Gerekirse özel DPC, AMAPI SDK'sında
launchAuthenticationActivityAPI'sini çağırarakAccountSetupAttemptdeğerini iletir. Bu işlem, Google kimlik doğrulama etkinliğini başlatır ve başarılı kimlik doğrulamanın ardından kullanıcıyı özel DPC'ye geri yönlendirir. Kullanıcı bu işlemi atlayabilir. Bu durumda, cihaza Managed Google Play hesabı eklenir. Bu seçenekgoogleAuthenticationOptionskullanılarak yapılandırılabilir. - Kaydı Tamamlama: AMAPI SDK, özel DPC'yi kayıt sonucu hakkında bilgilendirir.
- Google hizmetlerini etkinleştirme: Özel DPC, cihazı tamamen sağladıktan ve tüm kurumsal politikalara uygun olduğunu onayladıktan sonra EMM sunucusu,
accountStateparametresi"enabled"olarak ayarlanmış şekildeDevices.setState()'i çağırmalıdır.
- Neden önemlidir? Bu API çağrısı, cihazı uyumlu olarak işaretler.
- Aramamanın sonucu: Bu
Devices.setState(setStateRequest)arama yapılmadığı takdirde hesap "devre dışı" durumunda kalır. Kullanıcı, Google Play'e (uygulamaları yüklemek veya güncellemek için) ve hesap kimlik doğrulaması gerektiren diğer Google hizmetlerine erişemez.
Cihaz durumunu ve hizmet erişimini yönetme
İlk kayıttan sonra EMM, cihazın uygunluk durumuna göre Google hizmetlerine erişimini sağlamaktan sorumludur.
Hizmet Aksaklıklarını Ele Alma: BAD_DEVICE_MANAGEMENT
Bir cihazın Google hizmetlerine erişimi engellenirse Google Play Hizmetleri (GMSCore) şu işleme sahip bir Intent yayınlar:
com.google.android.gms.auth.BAD_DEVICE_MANAGEMENT. Bu durumun birkaç nedeni olabilir:
- EMM, ilk cihaz kaydından sonra hiçbir zaman Devices.setState("enabled") işlevini çağırmadı.
- Cihaz artık EMM politikalarına uymuyor ve EMM henüz cihazı yeniden etkinleştirmedi.
- EMM, accountState "disabled" olarak ayarlanmışken Devices.setState() işlevini çağırarak cihaz durumunu açıkça "devre dışı" olarak ayarladı. Bu durum, güvenlik endişeleri, idari işlemler veya başka nedenlerden kaynaklanabilir.
Bu amaç, "ThirdPartyDeviceManagementRequired" gibi bir durum kodu içerir.
Özel DPC'ler, bu BAD_DEVICE_MANAGEMENT amacını dinlemek için BroadcastReceiver uygulamalıdır.
Bu yayını aldıktan sonra DPC şunları yapmalıdır:
- Uygunluğu yeniden değerlendirin: Cihazın, EMM tarafından belirlenen tüm politikaları karşılayıp karşılamadığını kontrol edin.
- İşlem yapın:
- Uygunsa: DPC, EMM sunucusunu bilgilendirmelidir. EMM sunucusu daha sonra hizmet erişimini geri yüklemeyi denemek için
Devices.setState()işlevini belirli kullanıcı kimliği ve cihaz kimliği içinaccountStateparametresi"enabled"olarak ayarlanmış şekilde çağırmalıdır. - Uygun Değilse: Sorunlar çözülüp cihaz uygun hale geldiğinde EMM,
Devices.setState()işlevini çağırmalıdır.
- Uygunsa: DPC, EMM sunucusunu bilgilendirmelidir. EMM sunucusu daha sonra hizmet erişimini geri yüklemeyi denemek için
Bu mekanizma, cihazın Google hizmetlerine erişimini kaybettiği durumların tespit edilmesini ve bu durumlardan kurtulmayı sağlar.
Enterprise Takeover ile İlgili Dikkat Edilmesi Gerekenler
Kuruluşun hesap türünde (ör. ManagedGoogleDomainType.TYPE_TEAM'dan ManagedGoogleDomainType.TYPE_DOMAIN'ye) değişiklikler olabilir. Bu işlem genellikle EMM bağlamasını bozmasa da bazen cihazlarda Google hizmetlerine erişimi kesintiye uğratabilir.
EMM'ler, kullanıcılar bilinen bir devralma etkinliğinden sonra hizmet erişimi sorunları bildirirse cihaz EMM politikalarına uygun görünse bile cihazın durumunu yeni müşteri yapısı altında Google'ın arka uçlarıyla yeniden senkronize etmek için Devices.setState() ile iletişime geçmenin gerekebileceğini unutmamalıdır. Devralma işleminden sonraki tüm cihazlar için proaktif görüşme yapılması genellikle gerekli değildir ancak erişim sorunlarını çözmek için önemli bir araçtır.
Hesap kurulumu - örnek kod
Arama uygulaması, hesap kurulumu girişimini başlatmak için
AccountSetupClientkullanabilir vestartAccountSetup()veyastartAccountSetupFuture()yöntemini çağırabilir. Uygulama örneği için aşağıdaki kod örneğine bakın:// Create AccountSetupClient val client = AccountSetupClientFactory.create( this, activityResultRegistry ) lifecycle.addObserver(client.lifecycleObserver) // Create adminComponent val notificationReceiver = ComponentName(this, AccountSetupNotificationReceiver::class.java) // Helper method to get enrollment token created with Play EMM API val enrollmentToken = getEnrollmentToken() val request = StartAccountSetupRequest.builder() .setEnrollmentToken(enteredText) .setNotificationReceiverServiceComponentName(notificationReceiver) .setAdminComponentName( ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java)) .build() try { val accountSetupAttempt = client.startAccountSetup(request) // handle attempt } catch (e: Exception) { // handle exception }AccountSetupListenerarayüzünü uygulayın ve alınan durum güncellemelerinin nasıl işleneceğine dair bir uygulama sağlayın.NotificationReceiverServiceuzatınAccountSetupListenervegetAccountSetupListener()geçersiz kılınarak 2. adımda oluşturulan örneği sağlayın.// Handles account setup changes class AccountSetupNotificationReceiver : NotificationReceiverService(), AccountSetupListener { override fun getAccountSetupListener(): AccountSetupListener = this override fun onAccountSetupChanged(accountSetupAttempt: AccountSetupAttempt) { when (accountSetupAttempt.state.kind) { StateCase.ADDED_ACCOUNT -> { val enterpriseAccount = state.addedAccount() val userId = enterpriseAccount.userId val deviceId = enterpriseAccount.deviceId // Handle account added state. // IMPORTANT: The device/account is now added but *DISABLED* // for Google services. Your EMM backend MUST be notified to // perform policy compliance checks and then call Devices.setState() // to activate Google Play and other services. } StateCase.AUTHENTICATION_ACTIVITY_LAUNCH_REQUIRED -> { val request = LaunchAuthenticationActivityRequest.builder() .setAccountSetupAttempt(accountSetupAttempt) .build(); // Send the attempt to the foreground activity to call: accountSetupClient.launchAuthenticationActivity(request) } StateCase.ACCOUNT_SETUP_ERROR -> { // Handle error state. val failureReason = state.accountSetupError().failureReason } else -> { // Handle unknown account setup attempt state. } } } }Genişletilmiş
NotificationReceiverServicesınıfınıAndroidManifest.xml'nıza ekleyin ve dışa aktarıldığını doğrulayın.<application> <service android:name = ".accountsetup.AccountSetupNotificationReceiver" android:exported = "true" /> </application>Uygulamanız SDK 30 veya sonraki sürümleri hedefliyorsa ADP ile etkileşimde bulunacağını belirtmek için
AndroidManifest.xmliçinde bir sorgu öğesi gerekir.<queries> <package android:name="com.google.android.apps.work.clouddpc" /> </queries>
Test yönergeleri
Bu bölümde, uygulamanızı test etmeyle ilgili bir dizi yönerge ve en iyi uygulama yer almaktadır.
Test PrepareEnvironment
Cihazın Mevcut Durumunu Alma: EMM,
adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionNameCihazda bulunan Android Device Policy sürümünü almak için. Android Device Policy yüklü değilse boş bir çıktı beklenir.
PrepareEnvironment'ı entegre edin: Özel DPC, AMAPI SDK'sında
prepareEnvironmentAPI'sini çağırarak doğru isteği iletir.PrepareEnvironment sonucunu bekleme: Özel DPC,
prepareEnvironmentişleminin tamamlanmasını bekler.PrepareEnvironment'ın başarıyla tamamlandığını onaylayın: Tamamlandığında EMM tekrar çalışır.
adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionNameBu kez Android Device Policy sürümü, 1. adımdaki sürümden daha yüksek olmalıdır.
Google Hesabı kimlik doğrulamasını test etme
- Test grubu oluşturma: EMM,
enterprises.generateSignupUrlile test EMM'sine bağlı bir test alanı Google grubu oluşturur. - Google kimlik doğrulamasını etkinleştirme: EMM, Google Yönetici Konsolu'nda bu talimatları uygulayarak test işletmesi için Google kimlik doğrulamasını etkinleştirir.
- Kayıt jetonu oluşturma: EMM, türü userDevice olan Play EMM API'yi kullanarak bir kayıt jetonu oluşturur.
- Kaydı Başlatma: Özel DPC, kayıt jetonunu ileterek AMAPI SDK'sında
startAccountSetupAPI'sini çağırır. - Başlatma etkinliği gerekli: AMAPI SDK, kullanıcının kimliğini doğrulamak için bir etkinliğin başlatılması gerektiğini özel DPC'ye bildirir.
- Kullanıcının kimliğini doğrulayın: Özel DPC, etkinliği başlatmak için
launchAuthenticationActivityişlevini çağırır. Kullanıcı, yönetilen bir Google Hesabı ile kimliğini doğrular (1. adımda oluşturulan kuruluşun bir parçası). - Kaydı Tamamlama: AMAPI SDK, özel DPC'yi kayıt sonucu hakkında bilgilendirir.
Google kimlik doğrulamasını atlamayı test etme
Daha önce açıklanan kurulumu kullanacağız.
Bu kez, 7. adımda kullanıcı Google Hesabı ile kimlik doğrulamak yerine Atla'ya basar. Kayıt işlemi, cihazda bir hizmet hesabı ile başarıyla tamamlanır (ör. AuthenticationType anonimdir).
Kullanıcısız cihazları test etme
Geliştirilmiş özel DPC kaydı akışı, Google kimlik doğrulaması devre dışı bırakıldığında aşağıdaki adımları kullanır:
- Test kuruluşu oluşturun: Bu, daha önce oluşturulan kuruluşla aynı olabilir.
- Kayıt jetonu oluşturma: EMM, userlessDevice türünde Play EMM API'yi kullanarak bir kayıt jetonu oluşturur.
- Kaydı Başlatma: Özel DPC, kayıt jetonunu ileterek AMAPI SDK'sında
startAccountSetupAPI'sini çağırır. - Kaydı Tamamlama: AMAPI SDK, kaydın sonucu hakkında özel DPC'yi bilgilendirir.