Xây dựng trình kiểm soát chính sách thiết bị

Hướng dẫn này mô tả cách phát triển trình kiểm soát chính sách thiết bị (DPC) cho trong quá trình triển khai Android Enterprise. Ứng dụng DPC, đã biết trước đây với vai trò là đơn vị kiểm soát chính sách công việc, kiểm soát hệ thống và chính sách thiết bị cục bộ trên các thiết bị.

Giới thiệu về DPC

Trong quá trình triển khai Android cho doanh nghiệp, một doanh nghiệp duy trì quyền kiểm soát các khía cạnh khác nhau của thiết bị của người dùng, chẳng hạn như cô lập các nhóm liên quan đến công việc thông tin của người dùng dữ liệu cá nhân, định cấu hình trước các ứng dụng được phê duyệt cho môi trường hoặc tắt các tính năng của thiết bị (ví dụ: máy ảnh).

Với vai trò EMM, bạn phát triển một ứng dụng DPC mà khách hàng của bạn có thể sử dụng trong kết hợp với bảng điều khiển EMM của bạn và máy chủ. Khách hàng của bạn triển khai DPC tới các thiết bị của người dùng mà họ quản lý. DPC đóng vai trò là cầu nối giữa bảng điều khiển (và máy chủ) của EMM với thiết bị. Quản trị viên dùng bảng điều khiển của EMM để thực hiện nhiều thao tác, trong đó có việc định cấu hình ứng dụng và chế độ cài đặt thiết bị.

DPC tạo và quản lý hồ sơ công việc trên thiết bị được cài đặt DPC. Hồ sơ công việc mã hoá thông tin liên quan đến công việc và tách biệt thông tin đó với của người dùng dữ liệu và ứng dụng cá nhân. Trước khi tạo hồ sơ công việc, DPC cũng có thể cung cấp một Tài khoản Google Play được quản lý để sử dụng trên thiết bị.

Hướng dẫn này chỉ cho bạn cách phát triển một DPC có thể tạo và quản lý hồ sơ công việc.

Thư viện hỗ trợ DPC dành cho EMM

Thư viện hỗ trợ DPC dành cho EMM bao gồm các lớp tiện ích và trình trợ giúp hỗ trợ việc cấp phép và quản lý thiết bị Android trong doanh nghiệp môi trường. Thư viện này giúp bạn tận dụng các tính năng quan trọng trong Ứng dụng DPC:

  • Hỗ trợ cấp phép Tài khoản Managed Google Play: Quản lý việc cấp phép Tài khoản Google Play trong ứng dụng DPC yêu cầu Google Play và Google Các ứng dụng Dịch vụ Play đáp ứng yêu cầu tối thiểu về phiên bản. Tuy nhiên, việc cập nhật các chỉ số có thể phức tạp. Thư viện hỗ trợ DPC sẽ xử lý việc cập nhật các ứng dụng, đồng thời đảm bảo khả năng tương thích với các bản cập nhật trong tương lai đối với gói Quy trình cấp phép Tài khoản Play. Xem Tài khoản Google Play được quản lý hỗ trợ cấp phép để biết chi tiết.
  • Hỗ trợ cấu hình được quản lý: Việc sử dụng API EMM của Play để xử lý cấu hình được quản lý cho các ứng dụng đã được phê duyệt cách dễ nhất để triển khai các cấu hình được quản lý trên DPC của bạn. Hỗ trợ DPC Thư viện cho phép bạn uỷ quyền cho Google Play tác vụ áp dụng các tệp được quản lý cấu hình (trước đây là hạn chế ứng dụng) do quản trị viên thiết lập bằng dịch vụ EMM (quản lý thiết bị di động doanh nghiệp) của bạn Google Play. Việc sử dụng API Play EMM để xử lý các cấu hình được quản lý cho phép cấu hình ứng dụng sẽ được áp dụng tỉ mỉ trong quá trình cài đặt. Xem Áp dụng cấu hình được quản lý để hoạt động trên các ứng dụng để biết thêm thông tin về cách bật tính năng này trong DPC của bạn.

Hãy làm theo các bước bên dưới để tải thư viện xuống. Các tác vụ được nêu chi tiết trong hướng dẫn này giả định sử dụng Thư viện hỗ trợ DPC.

