لقد نفّذت للتوّ خدمة "الفوترة في Play" في تطبيق Android أو تطبيق الويب التقدّمي، وأصبح بإمكان المستخدمين شراء سلعك الرقمية. حان الوقت الآن لتنفيذ بعض المكوّنات الرئيسية في "خدمة الفوترة في Play" على خادم الخلفية.
واجهة برمجة تطبيقات مطوّر برامج Google Play
تتضمّن واجهة Google Play Developer API مكوّنَين هما: واجهة برمجة التطبيقات "الاشتراكات وعمليات الشراء داخل التطبيق" وواجهة Publishing API. تتألف واجهة برمجة التطبيقات Subscriptions and In-app Purchases API من موارد REST التالية للمساعدة في إدارة المنتجات وعمليات الشراء:
inappproducts: إدارة قائمة المنتجات والاشتراكات داخل التطبيق-
purchases.products: حالة شراء المنتجات داخل التطبيق purchases.subscriptions: حالة شراء الاشتراكات وإدارتها
يمكنك استخدام Google Play Developer API مباشرةً كواجهة REST API، أو يمكن أن تساعدك مكتبات البرامج في بدء عملية التطوير بسرعة. يمكنك العثور على مكتبات البرامج لجميع اللغات المتوافقة هنا. اتّبِع دليل بدء الاستخدام لواجهة Google Play Developer API لربط مشروع واجهة برمجة التطبيقات وإعداد برامج الوصول إلى واجهة برمجة التطبيقات.
إدراج جميع المنتجات داخل التطبيق
عند طلب تفاصيل المنتجات المتاحة في الواجهة الأمامية (على تطبيق Android أو تطبيق الويب التقدّمي)، يجب تحديد قائمة بمعرّفات المنتجات. يمكنك تنفيذ ذلك في خادم الخلفية باستخدام طريقة inappproducts.list في Play Developer API التي ستعرض جميع المنتجات داخل التطبيق والاشتراكات التي أنشأتها في Play Console. احرص على التحقّق من status كل منتج وإرسال المنتجات التي تحمل القيمة active فقط إلى عميل تطبيقك.
إثبات ملكية عمليات الشراء قبل منح الأذونات
من الأجزاء المهمة في تنفيذ خدمة الفوترة في Play في تطبيق Android أو تطبيق الويب التقدّمي التأكّد من التحقّق من عمليات الشراء قبل منح المستخدم إذن الوصول إلى المنتج. عند منح المستخدم إذن استخدام، فإنّك تمنحه إمكانية الوصول إلى المزايا أو المحتوى المرتبط بالمنتج الذي اشتراه. وبما أنّ ذلك يتطلّب التعامل مع بيانات حسّاسة، يجب أن يتم ذلك على خادم الواجهة الخلفية.
توفّر واجهة برمجة التطبيقات Google Play Developer API الطريقتَين purchases.products:get وpurchases.subscriptions:get. استخدِم هذه الرموز مع رموز الشراء التي يتم استردادها داخل التطبيق أو تخزينها على خادم الخلفية للتأكّد من أنّ عملية الشراء قانونية. عليك تتبُّع رموز الشراء المميزة على خادم الخلفية لإجراء عمليات شراء إضافية والتحقّق من أذونات المستخدم. راجِع مستندات "الفوترة في Google Play" حول تأكيد عمليات الشراء للحصول على مزيد من التفاصيل حول الخطوات التي يجب اتّخاذها.
عمليات شراء داخل التطبيق
بعد تلقّي رمز الشراء المميّز من العميل، يجب أن يطلب الخلفية من Google Play Developer API التحقّق من أنّه لم يتم استخدامه من قبل. قيمة الحقل purchaseState لعملية شراء صالحة هي 1.
إذا كانت عملية الشراء صالحة، يجب أن يقرّ العميل بإتمام عملية الشراء ويمنح الإذن بعد تلقّي الرد من الخادم.
عمليات شراء الاشتراكات
على غرار التحقّق من عمليات الشراء داخل التطبيق، يجب أن يستدعي خادم الخلفية Google Play Developer API بعد تلقّي الرمز المميز لعملية الشراء من العميل، وأن يتأكّد من أنّ الاشتراك لا يزال صالحًا.
على العميل منح الإذن إذا كان الحقل expiryTimeMillis الخاص بالاشتراك أكبر من الوقت الحالي.
هذا هو الوقت المناسب أيضًا للتحقّق من الحقل linkedPurchaseToken وتعديل قاعدة بيانات الاشتراكات بشكل مناسب للتعامل مع عمليات الترقية وخفض المستوى وغير ذلك من إجراءات الاشتراك. سنتناول في بقية هذه الصفحة المزيد من التفاصيل.
تعديل حالة الخلفية باستمرار
إذا كان تطبيقك متاحًا على منصات مختلفة (قد تستخدم أيضًا طرق دفع مختلفة)، سيضمن تتبُّع المستخدمين وعمليات الشراء على خادم الخلفية إمكانية وصول المستخدمين إلى الأذونات نفسها على الأجهزة والمنصات التي يستخدمون تطبيقك عليها.
يمكن أن يكون ذلك بسيطًا مثل توفير قاعدة بيانات تحتفظ فيها بسجلّ للمستخدمين وأذوناتهم الحالية. بعد ذلك، يمكنك تعديلها وفقًا لعمليات الشراء التي يجريها المستخدم أو المحتوى الذي يستهلكه. في المرة التالية التي يصل فيها المستخدم إلى تطبيقك من منصة مختلفة، يمكنك استرداد الأذونات المناسبة من الخلفية ليتمكّن المستخدم من الوصول إلى التطبيق.
التعامل مع تغييرات حالة الاشتراك
يمكن أن يمرّ الاشتراك بتغييرات مختلفة في حالته طوال دورة حياته، وعليك التأكّد من الاستجابة لكل تغيير منها على النحو المناسب. مزيد من المعلومات حول إدارة دورة حياة الاشتراك للحفاظ على تحديث الخلفية دائمًا
Subscription linkedPurchaseToken
كما هو موضّح في مستندات الاشتراكات، يؤدي كل مسار شراء جديد على Google Play (عملية شراء أولية أو ترقية أو تخفيض مستوى) إلى إنشاء رمز مميّز جديد لعملية الشراء. يتيح الحقل linkedPurchaseToken التعرّف على الحالات التي تتضمّن رموز شراء متعددة تنتمي إلى الاشتراك نفسه.
في كل مرة تثبت فيها ملكية اشتراك، يجب أن يتحقّق الخلفية مما إذا كان الحقل linkedPurchaseToken مضبوطًا. إذا كان الأمر كذلك، تمثّل القيمة في هذا الحقل الرمز المميّز السابق الذي تم استبداله الآن. عليك على الفور وضع علامة على الرمز المميز السابق باعتباره غير صالح حتى لا يتمكّن المستخدمون من استخدامه للوصول إلى المحتوى الخاص بك.
على سبيل المثال، عندما يتلقّى الخلفية الرمز المميّز للشراء A لعملية الشراء الأولية، مع حقل linkedPurchaseToken فارغ، فإنّه يتيح الاستفادة من المنتج لهذا الرمز المميّز. في وقت لاحق، عندما يتلقّى الخلفية رمز شراء جديدًا B بعد الترقية، يتحقّق من الحقل linkedPurchaseToken، ويرى أنّه تم ضبطه على A، ويوقف إذن استخدام رمز الشراء A.

