مراحل نشاط الشراء لمرة واحدة

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

الشكل 1 حالات رحلة المستخدِم وأحداث النقل لعمليات الشراء لمرة واحدة

عمليات شراء جديدة لمنتجات يتم تحصيل سعرها مرة واحدة

بعد أن يُكمل المستخدم عملية الفوترة، يمكن لتطبيقك الاطّلاع على معلومات عن الشراء الجديد بإحدى الطريقتَين التاليتَين:

بعد استلام عملية الشراء الجديدة، استخدِم الطريقة 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 في تطبيقك، عليك معالجة عملية الشراء الجديدة. ننصحك بمعالجة عمليات الشراء في الخلفية لتوفير مستوى أمان أفضل.

اتّبِع الخطوات التالية لمعالجة عملية شراء جديدة لمرة واحدة:

  1. يمكنك طلب بيانات من نقطة نهاية purchases.products.get للحصول على أحدث حالة لعملية شراء منتج لمرة واحدة. لاستدعاء هذه الطريقة لإجراء عملية شراء، تحتاج إلى purchaseToken المرتبط بها إما من تطبيقك أو من ONE_TIME_PRODUCT_PURCHASED إشعارات الوقت الفعلي الخاصة بالمطوّرين.
  2. اتّصل بالدعم على الرقم getPurchaseState() وتأكّد من أنّ حالة الشراء هي PURCHASED.
  3. التأكّد من عملية الشراء
  4. امنح المستخدم إذن الوصول إلى المحتوى. يمكن تحديد حساب المستخدم المرتبط بعملية الشراء باستخدام الحقل obfuscatedExternalAccountId من purchases.products.get، إذا تم ضبط حساب باستخدام setObfuscatedAccountId() عند إجراء عملية الشراء.
    1. في عمليات شراء المنتجات غير الاستهلاكية، يجب الإقرار بتسليم المحتوى من خلال استدعاء الأسلوب purchases.products.acknowledge. تأكَّد من أنّه لم يتم الموافقة على عملية الشراء من قبل من خلال وضع علامة في الحقل acknowledgementState.
    2. إذا كان المنتج استهلاكيًا، ضَع علامة على السلعة تشير إلى أنّها مستهلكة من خلال استدعاء الأسلوب purchases.products.consume لكي يتمكّن المستخدم من شراء السلعة مرة أخرى بعد استهلاكها. تُقرّ هذه الطريقة أيضًا بعملية الشراء.

تتوفّر أيضًا طرق تأكيد الشراء واستهلاكه في مكتبة ‎ Play Billing Library التي تتيح لك معالجة عمليات الشراء من تطبيقك، ولكننا ننصح بمعالجة الطلبات في الخلفية إذا كان لديك لتنفيذ أكثر أمانًا.