Tải xuống Thư viện hỗ trợ DPC

Để sử dụng Thư viện hỗ trợ DPC, hãy tải thư viện này xuống từ Cộng đồng nhà cung cấp EMM cho Android Enterprise. Bạn phải thêm thư viện vào tệp build.gradle của mình và thực hiện các bước khác khi tạo ứng dụng DPC. Ví dụ: thư viện yêu cầu phiên bản 11.4.0 Thư viện ứng dụng xác thực của Dịch vụ Google Play.

  1. Thêm thư viện vào tệp build.gradle:

    Groovy

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

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Thêm 11.4.0 Thư viện ứng dụng xác thực của Dịch vụ Google Play vào tệp build.gradle:

    Groovy

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

    Kotlin

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

Thư viện yêu cầu một số quyền nhất định để chạy, vì vậy bạn phải thêm các quyền này vào tệp kê khai của ứng dụng DPC khi bạn tải lên Google Play:

  <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"/>

Ngoài các bước thiết lập và triển khai sơ bộ này, bạn cũng phải khởi chạy chức năng thư viện cụ thể trong mã DPC của bạn, tuỳ thuộc vào mà bạn muốn triển khai. Thông tin chi tiết được đưa vào trong bên dưới.

Tạo DPC

Xây dựng DPC trên mô hình hiện có được sử dụng cho các ứng dụng quản trị thiết bị. Cụ thể, ứng dụng của bạn phải phân lớp con DeviceAdminReceiver (một lớp trong android.app.admin) gói) như được mô tả trong Quản trị thiết bị.

Tạo hồ sơ công việc

Để xem mẫu minh hoạ cách tạo hồ sơ công việc cơ bản, hãy xem BasicManagedProfile trên GitHub.

Cách tạo hồ sơ công việc trên thiết bị đã có hồ sơ cá nhân: trước tiên, hãy tìm hiểu xem thiết bị có thể hỗ trợ hồ sơ công việc hay không bằng cách kiểm tra sự tồn tại của Tính năng hệ thống FEATURE_MANAGED_USERS:

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!
}

Nếu thiết bị hỗ trợ hồ sơ công việc, hãy tạo hồ sơ công việc bằng cách gửi một ý định với ACTION_PROVISION_MANAGED_PROFILE hành động. (Trong một số tài liệu, hồ sơ được quản lý là thuật ngữ chung có nghĩa giống như hồ sơ công việc trong bối cảnh Android trong doanh nghiệp.) Bao gồm tên gói quản trị của thiết bị dưới dạng phần bổ sung:

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();
}

Hệ thống sẽ phản hồi ý định này bằng cách thực hiện những việc sau:

  • Xác minh rằng thiết bị đã được mã hoá. Nếu không, hệ thống sẽ nhắc người dùng mã hoá thiết bị trước khi tiếp tục.
  • Tạo hồ sơ công việc.
  • Xóa các ứng dụng không bắt buộc khỏi hồ sơ công việc.
  • Sao chép ứng dụng DPC vào hồ sơ công việc và tự thiết lập DPC thành chủ sở hữu trang doanh nghiệp.

Ghi đè onActivityResult() thành xem việc cấp phép có thành công hay không:

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);
    }
}

Hoàn tất việc bật hồ sơ công việc

Khi hồ sơ đã được cấp phép, hệ thống sẽ gọi DPC phương thức DeviceAdminReceiver.onProfileProvisioningComplete() của ứng dụng. Ghi đè để hoàn tất việc bật hồ sơ công việc.

DeviceAdminReceiver.onProfileProvisioningComplete() thông thường việc triển khai lệnh gọi lại sẽ thực hiện những việc sau:

Kích hoạt hồ sơ công việc

Sau khi bạn đã hoàn tất những tác vụ này, hãy gọi Phương thức setProfileEnabled() để kích hoạt hồ sơ công việc:

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);

Thiết lập chính sách thiết bị

