Kullanıcı hesaplarını uygulama

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

Eskiden standart olarak Managed Google Play hesapları kullanılırdı. Ancak Google artık tüm yeni geliştirmelerde, varsayılan olarak Managed Google Hesabı 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şlemleri yönetmede merkezi bir rol üstleniyor. 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 cihaz uyumlu hale geldiğinde erişimi etkinleştirmede EMM ö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.

  • EnvironmentClientFactory kullanarak bir EnvironmentClient örneklendirin ve prepareEnvironment veya prepareEnvironmentAsync öğesini çağırın

    val 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 süreci arka planda mümkün olduğunca erken başlatmanızı ve kullanıcı beklerken uygun kullanıcı arayüzünü göstermenizi ö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 Managed Google Play hesabı oluşturulur ve cihaza eklenir. Bu durumda Google, söz konusu hesabın userId değerini döndürür.

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.

Ancak Google, değişikliği en aza indirmek için jetonun isteğe bağlı olarak oluşturulmasını ve Managed Google Play Hesapları için mevcut API'nin yeni API ile değiştirilmesini önerir.

Önceki API'lerle tipik DPC entegrasyonu
Şekil 1. Önceki API'lerle tipik DPC entegrasyonu
Kullanıcısız cihazlar için yeni API'lerle örnek DPC entegrasyonu
Şekil 2. Kullanıcısız cihazlar için yeni API'lerle örnek DPC entegrasyonu
Kullanıcı cihazları için yeni API'lerle örnek DPC entegrasyonu
Şekil 3. Kullanıcı cihazları için yeni API'lerle DPC entegrasyonu örneği

Geliş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 durumda, Google Play de dahil olmak üzere Google hizmetlerine erişim başlangıçta kısıtlanır.

Bu varsayılan "devre dışı" durumu ve EMM'nin cihazı uyumlu olarak işaretlemesi (ör. Devices.SetState'i çağırarak) için gereken sonraki koşul, özellikle şu durumlarda geçerlidir:

  1. Kuruluş, alanının sahipliğini Google ile doğruladı.
  2. BT yöneticisi, Google Yönetici Konsolu'nda kullanıcının belirli kuruluş birimi (OU) için üçüncü taraf Android mobil cihaz yönetimini açıkça etkinleştirmiştir.
  1. Kayıt jetonu oluşturma: EMM, Play EMM API'yi kullanarak kayıt jetonu oluşturur.
  2. Ortamı Hazırlama: Özel DPC, cihazın kayda hazır olduğunu doğrulamak için Ortamı Hazırlama akışını kullanır.
  3. Kaydı Başlatma: Özel DPC, kayıt jetonunu ileterek AMAPI SDK'sında startAccountSetup API'sini çağırır. Not: Bu API'yi çağırmadan önce DPC'nin cihaz sahibi veya profil sahibi olması gerekir.
  4. Google kimlik doğrulama etkinliğini başlatma: Gerekirse özel DPC, AMAPI SDK'sında launchAuthenticationActivity API'sini çağırarak AccountSetupAttempt değ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çenek googleAuthenticationOptions kullanılarak yapılandırılabilir.
  5. Kaydı Tamamlama: AMAPI SDK, kaydın sonucu hakkında özel DPC'yi bilgilendirir.
  6. Google hizmetlerini etkinleştirme: Özel DPC, cihazı tamamen sağladıktan ve tüm kurumsal politikalara uygun olduğunu onayladıktan sonra EMM sunucusu, accountState parametresi "enabled" olarak ayarlanmış şekilde Devices.setState() işlevini çağırmalıdır.

    • Neden önemlidir? Bu API çağrısı, cihazı uyumlu olarak işaretler.
    • Aramamanın sonucu: Bu Devices.setState(setStateRequest) araması 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, uygunluk durumuna göre cihazın 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), com.google.android.gms.auth.BAD_DEVICE_MANAGEMENT işlemiyle bir Intent yayınlar. Bu durumun oluşmasının birkaç nedeni vardır:

  • 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 tarafından henüz yeniden etkinleştirilmedi.
  • 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:

  1. Uygunluğu Yeniden Değerlendirme: Cihazın şu anda EMM tarafından belirlenen tüm politikalara uyup uymadığını kontrol edin.
  2. İşlem yapın:
    • Uygunsa: DPC, EMM sunucusunu bilgilendirmelidir. EMM sunucusu, hizmet erişimini geri yüklemeyi denemek için belirli kullanıcı kimliği ve cihaz kimliği için accountState değerini "enabled" olarak ayarlayarak Devices.setState() işlevini çağırmalıdır.
    • Uyumlu Değilse: Sorunlar çözülüp cihaz uyumlu hale geldiğinde EMM, Devices.setState() işlevini çağırmalıdır.

