إيقاف مشرف الجهاز. تم وضع علامة على بعض سياسات المشرفين على أنّها متوقّفة نهائيًا عند استدعائها. بواسطة مشرف الجهاز. لمزيد من المعلومات والاطّلاع على خيارات نقل البيانات، يمكنك الاطّلاع على إيقاف مشرف الجهاز
يوفّر نظام Android الأساسي إمكانية إدارة الأجهزة على مستوى النظام، بدءًا من الإصدار Android 2.2 (المستوى 8 من واجهة برمجة التطبيقات). من خلال واجهات برمجة التطبيقات لإدارة الأجهزة.
في هذا الدرس، ستتعلم كيفية إنشاء تطبيق يستند إلى الأمان ويدير الوصول إلى محتواه من خلال فرض سياسات إدارة الأجهزة. على وجه التحديد، يمكن تهيئة التطبيق لضمان إعداد كلمة مرور لقفل الشاشة ذات قوة كافية قبل عرض المحتوى المقيد للمستخدم.
تحديد سياستك وتعريفها
أولاً، يجب تحديد أنواع السياسات التي يجب دعمها على المستوى الوظيفي. يجوز للسياسات تغطية مدى قوة كلمة مرور قفل الشاشة ومهلة انتهاء الصلاحية والتشفير وما إلى ذلك
في
ملف res/xml/device_admin.xml
. يجب أن يشير بيان Android أيضًا إلى
المعلَن عنها في السياسة.
تتوافق كل سياسة تم تعريفها مع عدد معين من طرق سياسات الأجهزة ذات الصلة في DevicePolicyManager
(مع تحديد الحد الأدنى لطول كلمة المرور والحد الأدنى لعدد
الأحرف الكبيرة هما مثالان). إذا حاول أحد التطبيقات استدعاء طرق
لم يتم تعريف السياسة المناسبة في XML، سيؤدي ذلك إلى ظهور SecurityException
في وقت التشغيل. الأذونات الأخرى
مثل force-lock
، تتوفر إذا كان التطبيق يهدف إلى إدارة
الأنواع الأخرى من السياسات. وكما سترى لاحقًا، وكجزء من عملية تنشيط مشرف الجهاز،
ستظهر قائمة السياسات المعلَن عنها للمستخدم على شاشة النظام.
يوضح المقتطف التالي سياسة الحد الأقصى لكلمات المرور في res/xml/device_admin.xml
:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> </uses-policies> </device-admin>
ملف XML الذي تمت الإشارة إليه في بيان السياسة في ملف بيان Android:
<receiver android:name=".Policy$PolicyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
إنشاء مستقبِل إدارة الجهاز
يمكنك إنشاء جهاز استقبال بث لإدارة الجهاز، والذي يتلقى إشعارات بالأحداث المتعلقة بالسياسات التي أعلنت أنها تدعمه. يمكن أن يلغي أحد التطبيقات طرق معاودة الاتصال بشكلٍ انتقائي.
في نموذج التطبيق، "مشرف الجهاز"، عندما يتم إيقاف مشرف الجهاز من خلال المستخدم، يتم محو السياسة التي تم إعدادها من التفضيل المشترك. يجب أن تفكر في تنفيذ منطق العمل ذي الصلة بحالة استخدامك. على سبيل المثال، قد يستغرق التطبيق بعض للتخفيف من المخاطر الأمنية من خلال تنفيذ مزيج من حذف البيانات الحساسة في أو تعطيل المزامنة عن بعد أو تنبيه المشرف، إلخ.
لكي يعمل مستقبل البث، تأكد من تسجيله في بيان Android كما هو موضح في المقتطف أعلاه.
Kotlin
class PolicyAdmin : DeviceAdminReceiver() { override fun onDisabled(context: Context, intent: Intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent) context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE).edit().apply { clear() apply() } } }
Java
public static class PolicyAdmin extends DeviceAdminReceiver { @Override public void onDisabled(Context context, Intent intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent); SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE); prefs.edit().clear().commit(); } }
تفعيل مشرف الجهاز
قبل فرض أي سياسات، على المستخدم تنشيط التطبيق يدويًا كجهاز
المشرف. يوضح المقتطف أدناه كيفية تشغيل نشاط الإعدادات الذي
يمكن للمستخدم تنشيط تطبيقك. من الممارسات الجيدة تضمين النص التوضيحي الذي يجب تسليط الضوء عليه
للمستخدمين بسبب طلب التطبيق أن يكون مشرف الجهاز، من خلال تحديد
هدف إضافي واحد (EXTRA_ADD_EXPLANATION
)
الشكل 1. شاشة تنشيط المستخدم التي يمكنك من خلالها تقديم وصف لسياسات الأجهزة التي تستخدمها.
Kotlin
if (!policy.isAdminActive()) { val activateDeviceAdminIntent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN) activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin() ) // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, resources.getString(R.string.device_admin_activation_message) ) startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN) }
Java
if (!policy.isAdminActive()) { Intent activateDeviceAdminIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin()); // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, getResources().getString(R.string.device_admin_activation_message)); startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN); }
إذا اختار المستخدم "تفعيل"، يصبح التطبيق مشرفًا للجهاز ويمكن أن يبدأ ضبط السياسة وفرضها
يحتاج التطبيق أيضًا إلى أن يكون مستعدًا للتعامل مع المواقف الصعبة التي يتراجع فيها المستخدم
عملية التنشيط بالضغط على الزر إلغاء أو مفتاح الرجوع أو مفتاح الصفحة الرئيسية. ولذلك،
يجب أن يكون لمنطق onResume()
في نشاط إعداد السياسة
لإعادة تقييم الحالة وتقديم خيار تفعيل مشرف الجهاز إلى المستخدم إذا
احتاجت.
تنفيذ "وحدة التحكّم بسياسة الجهاز"
بعد تفعيل مشرف الجهاز بنجاح، يضبط التطبيق إعدادات الجهاز. مدير السياسات الذي لديه السياسة المطلوبة. يُرجى العلم أنّه تتم إضافة سياسات جديدة إلى Android مع كل إصدار. من المناسب إجراء عمليات فحص الإصدار في التطبيق في حالة استخدام الجديدة مع دعم الإصدارات القديمة من المنصة. على سبيل المثال، الحد الأدنى لكلمة المرور لا تتوفّر سياسة الأحرف الكبيرة إلا مع المستوى 11 من واجهة برمجة التطبيقات (Honeycomb) والإصدارات الأحدث. يُنشئ الكود التالي يوضح كيفية التحقق من الإصدار في وقت التشغيل.
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var policyAdmin: ComponentName dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager policyAdmin = ComponentName(context, PolicyAdmin::class.java) dpm.apply { setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]) setPasswordMinimumLength(policyAdmin, passwordLength) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase) } }
Java
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName policyAdmin = new ComponentName(context, PolicyAdmin.class); dpm.setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]); dpm.setPasswordMinimumLength(policyAdmin, passwordLength); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { dpm.setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase); }
وفي هذه المرحلة، يمكن للتطبيق فرض السياسة. في حين أن التطبيق لا يمكنه الوصول إلى كلمة المرور الفعلية لقفل الشاشة المستخدمة، ومن خلال واجهة برمجة تطبيقات مدير سياسات الجهاز يمكن تحديد ما إذا كانت كلمة المرور الحالية تتوافق مع السياسة المطلوبة أم لا. إذا تبين أن القائمة الحالية كلمة مرور قفل الشاشة غير كافية، إذ لا تتيح واجهة برمجة التطبيقات لإدارة الأجهزة تنفيذ الإجراء التصحيحي. تقع على عاتق التطبيق مسؤولية إطلاق النظام بشكل صريح شاشة تغيير كلمة المرور في تطبيق الإعدادات. مثل:
Kotlin
if (!dpm.isActivePasswordSufficient) { // Triggers password change screen in Settings. Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) } }
Java
if (!dpm.isActivePasswordSufficient()) { ... // Triggers password change screen in Settings. Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent); }
عادةً، يمكن للمستخدم الاختيار من بين إحدى آليات القفل المتاحة، مثل "بدون" أو "النمط" رقم التعريف الشخصي (رقمي) أو كلمة المرور (الأبجدية الرقمية). عند ضبط سياسة كلمات المرور، لا يتم نقل كلمات المرور يتم إيقاف الأنواع الأضعف من الأنواع المحدّدة في السياسة. على سبيل المثال، إذا كانت قيمة تم ضبط جودة كلمة المرور "الرقمية"، ويمكن للمستخدم اختيار إما رقم تعريف شخصي (رقمي) أو كلمة المرور. كلمة المرور (الأبجدية الرقمية) فقط.
بمجرد تأمين الجهاز بشكل صحيح عن طريق إعداد كلمة مرور مناسبة لقفل الشاشة، فإن التطبيق يتيح الوصول إلى المحتوى الآمن.
Kotlin
when { !dpm.isAdminActive(policyAdmin) -> { // Activates device administrator. ... } !dpm.isActivePasswordSufficient -> { // Launches password set-up screen in Settings. ... } else -> { // Grants access to secure content. ... startActivity(Intent(context, SecureActivity::class.java)) } }
Java
if (!dpm.isAdminActive(..)) { // Activates device administrator. ... } else if (!dpm.isActivePasswordSufficient()) { // Launches password set-up screen in Settings. ... } else { // Grants access to secure content. ... startActivity(new Intent(context, SecureActivity.class)); }