Cihaz politikası denetleyici oluşturma

Bu kılavuzda, Android Enterprise dağıtımındaki cihazlar için nasıl cihaz politikası denetleyicisi (DPC) geliştirileceği açıklanmaktadır. Daha önce işletme politikası denetleyici olarak bilinen bir DPC uygulaması, cihazlardaki yerel cihaz politikalarını ve sistem uygulamalarını kontrol eder.

DPC'ler hakkında

Android Enterprise dağıtımında bir kuruluş, kullanıcı cihazlarının çeşitli yönleri üzerinde kontrolü elinde tutar. Örneğin, işle ilgili bilgileri kullanıcıların kişisel verilerinden ayırabilir, ortam için onaylanmış uygulamaları önceden yapılandırabilir veya cihaz özelliklerini (ör. kamera) devre dışı bırakabilir.

EMM olarak, müşterilerinizin EMM konsolunuz ve sunucunuzla birlikte kullanabileceği bir DPC uygulaması geliştirirsiniz. Müşteriniz, DPC'yi yönettiği kullanıcı cihazlarına dağıtır. DPC, EMM konsolunuz (ve sunucunuz) ile cihaz arasında köprü görevi görür. Yöneticiler, EMM konsolunu kullanarak cihaz ayarlarını ve uygulamaları yapılandırma gibi çeşitli görevleri yerine getirir.

DPC, yüklendiği cihazda iş profilini oluşturur ve yönetir. İş profili, işle ilgili bilgileri şifreler ve kullanıcıların kişisel uygulamalarından ve verilerinden ayrı tutar. DPC, iş profilini oluşturmadan önce cihazda kullanılmak üzere bir Managed Google Play Hesabı da sağlayabilir.

Bu kılavuzda, iş profilleri oluşturup yönetebilen bir DPC'nin nasıl geliştirileceği açıklanmaktadır.

EMM'ler için DPC Destek Kitaplığı

EMM'ler için DPC Destek Kitaplığı, kurumsal ortamda Android cihazların sağlanmasını ve yönetimini kolaylaştıran yardımcı ve yardımcı sınıflardan oluşur. Kitaplık, DPC uygulamalarınızdaki önemli özelliklerden yararlanmanıza olanak tanır:

Kitaplığı indirmek için aşağıdaki adımları uygulayın. Bu rehberde ayrıntılı olarak açıklanan görevlerde DPC Destek Kitaplığı'nın kullanıldığı varsayılır.

DPC Destek Kitaplığı'nı indirme

DPC Destek Kitaplığı'nı kullanmak için kitaplığı Android Enterprise EMM Sağlayıcı topluluğundan indirin. Kitaplığı build.gradle dosyanıza eklemeniz ve DPC uygulamanızı oluştururken diğer bağımlılıkları da dikkate almanız gerekir. Örneğin, kitaplık için 11.4.0 Google Play Hizmetleri kimlik doğrulama istemci kitaplığı gerekir.

  1. Kitaplığı build.gradle dosyasına ekleyin:

    Groovy

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
  2. build.gradle dosyasına 11.4.0 Google Play Hizmetleri kimlik doğrulama istemci kitaplığını ekleyin:

    Groovy

    implementation 'com.google.android.gms:play-services-auth:11.4.0'

    Kotlin

    implementation("com.google.android.gms:play-services-auth:11.4.0")

Kitaplığın çalışması için belirli izinler gerekir. Bu nedenle, Google Play'e yüklerken bunları DPC uygulamanızın manifestine eklemeniz gerekir:

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.providers.gsf.permission.READ_GSERVICES"/>

Bu ön kurulum ve dağıtım adımlarına ek olarak, uygulamak istediğiniz özelliğe bağlı olarak DPC kodunuzda belirli kitaplık işlevlerini de başlatmanız gerekir. Ayrıntılar, aşağıdaki ilgili bölümlerde yer almaktadır.

DPC oluşturma

DPC'nizi, cihaz yönetimi uygulamaları için kullanılan mevcut model üzerinde oluşturun. Uygulamanız, Cihaz Yönetimi bölümünde açıklandığı gibi DeviceAdminReceiver (android.app.admin paketindeki bir sınıf) sınıfının alt sınıfı olmalıdır.