Bu mekanizma, bir 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ı bozmaz ancak bazen cihazlarda Google hizmetine 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. Genel olarak, devralma işleminden sonraki tüm cihazlar için proaktif görüşme yapılması gerekmez ancak bu, erişim sorunlarını çözmek için önemli bir araçtır.

Hesap kurulumu - örnek kod

  1. Arama uygulaması, hesap kurulumu girişimini başlatmak için AccountSetupClient kullanabilir ve startAccountSetup() veya startAccountSetupFuture() 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
    }
    
  2. AccountSetupListener arayüzünü uygulayın ve alınan durum güncellemelerinin nasıl işleneceğine dair bir uygulama sağlayın.

  3. NotificationReceiverService uzatın ve getAccountSetupListener() geçersiz kılınarak 2. adımda oluşturulan AccountSetupListener örneğini 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.
                }
            }
        }
    }
    
    
  4. Genişletilmiş NotificationReceiverService sınıfını AndroidManifest.xml'ye 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.xml iç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

  1. Cihazın Mevcut Durumunu Alma: EMM,

    adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionName
    

    Cihazda bulunan Android Device Policy sürümünü almak için. Android Device Policy yüklü değilse boş bir çıktı beklenir.

  2. PrepareEnvironment'ı entegre edin: Özel DPC, AMAPI SDK'sında prepareEnvironment API'sini çağırarak doğru isteği iletir.

  3. Await PrepareEnvironment result: Özel DPC, prepareEnvironment işleminin tamamlanmasını bekler.

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

    Bu kez Android Device Policy sürümü, 1. adımda belirtilen sürümden daha yüksek olmalıdır.

Google Hesabı kimlik doğrulamasını test etme

  1. Test kuruluşu oluşturma: EMM, enterprises.generateSignupUrl ile test EMM'sine bağlı bir test alanı Google kuruluşu oluşturur.
  2. Google kimlik doğrulamasını etkinleştirme: EMM, Google Yönetici Konsolu'nda bu talimatları uygulayarak test kuruluşu için Google kimlik doğrulamasını etkinleştirir.
  3. Kayıt jetonu oluşturma: EMM, türü userDevice olan Play EMM API'yi kullanarak bir kayıt jetonu oluşturur.
  4. Kaydı Başlatma: Özel DPC, kayıt jetonunu ileterek AMAPI SDK'sında startAccountSetup API'sini çağırır.
  5. Başlatma etkinliği gerekir: AMAPI SDK, kullanıcının kimliğini doğrulamak için bir etkinliğin başlatılması gerektiğini özel DPC'ye bildirir.
  6. Kullanıcının kimliğini doğrulayın: Özel DPC, etkinliği başlatmak için launchAuthenticationActivity'i ç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ı).
  7. Kaydı Tamamlama: AMAPI SDK, kaydın sonucu hakkında özel DPC'yi 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. Kaydolma işlemi başarıyla tamamlanır ve cihazda bir hizmet hesabı bulunur (ö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:

  1. Test kuruluşu oluşturun: Bu, daha önce oluşturulan kuruluşla aynı olabilir.
  2. Kayıt jetonu oluşturma: EMM, userlessDevice türünde Play EMM API'yi kullanarak bir kayıt jetonu oluşturur.
  3. Kaydı Başlatma: Özel DPC, kayıt jetonunu ileterek AMAPI SDK'sında startAccountSetup API'sini çağırır.
  4. Kaydı Tamamlama: AMAPI SDK, kaydın sonucu hakkında özel DPC'yi bilgilendirir.