حظر المتجر

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

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

قبل البدء

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

إعداد تطبيقك

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

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

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

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

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

آلية العمل

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

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

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

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

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

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" أولاً من المستخدم، ثم تسترد بيانات "متجر المتجر". وافق المستخدم من قبل على استعادة بيانات التطبيق كجزء من عملية الاستعادة، لذلك لا حاجة إلى الحصول على موافقات إضافية. عندما يفتح المستخدم تطبيقك، يمكنك طلب رمزك المميَّز من "متجر حظر التطبيقات" من خلال الاتصال بالرقم retrieveBytes(). ويمكن بعد ذلك استخدام الرمز المميَّز الذي تم استرداده للاحتفاظ بإمكانية تسجيل دخول المستخدم على الجهاز الجديد.

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

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. سيتم من خلال ميزة "حظر المتجر" الاحتفاظ بنسخة احتياطية بشكل منتظم في السحابة الإلكترونية التي تحتوي على وحدات البايت المخزّنة عند ضبط السياسة 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.")
          }
        }

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

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

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

إذا فعَّل المستخدم خدمات "الاحتفاظ بنسخة احتياطية" (يمكن التحقّق من ذلك من خلال الإعدادات &gt؛ Google &gt؛ الاحتفاظ بنسخة احتياطية)، ستظل بيانات حظر المتجر متاحة عبر إلغاء تثبيت التطبيق أو إعادة تثبيته.

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

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

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

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

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

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

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

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

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

استعادة البيانات من جهاز إلى آخر

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

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

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

يمكنك الاطّلاع هنا على مزيد من المعلومات حول مسار استعادة الجهاز.

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

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

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

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