دعم وضع التشغيل المباشر

يعمل Android 7.0 في وضع التشغيل المباشر الآمن. عندما يكون الجهاز قيد التشغيل بدون أن يفتح المستخدم قفل الخاص بك. ولدعم ذلك، يوفّر النظام موقعَين لتخزين البيانات:

  • مساحة التخزين المشفَّرة لبيانات الاعتماد، وهي موقع التخزين التلقائي ولا تتوفّر إلا بعد أن يفتح المستخدم قفل الجهاز.
  • مساحة التخزين المشفَّرة على الجهاز، وهي موقع تخزين متاح أثناء "وضع التشغيل المباشر" وبعد أن يفتح المستخدم قفل الجهاز.

لا يتم تلقائيًا تشغيل التطبيقات أثناء وضع "التشغيل المباشر". إذا كان تطبيقك بحاجة إلى اتخاذ إجراء أثناء وضع التشغيل المباشر، يمكنك تسجيل مكونات التطبيق التي سيتم تشغيلها أثناء هذا الوضع. بعض حالات الاستخدام الشائعة في ما يلي بعض التطبيقات التي تحتاج إلى التشغيل أثناء وضع "التشغيل المباشر":

  • التطبيقات التي تُرسِل إشعارات مجدوَلة، مثل تطبيقات المنبّهات
  • التطبيقات التي ترسل إشعارات مهمة للمستخدمين، مثل تطبيقات الرسائل القصيرة
  • التطبيقات التي توفّر خدمات تسهيل الاستخدام، مثل TalkBack

إذا كان تطبيقك بحاجة إلى الوصول إلى البيانات أثناء تشغيله في وضع "التشغيل المباشر"، استخدِم مساحة التخزين المشفَّرة على الجهاز. يحتوي التخزين المشفَّر على الجهاز على بيانات مشفَّرة بمفتاح لا يتوفّر إلا بعد أن يُجري الجهاز عملية تشغيل مُثبَتة الهوية بنجاح.

للبيانات التي يجب تشفيرها باستخدام مفتاح مرتبط بالمستخدم بيانات الاعتماد، مثل رقم التعريف الشخصي أو كلمة المرور، تستخدم التخزين المشفر لبيانات الاعتماد. لا تتوفّر مساحة التخزين المشفَّرة لبيانات الاعتماد بعد أن يكمل المستخدم عملية النقل بنجاح. فتح قفل الجهاز إلى أن يعيد المستخدم تشغيله. إذا كانت يقوم المستخدم بتفعيل شاشة القفل بعد فتح قفل الجهاز، ستظل مساحة التخزين المشفرَّة باستخدام بيانات الاعتماد متاحة.

طلب الوصول للتشغيل أثناء التشغيل المباشر

يجب أن تسجِّل التطبيقات مكوناتها لدى النظام قبل يمكن أن تعمل أثناء وضع "التشغيل المباشر" أو الوصول إلى الجهاز المشفّر مساحة التخزين. يتم تسجيل التطبيقات في النظام من خلال وضع علامة على المكونات باعتبارها مع مراعاة التشفير. لوضع علامة على المكوِّن على أنه يتضمن تشفيرًا، اضبط قيمة السمة android:directBootAware هي "صحيح" في ملف البيان.

يمكن للمكونات المتوافقة مع التشفير التسجيل لتلقّي رسالة بث منACTION_LOCKED_BOOT_COMPLETED النظام عند إعادة تشغيل الجهاز. سيتم تشفير الجهاز في هذه المرحلة. تتوفر مساحة تخزين، ويمكن للمكوِّن تنفيذ المهام التي يجب التشغيل أثناء وضع التشغيل المباشر، مثل تشغيل تنبيه مجدول.

يعرض مقتطف الرمز البرمجي التالي مثالاً على كيفية تسجيل BroadcastReceiver على أنّه عنصر على دراية بميزة التشفير، وإضافة ACTION_LOCKED_BOOT_COMPLETED إلى ملف بيان التطبيق:

<receiver
  android:directBootAware="true" >
  ...
  <intent-filter>
    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
  </intent-filter>
</receiver>

وبمجرد أن يقوم المستخدم بإلغاء قفل الجهاز، يمكن لجميع المكونات الوصول إلى كل من التخزين المشفّر على الجهاز بالإضافة إلى التخزين المشفّر باستخدام بيانات الاعتماد.

الوصول إلى مساحة التخزين المشفَّرة على الجهاز

