رصد حالات إساءة الاستخدام المتكررة باستخدام ميزة "تذكُّر الجهاز" (ميزة تجريبية)

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

كيف تتم عملية سحب الجهاز؟

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

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

المتطلبات الأساسية والاعتبارات المتعلقة بميزة "تذكُّر الجهاز"

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

تتطلّب ميزة "تذكُّر الجهاز" الشروط المسبقة التالية:

  • يمكن استخدام ميزة "استرجاع الجهاز" على الهواتف والأجهزة اللوحية والهواتف القابلة للطي والتلفزيون وAuto وWear OS. على Wear، لا تتوفّر ميزة "استرجاع الجهاز" إلا على الأجهزة التي تعمل بالإصدار 5 من نظام التشغيل Wear OS أو الإصدارات الأحدث. لا تتوفّر ميزة "استرجاع الجهاز" على المحاكيات.
  • تتطلّب ميزة "استرجاع الجهاز" تثبيت أحدث إصدارات كل من "متجر Google Play" و"خدمات Google Play" وتفعيلها على الجهاز.
  • تتطلّب ميزة "إلغاء تثبيت التطبيقات" أن يكون حساب المستخدم مرخّصًا من Play، وإلا ستكون النتيجة غير مقيّمة.

يجب مراعاة ما يلي عند تحديد توقيت سحب الجهاز:

  • بعد إثبات صحة رمز مميّز للسلامة، لديك مدة تصل إلى 14 يومًا لاستخدامه في تخزين بيانات مخصّصة لميزة "تذكُّر الجهاز".
  • يتضمّن سجلّ استدعاء الجهاز الطوابع الزمنية حتى تتمكّن من منح الأولوية للبيانات التي تم تعديلها مؤخرًا مقارنةً بالبيانات التي تم تعديلها منذ فترة طويلة. ننصحك بتجاهل البيانات أو إعادة ضبطها بعد فترة زمنية طويلة بما يكفي، وذلك لمراعاة أنّ الأجهزة يمكن أن تنتقل من مالك إلى آخر أو يتم تجديدها وإعادة بيعها.
  • سيتم تخزين وحدات الاستدعاء لجهاز لمدة 3 سنوات بعد آخر عملية قراءة أو كتابة.
  • إذا كنت بحاجة إلى حذف جميع البيانات المرتبطة بجهاز، يمكن لتطبيقك إعادة ضبط جميع القيم الثلاث على هذا الجهاز إلى "خطأ". سيؤدي ذلك إلى إعادة ضبط الطوابع الزمنية تلقائيًا.

بالنسبة إلى المطوّرين الذين لديهم تطبيقات متعددة والمطوّرين الذين ينقلون التطبيقات، تعمل ميزة "استدعاء الجهاز" على النحو التالي:

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

تفعيل ميزة "تذكُّر الجهاز"

عندما تكون مستعدًا، فعِّل ميزة "استرجاع الجهاز" في Play Console باتّباع الخطوات التالية:

  1. سجِّل الدخول إلى Play Console.
  2. اختَر التطبيق الذي سيستخدم ميزة "تذكُّر التطبيقات والأحداث".
  3. في قسم الإصدار من القائمة اليمنى، انتقِل إلى سلامة التطبيق.
  4. بجانب Play Integrity API، انقر على الإعدادات.
  5. في قسم "الردود" من الصفحة، انقر على تغيير الردود.
  6. فعِّل ميزة "استرجاع الجهاز".
  7. انقُر على "حفظ التغييرات".

عند تفعيل ميزة "استرجاع الجهاز" أو إيقافها، سيتم حذف أي ردود على اختبارات Play Integrity API أعددتها في Play Console، وسيكون عليك إنشاؤها مرة أخرى.

قراءة قيم ميزة "تذكُّر الجهاز"

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

تعديل قيم ميزة "تذكُّر الجهاز"

يمكنك تعديل قيم ميزة "تذكُّر الجهاز" من خلال إجراء طلب من الخادم إلى الخادم لواجهة برمجة التطبيقات، على غرار فك تشفير حكم السلامة. سيؤدي ضبط قيمة البت على true إلى تعديل تاريخ الكتابة أيضًا (حتى إذا كانت القيمة true من قبل). سيؤدي ضبط قيمة البت على false إلى إعادة ضبط تاريخ الكتابة إلى قيمة فارغة. ستبقى أي أجزاء غير محدّدة في الطلب بدون تغيير. هناك تأخير بسيط في الانتشار بين كتابة البتات وإمكانية قراءتها مرة أخرى في الحكم. يمكن أن يصل هذا التأخير إلى 30 ثانية، ولكنّه عادةً ما يكون أقصر بكثير. يجب أن تكون طلبات الكتابة في سجلّ عمليات استدعاء الأجهزة أقل تكرارًا من طلبات الرموز المميّزة الخاصة بالسلامة. ولا يتم احتسابها ضمن حصة طلبات الرموز المميزة للسلامة، ولكنّها تخضع لحدود معدّل وقائية غير علنية.

playintegrity.googleapis.com/v1/PACKAGE_NAME/deviceRecall:write -d \
'{
  "integrityToken": "INTEGRITY_TOKEN",
  "newValues": {
    "bitFirst": true,
    "bitThird": false
  }
}'
newValues.BitFirst = true // ForceSendFields optional for value true
newValues.BitSecond = false // ForceSendFields required for value false
newValues.BitThird = nil // do not set ForceSendFields for unspecified bits
newValues.ForceSendFields = []string{"BitSecond"}