استعادة بيانات اعتماد التطبيق عند إعداد جهاز جديد

تتيح ميزة استعادة بيانات الاعتماد في "مدير بيانات الاعتماد" للمستخدمين استعادة حساباتهم على التطبيقات عند إعداد جهاز جديد. تتوفّر واجهة برمجة التطبيقات هذه في إصدار للمعاينة بواسطة المطوّرين، وهي متاحة على جميع الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث والمثبَّت عليها الإصدار 242200000 أو الإصدارات الأحدث من حزمة "خدمات Google Play" (GMS) الأساسية. تشمل مزايا ميزة "استعادة بيانات الاعتماد" ما يلي:

  • تجربة مستخدم سلسة: يمكن للمستخدمين استعادة حساباتهم على التطبيقات بدون الحاجة إلى تسجيل الدخول يدويًا إلى كل تطبيق على حدة.
  • زيادة تفاعل المستخدمين: من المرجّح أن يواصل المستخدمون استخدام تطبيقك إذا كان بإمكانهم استعادة حساباتهم عند إعداد جهاز جديد.
  • تقليل جهد التطوير: ميزة "استعادة بيانات الاعتماد" مدمجة مع "مدير بيانات الاعتماد"، لذا يمكن للمطوّرين الذين يتيحون استخدام مفاتيح المرور إضافة إمكانات استعادة بيانات الاعتماد.

آلية العمل

يمكنك استخدام Restore Credentials لإنشاء بيانات الاعتماد والحصول عليها ومحوها.

  1. إنشاء بيانات اعتماد الاستعادة: عندما يسجّل المستخدم الدخول إلى تطبيقك، أنشئ بيانات اعتماد استعادة مرتبطة بحسابه. يتم تخزين بيانات الاعتماد هذه على الجهاز ومزامنتها مع السحابة الإلكترونية إذا فعّل المستخدم ميزة "الاحتفاظ بنسخة احتياطية من البيانات" من Google وكانت ميزة التشفير التام متاحة (يمكن للتطبيقات إيقاف مزامنة البيانات مع السحابة الإلكترونية).
  2. الحصول على بيانات الاعتماد الخاصة بالاستعادة: عندما يضبط المستخدم جهازًا جديدًا، يمكن لتطبيقك طلب بيانات الاعتماد الخاصة بالاستعادة من "مدير الاعتماد". يتيح لك ذلك تسجيل دخول المستخدم تلقائيًا بدون الحاجة إلى أي إدخال إضافي.
  3. محو بيانات اعتماد الاستعادة: عندما يسجّل المستخدم الخروج من تطبيقك، عليك حذف بيانات اعتماد الاستعادة المرتبطة به.

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

البطاقة السفلية في Credential Manager
الشكل 1. مخطّط بياني يوضّح كيفية استعادة بيانات تطبيق على جهاز جديد باستخدام بيانات اعتماد الاستعادة، بما في ذلك إنشاء بيانات الاعتماد وبدء عملية الاستعادة وتسجيل دخول المستخدم تلقائيًا

التنفيذ

تتوفّر واجهة برمجة التطبيقات Restore Credentials API من خلال مكتبة Credential Manager Jetpack. للبدء، اتّبِع الخطوات التالية:

  1. أضِف تبعية Credential Manager إلى مشروعك.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. أنشئ عنصر CreateRestoreCredentialRequest.

  3. استدعِ الطريقة createCredential() على العنصر CredentialManager.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    بيانات الاعتماد الخاصة بالاستعادة التي يتم إنشاؤها هي نوع من بيانات اعتماد WebAuthn، وتُعرف باسم مفتاح الاستعادة.

  4. عندما يضبط المستخدم جهازًا جديدًا، استدعِ طريقة getCredential() على عنصر CredentialManager.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. عندما يسجّل المستخدم خروجه من تطبيقك، استدعِ طريقة clearCredentialState() في العنصر CredentialManager.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

إذا كنت تستخدم وكيل نسخ احتياطي، عليك تنفيذ الجزء getCredential ضمن رد الاتصال onRestore. يضمن ذلك استعادة بيانات اعتماد التطبيق فور استعادة بيانات التطبيق.

الأسئلة الشائعة

السؤال 1. ما الفرق بين مفتاح الاستعادة ومفتاح المرور؟

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

السؤال الثاني: هل مفتاح الاستعادة هو بيانات اعتماد صالحة لمرة واحدة؟

لا، مفتاح الاستعادة ليس بيانات اعتماد تُستخدَم لمرة واحدة. لا يحتفظ "مدير بيانات الاعتماد" بأي حالة ولا يدرك نشاط المستخدم، لذا لا يمكنه حذف المفتاح تلقائيًا بعد الاستخدام.

تتم إزالة مفاتيح الاستعادة في الحالات التالية فقط:

  • الإجراءات على مستوى النظام: إلغاء المستخدمين تثبيت التطبيق أو محو بياناته
  • عمليات الحذف على مستوى التطبيق: يمكنك حذف المفتاح آليًا من خلال استدعاء CredentialManager#clearCredentialState() عند معالجة تسجيل خروج المستخدم في رمز تطبيقك.

السؤال 3. هل تعمل ميزة "استعادة بيانات الاعتماد" على جهاز جديد فقط؟

نعم، تم تصميم هذه الميزة لإعداد جهاز Android جديد في البداية، لأنّها مرتبطة مباشرةً بوظيفة "النسخ الاحتياطي والاستعادة" في النظام.

السؤال الرابع: هل يمكنني استخدام Restore Credentials لتسجيل دخول المستخدم تلقائيًا إلى أي جهاز تم تسجيل الدخول إليه باستخدام حساب Google نفسه؟

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

السؤال 5. لدى مؤسستي تطبيق رئيسي واحد وعدة تطبيقات فرعية. هل يمكن استخدام مفتاح احتياطي واحد لجميع هذه التطبيقات؟

لا، لأنّ مفتاح الاستعادة مرتبط باسم الحزمة الفريد للتطبيق. بما أنّ تطبيقك الرئيسي وكل تطبيق فرعي لهما أسماء حزم مختلفة، عليك إنشاء مفتاح استعادة منفصل لكل تطبيق.

السؤال 6: هل يجب استخدام مفتاح مرور لإنشاء مفتاح استرداد لحساب مستخدم؟

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

السؤال 7: هل يمكن للمستخدم حذف مفتاح الاستعادة؟

لا، لا يمكن للمستخدم التحكّم مباشرةً في مفتاح الاستعادة. منطق التطبيق هو المسؤول عن إدارة مفاتيح الاستعادة.

للحفاظ على الأمان، ننصح بأن يحذف التطبيق المفتاح تلقائيًا كلما سجّل المستخدم خروجه. يضمن ذلك أنّه في المرة التالية التي يفتح فيها المستخدم التطبيق على الجهاز نفسه، سيتم تسجيل خروجه بشكل سليم وسيُطلب منه تسجيل الدخول مرة أخرى.

السؤال 8. هل يمكنني استخدام Restore Credentials بدون ضبط allowBackup على "صحيح" في ملف البيان؟

نعم، تعمل ميزة "استعادة بيانات الاعتماد" بغض النظر عمّا إذا تم ضبط allowBackup على true أم لا.

السؤال 9: كيف ستعمل ميزة "استعادة بيانات الاعتماد" للمستخدمين الذين لديهم عدة حسابات مسجّلة الدخول على التطبيق نفسه؟

تم تصميم ميزة "استعادة بيانات الاعتماد" للعمل مع حساب واحد فقط في كل مرة.