للوصول إلى مساحة التخزين المشفَّرة على الجهاز، أنشئ مثيلًا ثانيًا للخدمة Context من خلال الاتصال بالخدمة Context.createDeviceProtectedStorageContext(). واجهة برمجة التطبيقات لكل مساحة التخزين تصل المكالمات التي يتم إجراؤها باستخدام هذا السياق إلى مساحة التخزين المشفرة على الجهاز. يحصل المثال التالي على إذن بالوصول إلى مساحة التخزين المشفَّرة على الجهاز ويفتح ملف بيانات تطبيق حالي:

Kotlin

val directBootContext: Context = appContext.createDeviceProtectedStorageContext()
// Access appDataFilename that lives in device encrypted storage
val inStream: InputStream = directBootContext.openFileInput(appDataFilename)
// Use inStream to read content...

Java

Context directBootContext = appContext.createDeviceProtectedStorageContext();
// Access appDataFilename that lives in device encrypted storage
FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
// Use inStream to read content...

استخدام مساحة التخزين المشفَّرة على الجهاز فقط المعلومات التي يجب الوصول إليها أثناء وضع التشغيل المباشر. لا تستخدِم مساحة التخزين المشفَّرة على الجهاز كمخزن مشفَّر للأغراض العامة. بالنسبة إلى معلومات المستخدم الخاصة أو البيانات المشفّرة غير المطلوبة أثناء وضع "التشغيل المباشر"، استخدِم مساحة التخزين المشفّرة لبيانات الاعتماد.

تلقّي إشعار بإلغاء قفل المستخدم

عندما يفتح المستخدم قفل الجهاز بعد إعادة تشغيله، يمكن لتطبيقك التبديل إلى الوصول إلى مساحة التخزين المشفَّرة لبيانات الاعتماد واستخدام خدمات النظام العادية التي تعتمد على بيانات اعتماد المستخدم.

للحصول على إشعار عندما يفتح المستخدم قفل الجهاز بعد إعادة التشغيل، سجِّل BroadcastReceiver من مكوّن قيد التشغيل للاستماع إلى رسائل إشعارات فتح القفل. عندما يفتح المستخدم قفل الجهاز بعد التشغيل:

  • إذا كان تطبيقك يحتوي على عمليات تعمل في المقدّمة تحتاج إلى إشعار فوري، عليك اتّباع الخطوات التالية: استمِع إلى رسالة ACTION_USER_UNLOCKED.
  • إذا كان تطبيقك يستخدم فقط العمليات التي تتم في الخلفية والتي يمكن أن تستجيب للطلبات المتأخرة الإشعار، استمع إلى ACTION_BOOT_COMPLETED .

إذا فتح المستخدم قفل الجهاز، يمكنك معرفة ذلك من خلال الاتصال بالرقم UserManager.isUserUnlocked().

نقل البيانات الحالية

إذا حدَّث مستخدم جهازه لاستخدام وضع "التشغيل المباشر"، قد يكون عليك البيانات الحالية التي يجب نقلها إلى مساحة التخزين المشفَّرة على الجهاز استخدام Context.moveSharedPreferencesFrom() و Context.moveDatabaseFrom()، باستخدام سياق الوجهة باعتباره متصل الطريقة وسياق المصدر كوسيطة لنقل التفضيل وقاعدة البيانات البيانات بين التخزين المُشفَّر لبيانات الاعتماد والتخزين المشفَّر على الجهاز

لا ترحِّل معلومات المستخدم الخاصة، مثل كلمات المرور أو الرموز المميزة للتفويض، من تخزين مشفّر ببيانات الاعتماد إلى مساحة تخزين مشفّرة في الجهاز. استخدِم تقديرك الخاص عند تحديد البيانات الأخرى التي تريد نقلها إلى مساحة التخزين المشفَّرة على الجهاز. في بعض السيناريوهات، قد تحتاج إلى إدارة مجموعات منفصلة من البيانات في كل من علامتَي التخزين المشفَّرَتَين.

اختبار تطبيقك المتوافق مع ميزة "التشفير من جهة العميل"

اختبِر تطبيقك المستنِد إلى التشفير مع تفعيل وضع "التشغيل المباشر".

تفعِّل معظم الأجهزة التي تعمل بإصدارات حديثة من نظام التشغيل Android وضع "التشغيل المباشر". عند تعيين بيانات اعتماد شاشة القفل (رقم التعريف الشخصي أو النقش أو كلمة المرور). وينطبق هذا الأمر تحديدًا على جميع الأجهزة التي تستخدم التشفير المستند إلى الملفات. للتحقق مما إذا كان الجهاز يستخدم التشفير على مستوى الملفات، شغِّل ما يلي: أمر Shell:

