تتميز منتجات الشراء لمرة واحدة بمسار تطوّر أبسط من منتجات الاشتراك، ولكن لا تزال هناك العديد من الحالات وأحداث النقل التي يجب أن تتمكّن واجهة الخلفية من التعامل معها بشكل صحيح.
عمليات شراء جديدة لمنتجات يتم تحصيل سعرها مرة واحدة
بعد أن يُكمل المستخدم عملية الفوترة، يمكن لتطبيقك الاطّلاع على معلومات عن الشراء الجديد بإحدى الطريقتَين التاليتَين:
- يمكنك إعداد
Real-time developer notifications
تفعيلGet all notifications for subscriptions and one-time products
لتلقّي رسائل إلكترونية بشأن حالة عمليات الشراء. - استخدِم واجهة
PurchasesUpdatedListener
منBillingClient
لتلقّي آخر المعلومات حول عمليات الشراء تلقائيًا. - استخدِم الطريقة
BillingClient.queryPurchasesAsync()
.
بعد استلام عملية الشراء الجديدة، استخدِم الطريقة
getPurchaseState
أو
purchases.products.get in Play Developer API
لتحديد حالة الدفع لعملية الشراء الجديدة.
الإشعارات في الوقت الفعلي الخاصة بالمطوّرين
عندما يشتري مستخدم منتجًا يتم تحصيل سعره مرة واحدة أو يلغي عملية شرائه، يُرسِل Google Play رسالة OneTimeProductNotification
. لتعديل حالة الشراء في الخلفية، استخدِم رمز الشراء المقدَّم
في عنصر OneTimeProductNotification
للاتّصال بأسلوب
purchases.products.get
. تقدّم هذه الطريقة أحدث حالة شراء واستهلاك استنادًا إلى رمز مميّز
للشراء.
عند تنفيذ طلب مسبق وتغيير حالة الشراء إلى تم الشراء، يتم إرسال رسالة RTDN إلى عميلك. بعد استلام RTDN، عالج عملية شراء الطلب المُسبَق كما هو موضّح في مقالة معالجة عمليات شراء المنتجات لمرة واحدة في الخلفية.
يجب معالجة عناوين RTDN المرتبطة بالمعاملات في الخلفية الآمنة.
معالجة المعاملات المكتملة
عندما يُكمل المستخدم عملية شراء منتج لمرة واحدة، يُرسِل Google Play رسالة
OneTimeProductNotification
من النوع ONE_TIME_PRODUCT_PURCHASED
.
عند تلقّي إشعار RTDN هذا، عليك معالجة عملية الشراء كما هو موضّح في مقالة معالجة
عمليات شراء المنتجات لمرة واحدة في الخلفية.
التعامل مع المعاملات المُلغاة
عند إلغاء عملية شراء منتج يتم تحصيل سعره مرة واحدة، يرسل Google Play رسالة
OneTimeProductNotification
من النوع ONE_TIME_PRODUCT_CANCELED
إذا كنت قد فعّلت تلقّي إشعارات المطوّرين في الوقت الفعلي.
على سبيل المثال، يمكن أن يحدث ذلك إذا لم يكمل المستخدم الدفع خلال الإطار الزمني المطلوب، أو إذا ألغى المطوّر عملية الشراء أو إذا طلب العميل ذلك. عندما يتلقّى خادم الخلفية هذا الإشعار، اتصل بالطريقة
purchases.products.get
للحصول على أحدث حالة شراء، ثم عدِّل الخلفية وفقًا لذلك،
بما في ذلك أذونات المستخدم.
إذا تم ردّ الأموال المدفوعة مقابل عملية شراء لمنتج يتم تحصيل سعره مرة واحدة وحالتها Purchased
، سيتم إعلامك أيضًا
من خلال Voided Purchases API.
معالجة عمليات شراء المنتجات لمرة واحدة في الخلفية
سواء رصدت عملية شراء جديدة من خلال ONE_TIME_PRODUCT_PURCHASED
إشعار في الوقت الفعلي للمطوّرين (RTDN)
أو تم إعلامك بها داخل التطبيق من خلال
PurchasesUpdatedListener
أو جلب عمليات الشراء يدويًا في onResume()
method في
تطبيقك، عليك معالجة عملية الشراء الجديدة. ننصحك بمعالجة عمليات الشراء في الخلفية لتوفير مستوى أمان أفضل.
اتّبِع الخطوات التالية لمعالجة عملية شراء جديدة لمرة واحدة:
- يمكنك طلب بيانات من نقطة نهاية
purchases.products.get
للحصول على أحدث حالة لعملية شراء منتج لمرة واحدة. لاستدعاء هذه الطريقة لإجراء عملية شراء، تحتاج إلىpurchaseToken
المرتبط بها إما من تطبيقك أو منONE_TIME_PRODUCT_PURCHASED
إشعارات الوقت الفعلي الخاصة بالمطوّرين. - اتّصل بالدعم على الرقم
getPurchaseState()
وتأكّد من أنّ حالة الشراء هيPURCHASED
. - التأكّد من عملية الشراء
- امنح المستخدم إذن الوصول إلى المحتوى. يمكن تحديد حساب المستخدم المرتبط
بعملية الشراء باستخدام الحقل
obfuscatedExternalAccountId
منpurchases.products.get
، إذا تم ضبط حساب باستخدامsetObfuscatedAccountId()
عند إجراء عملية الشراء.- في عمليات شراء المنتجات غير الاستهلاكية، يجب الإقرار بتسليم المحتوى
من خلال استدعاء الأسلوب
purchases.products.acknowledge
. تأكَّد من أنّه لم يتم الموافقة على عملية الشراء من قبل من خلال وضع علامة في الحقلacknowledgementState
. - إذا كان المنتج استهلاكيًا، ضَع علامة على السلعة تشير إلى أنّها مستهلكة من خلال استدعاء الأسلوب
purchases.products.consume
لكي يتمكّن المستخدم من شراء السلعة مرة أخرى بعد استهلاكها. تُقرّ هذه الطريقة أيضًا بعملية الشراء.
- في عمليات شراء المنتجات غير الاستهلاكية، يجب الإقرار بتسليم المحتوى
من خلال استدعاء الأسلوب
تتوفّر أيضًا طرق تأكيد الشراء واستهلاكه في مكتبة Play Billing Library التي تتيح لك معالجة عمليات الشراء من تطبيقك، ولكننا ننصح بمعالجة الطلبات في الخلفية إذا كان لديك لتنفيذ أكثر أمانًا.