İş profili oluşturun

Temel iş profili oluşturmayı gösteren bir örnek için GitHub'daki BasicManagedProfile'a bakın.

Kişisel profili olan bir cihazda iş profili oluşturmak için önce FEATURE_MANAGED_USERS sistem özelliğinin varlığını kontrol ederek cihazın iş profilini destekleyip desteklemediğini öğrenin:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Cihaz iş profillerini destekliyorsa ACTION_PROVISION_MANAGED_PROFILE işlemiyle bir amaç göndererek iş profili oluşturun. (Bazı dokümanlarda yönetilen profil, Android'in kurumsal bağlamında iş profili ile aynı anlama gelen genel bir terimdir.) Cihaz yöneticisi paket adını ek olarak ekleyin:

Kotlin

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java)
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString())
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Java

Activity provisioningActivity = getActivity();
// You'll need the package name for the DPC app.
String myDPCPackageName = "com.example.myDPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class);
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
         == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE);
    provisioningActivity.finish();
}

Sistem, bu amaca aşağıdaki şekilde yanıt verir:

  • Cihazın şifrelenmiş olduğunu doğrular. Şifrelenmemişse sistem, devam etmeden önce cihazı şifrelemesini ister.
  • İş profili oluşturur.
  • Gerekli olmayan uygulamaları iş profilinden kaldırır.
  • DPC uygulamasını iş profiline kopyalar ve DPC'yi profil sahibi olarak ayarlar.

Temel hazırlığın başarılı olup olmadığını görmek için onActivityResult() seçeneğini geçersiz kılın:

Kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Java

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return;
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data);
    }
}

İş profilini etkinleştirmeyi tamamlayın

Profil sağlandığında sistem, DPC uygulamasının DeviceAdminReceiver.onProfileProvisioningComplete() yöntemini çağırır. İş profilini etkinleştirmeyi tamamlamak için bu geri çağırma yöntemini geçersiz kılın.

Tipik bir DeviceAdminReceiver.onProfileProvisioningComplete() geri çağırma uygulaması şunları yapar:

İş profilini etkinleştirme

Bu görevleri tamamladıktan sonra iş profilini etkinleştirmek için cihaz politikası yöneticisinin setProfileEnabled() yöntemini çağırın:

Kotlin

// Get the device policy manager
val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val componentName = myDeviceAdminReceiver.getComponentName(this)
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile")
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName)

Java

// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile");
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName);

Cihaz politikalarını ayarlama

DPC uygulaması, bir kuruluşun gereksinimlerini ve kısıtlamalarını karşılamak için yönetici tarafından belirlenen cihaz politikalarını uygular. Örneğin, güvenlik politikası belirli sayıda başarısız şifre denemesinden sonra cihazların kilitlenmesini gerektirebilir. DPC, EMM konsoluna mevcut politikaları sorgular ve ardından Device Administration API'sini kullanarak politikaları uygular.

Cihaz politikalarını uygulama hakkında bilgi edinmek için Politikalar başlıklı makaleyi inceleyin.

Yönetilen yapılandırmaları iş uygulamalarına uygulama

Yönetilen yapılandırmalar, müşterilerinize dağıtım için onayladıkları uygulamaları önceden yapılandırma ve yapılandırmanın değiştirilmesi gerektiğinde bu uygulamaları kolayca güncelleme olanağı sunar. Uygulamayı dağıtmadan önce yapılandırmak, hedef cihaza yüklendiğinde kuruluşun güvenlik ve diğer politikalarının karşılanmasını sağlar.

Uygulama özellikleri, uygulama geliştirici tarafından Google Play'e yüklenirken uygulamaya eşlik eden bir XML şemasında (yönetilen yapılandırmalar şeması) tanımlanır (ayrıntılar için uygulama geliştiriciler Yönetilen Yapılandırmaları Ayarlama başlıklı makaleyi inceleyin).

