حظر المتجر

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

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

تتضمن مزايا استخدام "متجر Play" ما يلي:

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

قبل البدء

لإعداد تطبيقك، أكمِل الخطوات الواردة في الأقسام التالية.

إعداد تطبيقك

في ملف build.gradle على مستوى المشروع، أدرِج مستودع Google Maven في كل من قسمَي buildscript وallprojects:

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

أضِف خدمات Google Play المرتبطة بواجهة برمجة تطبيقات متجر Play إلى ملف وحدة'وحدة تصميم Gradle، الذي يكون عادةً app/build.gradle:

dependencies {
  implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}

آلية العمل

"المتجر" هو آلية لتسجيل الدخول تعتمد على رمز مميّز يتم ترميزه بين الطرفين وإنشائه استنادًا إلى البنية الأساسية للنسخة الاحتياطية والاستعادة. توضّح الخطوات التالية آلية عمل تطبيق يستخدم ميزة "متجر Play":

  1. أثناء تدفق مصادقة تطبيقك أو في أي وقت بعد ذلك، يمكنك تخزين الرمز المميز لمصادقة المستخدم في متجر Play لاسترداده لاحقًا.
  2. وسيتم تخزين الرمز المميّز محليًا ويمكن الاحتفاظ بنسخة احتياطية منه أيضًا في السحابة الإلكترونية، ثم يتم ترميزه من طرف إلى طرف عند الإمكان.
  3. يتم نقل البيانات عندما يبدأ المستخدم في عملية استعادة على جهاز جديد.
  4. وإذا استعاد المستخدم تطبيقك أثناء عملية الاستعادة، يمكن للتطبيق حينئذٍ استرداد الرمز المميز المحفوظ من متجر Play على الجهاز الجديد.

جارٍ حفظ الرمز المميّز

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

يعرض النموذج التالي كيفية حفظ الرمز المميز للمصادقة على الجهاز المحلي:

val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.storeBytes(data)
        .addOnSuccessListener{ result ->
            Log.d(TAG, "Stored: ${result} bytes")
        }
        .addOnFailureListener { e ->
            Log.e(TAG, “Failed to store bytes”, e)
        }

جارٍ استرداد الرمز المميز

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

يوضّح النموذج التالي كيفية استرداد الرمز المميز المشفّر الذي تم تخزينه سابقًا باستخدام Store Store:

val client = Blockstore.getClient(this)
client.retrieveBytes()
            .addOnSuccessListener { result ->
                Log.d(TAG, "Retrieved: ${String(result)}")
            }
            .addOnFailureListener { e ->
                Log.e(TAG, "Failed to retrieve bytes", e)
            }
}

تشفير تام بين الأطراف

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

يعرض النموذج التالي كيفية التحقق مما إذا كان التشفير متاحًا أثناء النسخ الاحتياطي عبر السحابة الإلكترونية:

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
        }

تفعيل ميزة الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية

لتفعيل الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية، أضِف الطريقة setShouldBackupToCloud() إلى العنصر StoreBytesData. سيحتفظ تطبيق Store Store بنسخة احتياطية من السحابة الإلكترونية بشكل دوري في السحابة الإلكترونية عند ضبط setShouldBackupToCloud() على"صحيح".

يوضّح النموذج التالي كيفية تفعيل ميزة الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية فقط في حال خضعت هذه النسخة الاحتياطية للتشفير التام بين الأطراف:

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { isE2EEAvailable ->
          if (isE2EEAvailable) {
            storeBytesDataBuilder.setShouldBackupToCloud(true)
            Log.d(TAG, "E2EE is available, enable backing up bytes to the cloud.")

            client.storeBytes(storeBytesDataBuilder.build())
                .addOnSuccessListener { result ->
                  Log.d(TAG, "stored: ${result.getBytesStored()}")
                }.addOnFailureListener { e ->
                  Log.e(TAG, “Failed to store bytes”, e)
                }
          } else {
            Log.d(TAG, "E2EE is not available, only store bytes for D2D restore.")
          }
        }

كيفية الاختبار

استخدم الطرق التالية أثناء التطوير لاختبار مسارات الاستعادة.

إلغاء تثبيت الجهاز نفسه أو إعادة تثبيته

في حال فعَّل المستخدم خدمات"الاحتفاظ بنسخة احتياطية" (يمكن التحقُّق منها من الإعدادات > Google > الاحتفاظ بنسخة احتياطية)، يتم الاحتفاظ ببيانات"متجر التطبيقات"في عمليات إلغاء تثبيت التطبيق/إعادة تثبيته.

