حظر المتجر

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

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

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

وتشمل مزايا استخدام "متجر 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'
}

آلية العمل

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

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

حفظ الرمز المميز

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

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

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

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

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. ستحظر ميزة "متجر Play" من آن لآخر الاحتفاظ بنسخة احتياطية من وحدات البايت المخزنة في السحابة الإلكترونية عندما يتم ضبط السياسة 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 > الاحتفاظ بنسخة احتياطية)، تظل بيانات "متجر Play" مثبتة عبر التطبيق أو إلغاء تثبيته.

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

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

من جهاز إلى جهاز

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

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

  1. يمكنك دمج واجهة برمجة تطبيقات Blockstore في التطبيق التجريبي. ويجب إرسال التطبيق التجريبي إلى "متجر Play".
  2. على الجهاز المصدر، استخدِم التطبيق الاختباري لاستدعاء واجهة برمجة تطبيقات Blockstore لتخزين بياناتك، مع ضبط السياسة BackBackToCloud على "صحيح".
  3. بالنسبة إلى الأجهزة التي تعمل بالإصدار O والإصدارات الأحدث، يمكنك تشغيل النسخ الاحتياطي عبر السحابة الإلكترونية في متجر Play يدويًا: انتقل إلى الإعدادات > Google > الاحتفاظ بنسخة احتياطية، وانقر على الزر "النسخ الاحتياطي الآن".
    1. للتحقّق من نجاح عملية الاحتفاظ بنسخة احتياطية من السحابة الإلكترونية في "متجر Play"، يمكنك تنفيذ ما يلي:
      1. بعد انتهاء عملية الاحتفاظ بنسخة احتياطية، ابحث عن أسطر السجلّ التي تتضمّن العلامة "CloudSyncBpTkSvc".
      2. سترى أسطر على النحو التالي: "......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., size size: XXX بايت ..."
    2. بعد الاحتفاظ بنسخة احتياطية في السحابة الإلكترونية في "متجر Play"، يتم ضبط "فترة تبريد هادئة" لمدة 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 (واجهة برمجة التطبيقات 31) أو الإصدارات الأحدث.