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

  • EnvironmentClientFactory kullanarak bir EnvironmentClient oluşturun 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 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.

Ö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

İ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:

  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 (KB) için üçüncü taraf Android mobil cihaz yönetimini açıkça etkinleştirmiş olmalıdır.
  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şlatın: 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, özel DPC'yi kayıt sonucu hakkında 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 ç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:

  1. Uygunluğu yeniden değerlendirin: Cihazın, EMM tarafından belirlenen tüm politikaları karşılayıp karşılamadığını kontrol edin.
  2. İşlem yapın:

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

  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 AccountSetupListener ve getAccountSetupListener() 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.
                }
            }
        }
    }
    
    
  4. Genişletilmiş NotificationReceiverService sı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.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. PrepareEnvironment sonucunu bekleme: Ö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ımdaki sürümden daha yüksek olmalıdır.

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

  1. Test grubu oluşturma: EMM, enterprises.generateSignupUrl ile test EMM'sine bağlı bir test alanı Google grubu oluşturur.
  2. 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.
  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 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.
  6. Kullanıcının kimliğini doğrulayın: Özel DPC, etkinliği başlatmak için launchAuthenticationActivity iş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ı).
  7. 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:

  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.