ويمكنك اتّباع الخطوات التالية لاختبار ما يلي:

  1. يمكنك دمج واجهة برمجة تطبيقات BlockStore مع تطبيقك التجريبي.
  2. يمكنك استخدام التطبيق التجريبي لاستدعاء واجهة برمجة تطبيقات BlockStore لتخزين بياناتك.
  3. أزِل تثبيت تطبيقك الاختباري ثم أعِد تثبيته على الجهاز نفسه.
  4. يمكنك استخدام التطبيق التجريبي لاستدعاء واجهة برمجة تطبيقات BlockStore لاسترداد بياناتك.
  5. تأكد من أن وحدات البايت التي تم استردادها هي نفسها التي تم تخزينها قبل إلغاء التثبيت.

من جهاز إلى آخر

في معظم الحالات، سيتطلب ذلك إعادة ضبط الجهاز المستهدف على الإعدادات الأصلية. يمكنك بعد ذلك إدخال عملية استعادة الاتصال اللاسلكي في Android أو استعادة كابل Google (للأجهزة المتوافقة).

استعادة السحابة الإلكترونية

  1. يمكنك دمج واجهة برمجة تطبيقات Blockstore في التطبيق التجريبي. يجب إرسال تطبيق الاختبار إلى "متجر Play".
  2. على الجهاز المصدر، استخدِم التطبيق الاختباري لاستدعاء واجهة برمجة تطبيقات حظر التخزين في تخزين بياناتك، مع ضبط set BackUpToCloud على "صحيح".
  3. بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل O والإصدارات الأحدث، يمكنك تشغيل ميزة"الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية"في متجر Play يدويًا: انتقِل إلى الإعدادات > Google وgt; الاحتفاظ بنسخة احتياطية، وانقر على الزر"الاحتفاظ بنسخة احتياطية الآن".
    1. للتأكّد من اكتمال عملية الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية من خلال "حظر المتجر"، يمكنك إجراء ما يلي:
      1. بعد انتهاء عملية الاحتفاظ بنسخة احتياطية، ابحث عن أسطر السجلّات التي تحتوي على العلامة "CloudSyncBpTkSvc".
      2. من المفترض أن تظهر لك الأسطر التالية: "......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., as {4/} size: XXX بايت ..."
    2. بعد الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية على "حظر المتجر"، يُتوقف لفترة 5 دقائق. وخلال 5 دقائق، لن يؤدي النقر على زر "الاحتفاظ بنسخة احتياطية الآن" إلى تشغيل النسخ الاحتياطي الإضافي على Cloud Store.
  4. إعادة ضبط الجهاز المستهدف على الإعدادات الأصلية وإجراء عملية استعادة للسحابة الإلكترونية. اختَر استعادة تطبيقك التجريبي أثناء عملية الاستعادة. للحصول على مزيد من المعلومات عن مسارات استعادة السحابة الإلكترونية، يُرجى الاطّلاع على مسارات استعادة السحابة الإلكترونية المتاحة.
  5. على الجهاز المستهدف، استخدِم تطبيق الاختبار لاستدعاء واجهة برمجة تطبيقات Blockstore لاسترداد بياناتك.
  6. تحقّق من أن وحدات البايت التي تم استردادها هي نفسها التي تم تخزينها في الجهاز المصدر.

متطلبات الأجهزة

ترميز تام بين الأطراف

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

تدفق استعادة الجهاز إلى الجهاز

ستتطلّب استعادة الجهاز إلى الجهاز أن يكون لديك جهاز مصدر وجهاز مستهدف. وسيكون هذان الجهازان اللذين ينقلان البيانات.

يجب أن تكون أجهزة المصدر تعمل بنظام التشغيل Android 6 (واجهة برمجة التطبيقات 23) والإصدارات الأحدث للاحتفاظ بنسخة احتياطية.

يمكنك استعادة الأجهزة التي تعمل بنظام التشغيل Android 9 (واجهة برمجة التطبيقات 29) والإصدارات الأحدث لتتمكن من استعادتها.

يمكن العثور على مزيد من المعلومات حول تدفق استعادة الجهاز إلى الجهاز هنا.

عملية النسخ الاحتياطي واستعادة البيانات على السحابة الإلكترونية

ستتطلب ميزة الاحتفاظ بنسخة احتياطية من البيانات واستعادتها في السحابة الإلكترونية جهازًا مصدرًا وجهازًا مستهدفًا.

يجب أن تكون أجهزة المصدر تعمل بنظام التشغيل Android 6 (واجهة برمجة التطبيقات 23) والإصدارات الأحدث للاحتفاظ بنسخة احتياطية.

تعتمد الأجهزة المستهدفة على أساس مورّديها. يمكن لأجهزة Pixel استخدام هذه الميزة من Android 9 (واجهة برمجة التطبيقات 29) وأن جميع الأجهزة الأخرى تعمل بنظام التشغيل Android 12 (API 31) أو إصدارات أحدث.