للحصول على مناقشة تفصيلية حول تنفيذ linkedPurchaseToken، يُرجى الانتقال إلى مقالة تنفيذ linkedPurchaseToken بشكل صحيح لمنع الاشتراكات المكرّرة.
الإشعارات في الوقت الفعلي الخاصة بالمطوّرين
تُعدّ طريقة purchases.subscriptions:get في Google Play Developer API هي المصدر الموثوق لإدارة اشتراكات المستخدمين. إذا كنت تدير حالة المشتركين على خادم خلفي آمن، عليك إبقاء حالته متزامنة مع خوادم Google. ومع ذلك، يمكن أن يؤدي الاستطلاع المتكرّر لواجهة Google Play Developer API إلى تجاوز القيود المفروضة على حصة واجهة برمجة التطبيقات وحدوث تأخيرات في تلقّي الإشعارات بشأن إجراءات المستخدمين المهمة (مثل إلغاء الاشتراك أو ترقيته).
الإشعارات في الوقت الفعلي الخاصة بالمطوّرين هي إحدى ميزات "الفوترة في Google Play" التي تُرسل إلى خادمك إشعارًا فوريًا عند تغيُّر حالة إذن الوصول الممنوح للمشترك (مثل شراء اشتراك أو إلغائه أو تعليقه). باستخدام إشعارات RTDN، يمكنك إبقاء قاعدة بيانات المشتركين متزامنة من خلال الردّ على هذه الإشعارات فقط، بدلاً من فحص Google Play Developer API بانتظام.
سيتلقّى خادم الخلفية SubscriptionNotification للأحداث التي تؤثّر في حالة الاشتراك، مثل عمليات التجديد والإلغاء. بعد ذلك، يمكنك طلب Google Play Developer API باستخدام رمز الشراء في الإشعار للحصول على الحالة الكاملة وتعديل حالة الخلفية الخاصة بك.
يمكنك ضبط ميزة RTDN لتطبيقك باتّباع هذه التعليمات. بعد ذلك، عليك إعداد خادم الخلفية لاستهلاك هذه الرسائل.
يمكنك الاطّلاع على مرجع RTDN الكامل لمزيد من المعلومات.