Bu şemayı, EMM konsolunuzda müşteri yöneticilerinize göstermek üzere uygulamadan alırsınız. Şemada tanımlanan çeşitli seçeneklerin görüntülendiği bir kullanıcı arayüzü sağlarsınız ve yöneticilerin uygulamanın ayarlarını önceden yapılandırmasına olanak tanırsınız. Yöneticinin ayarladığı yönetilen yapılandırma, genellikle EMM sunucusunda depolanır. EMM sunucusu, Managedconfigurationsfordevice veya Managedconfigurationsforuser'ı ayarlamak için Play EMM API'yi kullanır. Ayrıntılar için Play üzerinden yönetilen yapılandırmalar başlıklı makaleyi inceleyin.

Yönetilen yapılandırmalar, Play EMM API'si (önerilen yaklaşım) kullanılarak veya doğrudan DPC'den (Yönetilen yapılandırmaları doğrudan DPC'den uygulama başlıklı makalede açıklanmıştır) uygulamaya uygulanabilir. Play EMM API'sini kullanmanın çeşitli avantajları vardır. Örneğin, DPC görevlerini basitleştirmek için DPC Destek Kitaplığı'nı kullanabileceğinizden kolayca uygulanabilir. Ayrıca Play EMM API:

  • Yeni bir uygulama yüklendiğinde yapılandırmayı atomik olarak ayarlar. Böylece, kullanıcı uygulamayı ilk kez başlattığında uygulamanın hazır olmasını sağlar.
  • Yapılandırmaları kullanıcı bazında yönetmenize olanak tanır. Böylece, temel hazırlık işlemlerini cihaz bazında izlemek zorunda kalmazsınız.

Play EMM API'yi kullanarak yönetilen yapılandırmaları uygulama

Yönetilen yapılandırmalar için Play EMM API'yi kullanmak istiyorsanız DPC'nin Google Play'in yapılandırmaları ayarlamasına izin vermesi gerekir. DPC Destek Kitaplığı, Google Play tarafından gönderilen yapılandırmayı proxy'leyerek bu görevi sizin için yerine getirir.

Play EMM API'yi kullanmak için DPC Destek Kitaplığı'nı indirin ve DPC'nizde yönetilen yapılandırma desteğini etkinleştirin.

Yönetilen yapılandırmalar desteğini DPC'nizde etkinleştirme

Bu sınıfı DPC'nize aktarın:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Yönetilen yapılandırmalar kitaplığını başlatın. Bu örnekte, "admin" DeviceAdminReceiver'ın ComponentName'idir.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Yönetilen yapılandırmaları etkinleştirme:

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

Bu kitaplık DPC'nizde başlatıldığında, bu görevleri doğrudan DPC'de kodlamak yerine onaylanmış uygulamalara yönetilen yapılandırmalar uygulamak için EMM konsolunuzda ve sunucunuzda Google Play EMM API'yi kullanabilirsiniz. Ayrıntılar için Play aracılığıyla yönetilen yapılandırmalar başlıklı makaleyi inceleyin.

Yönetilen yapılandırmaları doğrudan DPC'den uygulama

Bir uygulamanın yapılandırma ayarlarını doğrudan DPC'den değiştirmek için DevicePolicyManager.setApplicationRestrictions() yöntemini çağırın ve DPC uygulamasının DeviceAdminReceiver'ı, hedef uygulamanın paket adı ve yöneticinin ayarladığı şekilde uygulamanın yönetilen yapılandırmasını içeren Bundle için parametreleri iletin. Ayrıntılar için DPC ve EMM konsolunuzun etkileşimi ve Yönetilen yapılandırmaları ayarlama başlıklı makaleleri inceleyin. Ancak, yönetilen yapılandırmaları uygulamaya yönelik bu alternatif yaklaşımın Managed Google Play Accounts dağıtımlarında önerilmediğini unutmayın.

Managed Google Play Accounts sağlama desteği

DPC Destek Kitaplığı, Managed Google Play hesaplarının sağlanmasıyla ilgili destek içerir. Bu destekten yararlanmak için önce kitaplığı ilk kullanıma hazırlamanız gerekir. Ardından çalışma ortamını sağlayabilir ve Managed Google Play Hesabı ekleyebilirsiniz.

DPC'nizde Managed Google Play hesapları desteğini başlatma

Bu sınıfı DPC'nize aktarın:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Sağlama uyumluluk kitaplığını başlatın. Bu örnekte "admin", DeviceAdminReceiver öğesinin ComponentName öğesidir.

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Managed Google Play Accounts için çalışma ortamını sağlama

DPC, bir cihazı profil sahibi modunda (ACTION_PROVISION_MANAGED_PROFILE) veya cihaz sahibi modunda (ACTION_PROVISION_MANAGED_DEVICE) sağladıktan sonra aşağıdaki işlevi çağırarak cihazın Managed Google Play hesaplarını destekleyebildiğinden emin olun:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Geri arama, bu işlemin başarılı veya başarısız olduğunu bildirir. Geri arama başarılı bir şekilde döndüğünde Managed Google Play hesabı eklenebilir. Geri çağırma bir hata bildirirse kullanıcıya cihazın ağ bağlantısı olduğundan emin olmasını söyleyin (örneğin, indirme işlemi başarısız olursa). Diğer durumlarda hatayı Google'a bildirin.

Kotlin

object : WorkingEnvironmentCallback() {
    override fun onSuccess() {
        // Can now provision the managed Google Play Account
    }
    override fun onFailure(error: Error) {
        // Notify user, handle error (check network connection)
    }
}

Java

new WorkingEnvironmentCallback() {
    @Override
    public void onSuccess() {
        // Can now provision the managed Google Play Account
    }

    @Override
    public void onFailure(Error error) {
        // Notify user, handle error (check network connection)
    }
}

Managed Google Play Accounts ekleme

Android çerçevesinin AccountManager bir cihaza Managed Google Play hesabı ekleyebilir. AccountManager ile etkileşimi kolaylaştırmak için DPC Destek Kitaplığı'ndaki yardımcı işlevi (aşağıdaki örnekte gösterilmiştir) kullanın. İşlev, Google Play sunucusu tarafından döndürülen jetonu işler ve Managed Google Play hesabının sağlanmasını kolaylaştırır. Yönetilen Google Play hesabı geçerli bir durumdayken işlev döndürülür:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token—Google Play EMM API Users.generateAuthenticationToken() çağrısı tarafından oluşturulan kullanıcı kimlik doğrulama jetonu.
  • accountAddedCallback: Cihaza başarıyla eklenen Managed Google Play Hesabı'nı döndürür. Bu geri çağırma, onAccountReady() ve onFailure() yöntemlerini içermelidir.

Kotlin

val workAccountAddedCallback = object : WorkAccountAddedCallback() {
    override fun onAccountReady(account: Account, deviceHint: String) {
        // Device account was successfully added to the device
        // and is ready to be used.
    }

    override fun onFailure(error: Error) {
        // The account was not successfully added. Check that the token
        // provided was valid (it expires after a certain period of time).
    }
}

Java

WorkAccountAddedCallback workAccountAddedCallback =
    new WorkAccountAddedCallback() {
        @Override
        public void onAccountReady(Account account, String deviceHint) {
            // Device account was successfully added to the device
            // and is ready to be used.
        }

        @Override
        public void onFailure(Error error) {
            // The account was not successfully added. Check that the token
            // provided was valid (it expires after a certain period of time).
        }
};
  • Cihaz Yönetimi API'si hakkında daha fazla bilgi edinmek için Cihaz Yönetimi başlıklı makaleyi inceleyin.
  • Android Enterprise'da cihaz sağlama yöntemleri hakkında bilgi edinmek için Android Enterprise geliştirici kılavuzundaki Cihaz sağlama bölümüne bakın.
  • Temel bir iş profili oluşturmanın nasıl yapılacağını gösteren GitHub örneği için BasicManagedProfile'a bakın.
  • Diğer uygulamalarda yapılandırmaları profil sahibi olarak ayarlamayı gösteren bir GitHub örneği için AppRestrictionEnforcer'a bakın.