adb shell getprop ro.crypto.type

إذا كانت النتيجة هي file، يعني ذلك أنّ التشفير على مستوى الملفات مفعَّل على الجهاز.

على الأجهزة التي لا تستخدم التشفير المستند إلى الملفات تلقائيًا، قد تكون هناك خيارات أخرى لاختبار وضع التشغيل المباشر:

  • يمكن تحويل بعض الأجهزة التي تستخدم ميزة "تشفير القرص بالكامل" (ro.crypto.type=block) والتي تعمل بالإصدار 7.0 من Android وحتى 12 من Android إلى ميزة "التشفير المستند إلى الملفات". وهناك طريقتان لذلك:

      تحذير: إحدى طرق التحويل إلى يؤدي التشفير المستند إلى الملف إلى حجب جميع بيانات المستخدمين على الجهاز.

    • على الجهاز، فعِّل خيارات المطوّر إذا لم يسبق لك تفعيلها، وذلك من خلال الانتقال إلى الإعدادات > لمحة عن الهاتف والنقر على رقم الإصدار سبع مرات. بعد ذلك، انتقِل إلى الإعدادات > خيارات المطوّرين واختَر التحويل إلى تشفير الملفات.
    • بدلاً من ذلك، يمكنك تنفيذ أوامر shell التالية:
      adb reboot-bootloader
      fastboot --wipe-and-use-fbe
      
  • تتوافق الأجهزة التي تعمل بنظام التشغيل Android 13 أو الإصدارات الأقدم مع "في وضع المحاكاة" وضع التشغيل المباشر الذي يستخدم أذونات الملفات لمحاكاة آثار قفل الملفات المشفرة وفتح قفلها. استخدام وضع المحاكاة فقط أثناء التطوير؛ يمكن أن يتسبب ذلك في فقدان البيانات. لتفعيل وضع التمهيد المباشر ، اضبط نمط قفل على الجهاز، واختَر "لا، شكرًا" إذا طُلب منك شاشة بدء تشغيل آمنة عند ضبط نمط القفل، ثم نفِّذ الأمر التالي في واجهة الأوامر:

    adb shell sm set-emulate-fbe true
    

    لإيقاف وضع "التشغيل المباشر" المحاكي، شغِّل الأمر التالي في واجهة الصعق :

    adb shell sm set-emulate-fbe false
    

    يؤدي تشغيل أحد هذين الأمرين إلى إعادة تشغيل الجهاز.

التحقّق من حالة تشفير سياسة الجهاز

يمكن لتطبيقات إدارة الأجهزة استخدام DevicePolicyManager.getStorageEncryptionStatus() للتحقق من حالة التشفير الحالية للجهاز.

إذا كان تطبيقك يستهدف مستوى واجهة برمجة تطبيقات أقل من Android 7.0 (واجهة برمجة التطبيقات 24)، عليك اتّباع الخطوات التالية: يمكن إرجاع المشتريات مقابل getStorageEncryptionStatus(). ENCRYPTION_STATUS_ACTIVE إذا كان الجهاز يستخدم إما تشفير القرص الكامل أو تشفير الملفات باستخدام ميزة "التشغيل المباشر" وفي كلتا الحالتَين، يتم تخزين البيانات دائمًا مشفّرة في حال عدم نقلها.

إذا كان تطبيقك يستهدف الإصدار 7.0 (واجهة برمجة التطبيقات 24) أو الإصدارات الأحدث، يمكن إرجاع المشتريات مقابل getStorageEncryptionStatus(). ENCRYPTION_STATUS_ACTIVE إذا كان الجهاز يستخدم تشفير القرص الكامل. يقوم بإرجاع ENCRYPTION_STATUS_ACTIVE_PER_USER إذا كان الجهاز يستخدم التشفير المستنِد إلى الملفات من خلال ميزة "التشغيل المباشر"

في حال إنشاء تطبيق لإدارة الأجهزة التي تستهدف الإصدار 7.0 Android، فاحرص على التحقق من ENCRYPTION_STATUS_ACTIVE و ENCRYPTION_STATUS_ACTIVE_PER_USER لتحديد ما إذا كان الجهاز مشفّر.

عيّنات تعليمات برمجية إضافية

يوضّح نموذج DirectBoot أيضًا استخدام واجهات برمجة التطبيقات التي تتناولها هذه الصفحة.