مع ازدياد شعبية تطبيقك، قد يجذب أيضًا انتباه المستخدمين الضارين الذين قد يرغبون في إساءة استخدامه. يقدّم هذا الموضوع اقتراحات يمكنك اتّباعها للمساعدة في منع هذه الهجمات على عملية تكامل الفوترة وتقليل تأثير إساءة الاستخدام في تطبيقك.
نقل المنطق الحسّاس إلى الخلفية
بقدر ما يسمح به تصميم تطبيقك، يمكنك نقل البيانات الحساسة والمنطق إلى خادم خلفي تتحكّم فيه. كلما زادت البيانات والمنطق في جهاز الواجهة الأمامية، زادت احتمالية تعديله أو التلاعب به.
على سبيل المثال، يجب أن تتحقّق لعبة الشطرنج على الإنترنت من صحة جميع الحركات في الخلفية بدلاً من الوثوق بأنّ الواجهة الأمامية ترسل دائمًا حركات قانونية.
بالإضافة إلى ذلك، إذا رصدت ثغرات أو مشاكل أمنية، قد يكون من الأسهل تصحيح الأخطاء وإصلاحها وطرح التحديثات في الخلفية بدلاً من الواجهة الأمامية، وذلك حسب تصميم نظامك.
إثبات ملكية عمليات الشراء قبل منح الأذونات
من الحالات الخاصة للبيانات الحسّاسة والمنطق الذي يجب التعامل معه في الخلفية هي عملية إثبات ملكية عمليات الشراء وتأكيدها. بعد أن يجري المستخدم عملية شراء، عليك اتّباع الخطوات التالية:
- أرسِل
purchaseToken
المقابل إلى الخلفية. وهذا يعني أنّه عليك الاحتفاظ بسجلّ لجميع قيمpurchaseToken
لجميع عمليات الشراء. - تأكَّد من أنّ قيمة
purchaseToken
لعملية الشراء الحالية لا تتطابق مع أي قيمpurchaseToken
سابقة.purchaseToken
فريد على مستوى العالم، لذا يمكنك استخدام هذه القيمة بأمان كمفتاح أساسي في قاعدة البيانات. - استخدِم نقطتَي النهاية
Purchases.products:get
أوPurchases.subscriptionsv2:get
في Google Play Developer API لإثبات صحة عملية الشراء لدى Google. - إذا كانت عملية الشراء قانونية ولم يتم استخدامها في الماضي، يمكنك بعد ذلك منح إذن الوصول إلى المنتج أو الاشتراك داخل التطبيق بأمان.
- بالنسبة إلى الاشتراكات، عند ضبط
linkedPurchaseToken
فيPurchases.subscriptionsv2:get
، عليك أيضًا إزالةlinkedPurchaseToken
من قاعدة البيانات وإلغاء الإذن الممنوح لـlinkedPurchaseToken
لضمان عدم حصول عدة مستخدمين على الإذن نفسه مقابل عملية الشراء نفسها. - يجب منح إذن الوصول فقط عندما تكون حالة الشراء
PURCHASED
، ويجب التأكّد من التعامل مع عمليات الشراء التي تحمل الحالةPENDING
بشكل صحيح. في حال حدوث ارتفاع كبير في عدد عمليات شراءCANCELED
، قد تمنح المستخدمين أذونات الوصول عندما تكون عملية الشراء لا تزال في الحالةPENDING
. يمكنك الاطّلاع على مزيد من المعلومات في مقالة التعامل مع المعاملات المعلّقة. بعد منح إذن الوصول، إذا أردت استهلاك منتج قابل للاستهلاك والإقرار بذلك، استخدِم واجهة
Purchases.products:consume
Play Developer API على خادم الخلفية الآمن. للإقرار باستلام منتج غير قابل للاستهلاك أو اشتراك، اتّصِل بنقطة النهاية ذات الصلة في Play Developer API، إماPurchases.products:acknowledge
أوPurchases.subscriptions:acknowledge
، على خادم الخلفية الآمن. ويجب تقديم إقرار لأنّه يُعلم Google Play بأنّه تم منح المستخدم إذن الوصول إلى المنتج الذي اشتراه. يجب الإقرار بإتمام عملية الشراء فور منح الإذن.يُرجى العِلم أنّه على الرغم من إمكانية إقرار عملية الشراء أو استهلاكها من جهة العميل من خلال تطبيقك، فإنّ واجهات برمجة التطبيقات من جهة الخادم توفّر حماية إضافية من المشاكل، مثل ضعف الاتصال بالشبكة والنشاط الضار. على سبيل المثال، لنفترض أنّ أحد المستخدمين اشترى منتجًا من تطبيقك، ولكن انقطع اتصاله بالشبكة أثناء التحقّق من صحة عملية الشراء. بدون إقرار من الخادم، قد يحتاجون إلى تسجيل الدخول مرة أخرى من خلال التطبيق لإكمال عملية الإقرار. في حال عدم تسجيل الدخول مجددًا خلال ثلاثة أيام، سيتم ردّ الأموال تلقائيًا بسبب عدم الإقرار بإتمام عملية الشراء. يمنع الإقرار من الخادم حدوث هذا السيناريو من خلال إرسال إقرار فور إرسال Google Play إشعارًا إلى الخادم بأنّ عملية الشراء صالحة.
لمزيد من المعلومات حول الإقرار بعمليات الشراء والاستهلاك، اطّلِع على مقالة معالجة عمليات الشراء.
حماية المحتوى غير المحظور
لمنع المستخدمين الضارين من إعادة توزيع المحتوى غير المحظور، لا تضمّنه في ملف APK. بدلاً من ذلك، اتّخِذ أحد الإجراءات التالية:
- استخدِم خدمة في الوقت الفعلي لتقديم المحتوى، مثل خلاصة المحتوى. يتيح لك تقديم المحتوى من خلال خدمة في الوقت الفعلي أيضًا الحفاظ على حداثة المحتوى.
- استخدِم خادمًا بعيدًا لتقديم المحتوى.
عند عرض المحتوى من خادم بعيد أو خدمة في الوقت الفعلي، يمكنك تخزين المحتوى غير المحمي في ذاكرة الجهاز أو على بطاقة SD الخاصة بالجهاز. إذا كنت تخزّن المحتوى على بطاقة SD، احرص على تشفيره واستخدام مفتاح تشفير خاص بالجهاز.
رصد عمليات الشراء الملغاة والتعامل معها
المشتريات الملغاة هي المشتريات التي تم إلغاؤها أو إبطالها أو ردّ أموالها. إذا كانت عملية الشراء الملغاة قد منحت المستخدم سلعًا داخل التطبيق أو محتوى آخر، يمكنك استخدام Voided Purchases API لمعرفة سبب إلغاء عملية الشراء بالإضافة إلى أي محتوى مرتبط يمكنك استرداده.
يمكن إلغاء عمليات شراء السلع داخل التطبيق والاشتراكات لعدة أسباب، بما في ذلك ما يلي:
- يتم إلغاء عملية شراء من قِبل المستخدم أو المطوّر أو Google (بما في ذلك عمليات الشراء التي تم إلغاؤها تلقائيًا ولم يتم الإقرار بها). بالنسبة إلى الاشتراكات، يُرجى العِلم أنّ هذا يشير إلى إلغاء شراء اشتراك، وليس إلى إلغاء الاشتراك نفسه.
- تم استرداد الأموال المدفوعة مقابل عملية شراء.
- يلغي مطوّر التطبيق طلب المستخدم أو يردّ أمواله ويضع علامة في مربّع الاختيار "إلغاء" في وحدة التحكّم.
استنادًا إلى سبب إبطال عملية الشراء، مع أخذ بيانات السلوك السابقة للمستخدم في الاعتبار، يمكنك اتّخاذ قرار بشأن الإجراء المناسب. ننصحك بتنفيذ إجراء واحد أو أكثر مما يلي:
- إجراء عمليات استرداد: عند إلغاء عملية شراء، يمكنك استرداد العناصر غير المستخدَمة كما لو لم يتم شراؤها مطلقًا. على سبيل المثال، إذا تم إلغاء عملية شراء عملة داخل اللعبة، يمكنك استرداد العملة التي تم منحها للمستخدم. في حال أنفق المستخدم العملة الافتراضية، ننصحك بضبط رصيد العملة على قيمة سالبة وتقييد نشاط التطبيق وعمليات الشراء المستقبلية إلى أن يصبح رصيد العملة موجبًا.
- تنفيذ نظام الإنذارات المتعدّدة: ننصح باتّخاذ إجراءات أقل صرامة مع المخالفين للمرة الأولى، مثل عرض تحذيرات داخل التطبيق. بالنسبة إلى المخالفين المتكررين، ننصح باتّخاذ تدابير أكثر صرامة.
- إيقاف عمليات الشراء مؤقتًا: على غرار تنفيذ نظام الإنذارات المتعددة، ننصحك بإيقاف عمليات الشراء مؤقتًا للمستخدمين الذين أجروا عمليات شراء تم إبطالها إلى أن تتمكّن من التحقيق بشكل أكثر شمولاً في سبب إبطال عمليات الشراء.
- منع الوصول إلى تطبيقك مؤقتًا أو نهائيًا: في الحالات القصوى التي يتكرّر فيها النشاط الضار، ننصحك بمنع الوصول إلى تطبيقك، سواء بشكل مؤقت أو نهائي.
- إجراء طلبات متكررة إلى واجهة برمجة التطبيقات Voided Purchases API: عند رصد عملية شراء تم إبطالها أو أكثر، ننصحك بإجراء طلبات متكررة إلى واجهة برمجة التطبيقات Voided Purchases API لاسترداد عمليات الشراء قبل أن يتمكّن المستخدم من استهلاكها. يمكنك الاطّلاع على مزيد من المعلومات حول حصص Voided Purchases API في مستندات Voided Purchases API.
مساعدة Google في رصد عمليات الاحتيال قبل حدوثها
ترتبط بعض أنواع الاحتيال بالمستخدمين الضارين الذين ينشئون حسابات متعدّدة على Google وداخل التطبيقات لإخفاء نشاطهم.
استخدِم الطريقتَين
setObfuscatedAccountId
و
setObfuscatedProfileId
في أداة الإنشاء
BillingFlowParams
للمساعدة في ربط حسابات Google بالحسابات داخل التطبيق.
تستخدم Google هذه البيانات لرصد السلوك المريب وحظر بعض أنواع المعاملات الاحتيالية قبل إكمالها.
اتّخاذ إجراءات ضدّ انتهاك حقوق العلامات التجارية وحقوق الطبع والنشر
إذا كنت تستخدم خادمًا بعيدًا لعرض المحتوى أو إدارته، اطلب من تطبيقك التحقّق من حالة شراء المحتوى الذي تم إلغاء قفله كلما أراد المستخدم الوصول إلى المحتوى. يتيح لك ذلك إبطال الاستخدام عند الضرورة والحدّ من القرصنة. إذا لاحظت إعادة توزيع المحتوى الخاص بك على Google Play، احرص على اتّخاذ إجراءات سريعة وحاسمة. لمزيد من التفاصيل، يُرجى الاطّلاع على صفحة الأسئلة الشائعة عن حقوق الطبع والنشر في "مركز مساعدة حقوق الطبع والنشر".