Ứng dụng DPC áp dụng các chính sách thiết bị do quản trị viên thiết lập để đáp ứng các yêu cầu và ràng buộc của tổ chức. Ví dụ: chính sách bảo mật có thể yêu cầu khoá thiết bị sau một số lần thử nhập mật khẩu không thành công. DPC truy vấn bảng điều khiển EMM cho các chính sách hiện tại, sau đó áp dụng các chính sách thông qua Thiết bị Quản trị.

Để biết thông tin về cách áp dụng chính sách thiết bị, hãy xem Chính sách.

Áp dụng cấu hình được quản lý đến các ứng dụng công việc

Cấu hình được quản lý cho phép bạn cung cấp cho khách hàng của mình khả năng định cấu hình trước các ứng dụng mà họ đã phê duyệt để triển khai và cập nhật các ứng dụng đó các ứng dụng một cách dễ dàng khi cần thay đổi cấu hình. Định cấu hình một ứng dụng trước việc triển khai đảm bảo đáp ứng các chính sách bảo mật và các chính sách khác của tổ chức sau khi cài đặt ứng dụng trên thiết bị mục tiêu.

Các chức năng của ứng dụng được nhà phát triển ứng dụng xác định trong giản đồ XML ( giản đồ cấu hình được quản lý) đi kèm với ứng dụng khi bạn tải lên Google Play (nhà phát triển ứng dụng, hãy xem nội dung Thiết lập cấu hình được quản lý để biết thông tin chi tiết).

Bạn hãy truy xuất giản đồ này từ ứng dụng để hiển thị cho quản trị viên của khách hàng trong bảng điều khiển EMM của bạn, cung cấp một giao diện người dùng trong đó nhiều tùy chọn khác nhau được xác định trong chế độ hiển thị giản đồ và cho phép quản trị viên định cấu hình trước các chế độ cài đặt của ứng dụng. Cấu hình được quản lý kết quả do quản trị viên thiết lập thường là được lưu trữ trên máy chủ EMM, sau đó sử dụng Phát API EMM cần thiết lập Quản lý cấu hình cho thiết bị hoặc Managedconfigurationsforuser. Xem Cấu hình được quản lý thông qua Play để biết thông tin chi tiết.

Bạn có thể áp dụng cấu hình được quản lý cho ứng dụng bằng API Play EMM (phương pháp đề xuất) hoặc trực tiếp từ DPC (như mô tả trong phần Áp dụng cấu hình được quản lý) trực tiếp từ DPC). Sử dụng API EMM của Play có một số ưu điểm, bao gồm cả việc triển khai dễ dàng vì bạn có thể sử dụng Thư viện hỗ trợ DPC để đơn giản hoá các tác vụ DPC. Ngoài ra, API Quản lý thiết bị di động doanh nghiệp (EMM) của Play:

  • Thiết lập cấu hình chi tiết khi người dùng cài đặt một ứng dụng mới, qua đó đảm bảo ứng dụng sẵn sàng vào lần đầu người dùng khởi chạy ứng dụng.
  • Cho phép bạn quản lý cấu hình trên cơ sở từng người dùng để bạn có thể tránh phải giám sát việc cấp phép trên cơ sở từng thiết bị.

Áp dụng cấu hình được quản lý bằng cách sử dụng Phát API EMM

Để sử dụng API EMM của Play cho các cấu hình được quản lý, DPC phải cho phép Google Play để thiết lập cấu hình. Thư viện hỗ trợ DPC sẽ xử lý vấn đề này công việc cho bạn bằng cách proxy cấu hình do Google Play gửi.

Để sử dụng Play API EMM, tải Thư viện hỗ trợ DPC xuống rồi bật tính năng hỗ trợ cấu hình được quản lý trong DPC của bạn.

Bật tính năng hỗ trợ Cấu hình được quản lý trong DPC của bạn

Nhập lớp này trong DPC của bạn:

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

Khởi chạy thư viện cấu hình được quản lý. Trong ví dụ này là "quản trị viên" là ComponentName của DeviceAdminReceiver.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Bật cấu hình được quản lý:

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

Với thư viện này được khởi tạo trong DPC, bạn có thể sử dụng API EMM của Google Play trong EMM của bạn bảng điều khiển và máy chủ để áp dụng cấu hình được quản lý cho các ứng dụng đã phê duyệt, thay vì trực tiếp lập trình các tác vụ này trong DPC. Xem Cấu hình được quản lý thông qua Play để biết thông tin chi tiết.

Áp dụng cấu hình được quản lý trực tiếp từ DPC

Để thay đổi cài đặt cấu hình của ứng dụng trực tiếp từ DPC, hãy gọi hàm Phương thức DevicePolicyManager.setApplicationIdentifier() và truyền tham số cho ứng dụng DPC DeviceAdminReceiver, tên gói của ứng dụng đích, và Gói bao gồm cấu hình được quản lý của ứng dụng do quản trị viên thiết lập. Xem Cách Bảng điều khiển DPC và EMM tương tác với nhauThiết lập cấu hình được quản lý để biết thông tin chi tiết. Tuy nhiên, Xin lưu ý rằng phương pháp thay thế này để áp dụng các thuộc tính bạn không nên sử dụng cấu hình này trong quá trình triển khai Tài khoản Google Play được quản lý.

Cấp phép tài khoản Managed Google Play hỗ trợ

Thư viện hỗ trợ DPC bao gồm hỗ trợ để cấp phép Tài khoản Google Play được quản lý. Để sử dụng tính năng hỗ trợ này, trước tiên, bạn phải khởi chạy thư viện, sau đó bạn có thể Đảm bảo rằng môi trường làm việcThêm Managed Google Play.

Khởi chạy Tài khoản Google Play được quản lý hỗ trợ trong DPC

Nhập lớp này trong DPC của bạn:

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

Khởi chạy thư viện khả năng tương thích cấp phép. Trong ví dụ này, "quản trị viên" là ComponentName của DeviceAdminReceiver.

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Đảm bảo môi trường làm việc cho Tài khoản Google Play được quản lý

Sau khi DPC cấp một thiết bị ở chế độ chủ sở hữu hồ sơ (ACTION_PROVISION_MANAGED_PROFILE) hoặc thiết bị chế độ chủ sở hữu (ACTION_PROVISION_MANAGED_DEVICE), hãy đảm bảo rằng thiết bị có thể hỗ trợ Tài khoản Google Play được quản lý bằng cách gọi:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Lệnh gọi lại báo cáo thành công hay thất bại của quá trình này. Khi lệnh gọi lại đã trả về thành công, thì bạn có thể thêm một Tài khoản Google Play được quản lý. Nếu lệnh gọi lại báo cáo lỗi, hãy nhắc người dùng để đảm bảo thiết bị có kết nối mạng (ví dụ: nếu tải xuống không thành công). Trong khu vực khác nhiều trường hợp, hãy báo cáo lỗi cho Google.

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)
    }
}

Thêm tài khoản Google Play được quản lý

AccountManager của khung Android có thể thêm Tài khoản Google Play được quản lý vào một thiết bị. Để đơn giản hoá việc tương tác với AccountManager, hãy sử dụng hàm trợ giúp (minh hoạ trong ví dụ bên dưới) trong Thư viện hỗ trợ DPC. Hàm xử lý mã thông báo do máy chủ Google Play trả về và hỗ trợ việc cấp phép Tài khoản Managed Google Play. Hàm này trả về khi Managed Google Play Tài khoản đang ở trạng thái hợp lệ:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token—Mã thông báo xác thực người dùng do Google tạo Phát lệnh gọi Users.generateAuthenticationToken() API EMM.
  • accountAddedCallback—Trả về Tài khoản Google Play được quản lý đã được thêm thành công vào thiết bị. Lệnh gọi lại này phải bao gồm Phương thức onAccountReady()onFailure().

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).
        }
};
  • Để tìm hiểu thêm về API Quản trị thiết bị, hãy xem Thiết bị Quản trị.
  • Để tìm hiểu về các phương thức cấp phép của Android Enterprise, hãy xem Cấp phép thiết bị trong Hướng dẫn dành cho nhà phát triển Android Enterprise.
  • Đối với mẫu GitHub minh hoạ cách tạo hồ sơ công việc cơ bản, hãy xem BasicManagedProfile.
  • Đối với mẫu GitHub minh hoạ cách thiết lập cấu hình trên các ứng dụng khác dưới dạng một chủ sở hữu hồ sơ, xem AppRestrictionEnforcer.