لمحة عن الاشتراكات

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

في حال عدم ضبط منتجات الاشتراك لتطبيقك، يُرجى الاطّلاع على إنشاء منتجاتك وضبطها

نظرة عامة على الاشتراكات

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

يمكن أن تكون لديك اشتراكات متعددة في التطبيق نفسه، إما تمثل مجموعات مختلفة من المزايا، أو فئات مختلفة من مجموعة المزايا (المستوى "الفضي" و"المستوى الذهبي"، على سبيل المثال).

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

للحصول على نظرة عامة مفصّلة حول المنتجات المتوفّرة عند الاشتراك والخطط الأساسية والعروض، يُرجى يمكنك الاطّلاع على المستندات في مركز مساعدة Play Console

دمج خطط الدفع المُسبق

لا يتم تجديد خطط الدفع المُسبق تلقائيًا عند انتهاء صلاحيتها. لتوسيع استحقاق الاشتراك بدون انقطاع، على المستخدم إضافة رصيد خطة دفع مُسبَق للاشتراك نفسه

لإجراء عمليات إضافة رصيد، ابدأ تدفق الفوترة كما تفعل مع العملية الأصلية عملية الشراء. لا تحتاج إلى الإشارة إلى ما إذا كانت عملية الشراء تشمل إضافة رصيد.

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

بعد إجراء إضافة رصيد، ستظهر الحقول التالية في Purchase يتم تعديل عنصر النتيجة ليعكس آخر عملية شراء تمت إضافتها:

  • معرف الطلب
  • وقت الشراء
  • التوقيع
  • الرمز المميز للشراء
  • مواضيع تمت الموافقة عليها

تحتوي حقول Purchase التالية دائمًا على البيانات نفسها المتوفّرة في عملية الشراء الأصلية:

  • اسم الحزمة
  • حالة الشراء
  • المنتجات
  • التجديد التلقائي

الإقرار بإجراء عملية شراء مُسبَقة الدفع

على غرار الاشتراكات التي يتم تجديدها تلقائيًا، يجب الإقرار بخطط الدفع المُسبَق بعد الشراء. يجب إجراء كل من عملية الشراء الأولية وأي عمليات إضافة رصيد تم الإقرار. لمزيد من المعلومات، يُرجى مراجعة معالجة عمليات الشراء:

نظرًا لاحتمالية تقصير مدة خطة الدفع المُسبَق، من المهم والإقرار بعملية الشراء في أقرب وقت ممكن.

يجب الإقرار بخطط الدفع المُسبق التي تبلغ مدتها أسبوع واحد أو أكثر خلال ثلاثة أيام.

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

دمج اشتراكات الأقساط

اشتراك الأقساط هو نوع اشتراك يدفع المستخدمون من خلاله مقابل الاشتراك على أقساط متعدّدة خلال فترة زمنية معيّنة بدلاً من الدفع رسوم الاشتراك الكاملة مقدّمًا

اعتبارات إضافية لاشتراكات الأقساط:

  • مدى التوفّر في البلدان: تتوفّر ميزة الاشتراكات بالأقساط فقط. في البرازيل وفرنسا وإيطاليا وإسبانيا (راجع Console لمعرفة آخر أخبار توفر الخدمة)
  • ضبط السعر: عند تحديد سعر اشتراك بالتقسيط في وحدة التحكم، يمثّل السعر مبلغ الدفعة الشهرية. هذا، إلى جانب مدة الاشتراك المحدّدة، ينتج عنها إجمالي المبلغ للاشتراك في شاشة الشراء
  • فترة الاشتراك: إجمالي مدة الاشتراك الأولي مدة الاشتراك، والتي يلزم خلالها تسديد دفعات شهرية. على سبيل المثال، إذا كانت مدة الاشتراك 15 شهرًا في الخطة الأساسية، سيقدّم المستخدم 15 شهرًا دفعات خلال هذه الفترة.
  • عمليات التجديد: "تجديد" في سياق اشتراكات الأقساط تشير إلى انتهاء فترة الالتزام، سواء كانت فترة الالتزام المبدئية أو فترة الالتزام اللاحقة. بعد الاشتراك الأولي، يكون التجديد الأول عند اكتمال فترة الاشتراك الأولية بالكامل. التالي وتجديدها بعد انقضاء كل فترة اشتراك تالية. تشير رسالة الأشكال البيانية أنواع تجديد الاشتراكات بالأقساط إلى "شهريًا" بشكل تلقائي أو "يتمّ تجديد الاشتراك تلقائيًا للمدة نفسها". وبالنسبة إلى "عمليات التجديد التلقائي كلّ شهر"، ما مِن الاشتراك اللاحق والخطة بمثابة اشتراك شهري تشير كل رسوم اشتراك شهرية إلى تجديد.
  • مدة الفوترة: في سياق الاشتراكات بالأقساط، تشير إلى إلى الفاصل الزمني المتكرر الذي يتم فيه سداد الدفعات الفردية، على النحو المحدد في الخطة الأساسية.
  • التغيُّر في الخطة مقابل سلوكيات تغيير الأسعار: للاطّلاع على تغييرات الأسعار عمليات الإلغاء، فإن الالتزام صارم. هذا يعني أنه إذا أراد المستخدم الإلغاء أو رغبة المطور في تغيير السعر، يسري التغيير أو نهاية مدة الاشتراك. بالنسبة إلى تغييرات الخطة، فإن الالتزام ليس صارمًا. هذا يعني أن تغيير الخطة لا يجب أن ينتظر حتى نهاية فترة الاشتراك، تسري هذه المدة إمّا على الفور أو على الدفعة التالية. التاريخ استنادًا إلى وضع الاستبدال المحدد.
  • تغيير خطة الاشتراك نفسها: تغيير الخطة من خطة تقسيط أساسية أو بخطة أساسية غير مقسَّمة على المنتج نفسه المتوفّرة عند الاشتراك مسموح به.
  • إشعارات في الوقت الفعلي خاصة بالمطوّرين (RTDN): أ يتم إرسال SUBSCRIPTION_CANCELLATION_SCHEDULED RTDN مباشرةً عند عملية إلغاء أجراها المستخدم عندما تظل الدفعات طوال مدة الاشتراك عملية الإلغاء في انتظار المراجعة ولن يتم تطبيقها إلا في نهاية مدة الاشتراك. بعد ذلك، إذا لم يستعيده المستخدم، SUBSCRIPTION_CANCELED. وSUBSCRIPTION_EXPIRED إرسال RTDN في نهاية مدة الاشتراك.

  • العوائد أو تحقيق الأرباح: يتم تقديم عائدات المطوّرين عندما يحقّق المستخدمون دفعاتهم الشهرية، ويخضعون للبنود نفسها المطبّقة على جميع الاشتراكات الأخرى. ولا يتم الدفع للمطوّرين مقدّمًا عندما يشترك المستخدم في خطّة تقسيط. اشتراكك.

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

  • مدى توفُّر Play Billing Library: حقل installmentDetails متاح فقط متاحة للإصدار 7 من PBL أو الإصدارات الأحدث. بالنسبة إلى PBL 5 والإصدارات الأحدث، يجب أن تكون الأقساط يتم إرجاع الاشتراك باستخدام queryProductDetails()، إلا أنّ الاشتراك لن يتضمّن معلومات الأقساط التفصيلية، مثل عدد الدفعات المُلتزَم بها. من الخطة.

استخدام روابط لصفحات في التطبيق للسماح للمستخدمين بإدارة اشتراك

يجب أن يتضمّن تطبيقك رابطًا في شاشة الإعدادات أو الإعدادات المفضَّلة يسمح إدارة اشتراكات المستخدمين، ويمكنك دمجها في المظهر والطابع الطبيعي.

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

استخدم عنوان URL التالي لتوجيه المستخدمين إلى الصفحة التي تعرض جميع الاشتراكات، كما هو موضح في الشكلين 1 و2:

https://play.google.com/store/account/subscriptions
تعرض شاشة اشتراكات "متجر Play" حالة جميع اشتراكات المستخدم التي تم تحصيل فواتيرها على Google Play.
الشكل 1. تعرض شاشة اشتراكات "متجر Play" حالة جميع اشتراكات المستخدم التي تم تحصيل فواتيرها على Google Play.


انقر على اشتراك للاطّلاع على تفاصيل إضافية.
الشكل 2. انقر على اشتراك للاطّلاع على محتوى إضافي التفاصيل.

قد يكون هذا الرابط لصفحة في التطبيق مفيدًا لمساعدة المستخدم على استعادة اشتراك تم إلغاؤه. من مركز الاشتراكات في "متجر Play"

للربط مباشرةً بصفحة إدارة اشتراك غير منتهي الصلاحية، يُرجى تحديد اسم الحزمة وproductId المرتبطَين بالاشتراك الذي تم شراؤه. إلى تحديد productId آليًا لاشتراك حالي، أو طلب بحث خلفية تطبيقك أو الاتصال بالرقم BillingClient.queryPurchasesAsync() للحصول على قائمة من الاشتراكات المرتبطة بمستخدم معيّن يحتوي كل اشتراك على productId المقابلة كجزء من معلومات حالة الاشتراك. كل كائن SubscriptionPurchaseLineItem مرتبط بـ عملية شراء الاشتراك تحتوي على القيمة productId المرتبطة الاشتراك الذي اشتراه المستخدم في هذا البند

استخدِم عنوان URL التالي لتوجيه المستخدمين إلى إدارة اشتراك محدّدة. مع استبدال "your-sub-product-id" و"your-app-package" مع productId واسم حزمة التطبيق على التوالي:

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

يمكن للمستخدم بعد ذلك إدارة طرق الدفع والوصول إلى الميزات بما في ذلك الإلغاء وإعادة الاشتراك والإيقاف المؤقت

السماح للمستخدمين بترقية اشتراكاتهم أو الرجوع إلى إصدار سابق منها أو تغيير اشتراكهم

يمكنك تزويد المشتركين الحاليين بخيارات متنوعة لتغيير خطة اشتراك لتلبية احتياجاتهم بشكل أفضل:

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

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

يوضح الشكل 3 مثالاً لتطبيق بثلاث خطط مختلفة:

يتضمن هذا التطبيق ثلاثة فئات للاشتراك.
الشكل 3. يتضمن هذا التطبيق ثلاثة مستويات للاشتراك.

يمكن أن يعرض تطبيقك شاشة مشابهة للشكل 3، ما يمنح المستخدمين خيارات لتغييره. اشتراكاتهم. في جميع الحالات، يجب أن يكون واضحًا للمستخدمين ما إذا كانوا خطة الاشتراك، والخيارات المتاحة لتغييرها.

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

أوضاع الاستبدال

يسرد الجدول التالي أوضاع الاستبدال المتاحة وأمثلة على الاستخدام، وعدد الدفعات التي تُعتبر مدفوعة

وضع الاستبدال

الوصف

مثال على الاستخدام

الدفعات المُلتزمة المسجَّلة على أنّها مدفوعة (لاستبدال خطة تقسيط)

WITH_TIME_PRORATION

تتم ترقية الاشتراك أو الرجوع إلى إصدار سابق على الفور. يتم تعديل أي وقت متبقٍ استنادًا إلى فرق السعر، وإضافته إلى الاشتراك الجديد من خلال تأجيل تاريخ الفوترة التالي. وهذا هو السلوك التلقائي.

يمكنك الترقية إلى فئة بسعر أعلى، بدون أي دفعة إضافية فورية.

0

CHARGE_PRORATED_PRICE

تتم ترقية الاشتراك على الفور وتظل دورة الفوترة كما هي. ويتم بعد ذلك تحصيل فرق السعر عن الفترة المتبقية من المستخدم.

ملاحظة: لا يتوفر هذا الخيار إلا لترقية الاشتراك، حيث يتم تحديد السعر لكل وحدة زمنية تزيد.

يمكنك الترقية إلى فئة بتكلفة أعلى بدون تغيير تاريخ الفوترة.

1

CHARGE_FULL_PRICE

تتم ترقية الاشتراك أو الرجوع إلى إصدار سابق على الفور، ويصبح المستخدم تحصيل السعر الكامل للإذن الجديد على الفور. القيمة المتبقية من الاشتراك السابق إما يتم نقله إلى الحساب نفسه حق الوصول أو تُقسَّم حسب الوقت عند التبديل إلى استحقاق مختلف.

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

يمكنك الترقية من مدة فوترة أقصر إلى أطول.

1 (ملاحظة: 0 إذا كان الاشتراك الجديد يتضمن فترة تجريبية مجانية).

WITHOUT_PRORATION

تتم ترقية الاشتراك أو الرجوع إلى إصدار سابق على الفور، ويتم تحصيل السعر الجديد عند تجديد الاشتراك. وتظل دورة الفوترة كما هي.

يمكنك الترقية إلى فئة اشتراك أعلى مع الاحتفاظ بأي فترة مجانية متبقية.

0

DEFERRED

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

الاشتراك في خطة أقلّ تكلفة

1

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

ضبط وضع الاستبدال لعملية شراء

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

إعادة الاشتراك أو تبديل الخطط ضمن الاشتراك نفسه

يمكنك تحديد وضع الاستبدال التلقائي في Google Play Console. هذا النمط يتيح لك اختيار وقت تحصيل الرسوم من المشتركين الحاليين عند الشراء خطة أساسية أو عرض مختلف للاشتراك نفسه أو إعادة الاشتراك بعد الإلغاء. الخيارات المتاحة هي تحصيل الرسوم فورًا، أي ما يعادل CHARGE_FULL_PRICE وتحصيل الرسوم في تاريخ الفوترة التالي، أي ما يعادل WITHOUT_PRORATION هذه هي أوضاع الاستبدال الوحيدة ذات الصلة عندما تبديل الخطط الأساسية ضمن الاشتراك نفسه

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

يمكنك تبديل الخطط بين الاشتراكات أو إلغاء وضع الاستبدال التلقائي.

في حال كان المستخدم يغيِّر منتجات الاشتراك، شراء منتجات أو إذا كنت تريد إلغاء وضع الاستبدال التلقائي لأي عليك تحديد نسبة التناسب في وقت التشغيل كجزء من مسار الشراء المعلَمات.

لتوفير "SubscriptionUpdateParams" بشكل صحيح كجزء من عملية الشراء في بيئة التشغيل لاحظ القيود التالية:

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

أمثلة وسلوكيات الاستبدال

لفهم كيفية عمل كل وضع نسبي، يجب مراعاة السيناريو التالي:

لدى Samwise اشتراك في محتوى على الإنترنت من تطبيق country Gardener. هو لديه اشتراك شهري في إصدار المستوى 1 من المحتوى والتي تكون نصية فقط. يكلفه الاشتراك $2 دولار أمريكي شهريًا، ويتم تجديده في اليوم الأول من الشهر.

في 15 نيسان (أبريل)، اختار مؤسسة Samwise الترقية إلى الإصدار السنوي من المستوى 2. الاشتراك، الذي يتضمّن تحديثات الفيديو وتبلغ تكلفته 36 دولارًا أمريكيًا سنويًا.

عند ترقية الاشتراك، يختار المطوّر وضعًا تناسبيًا. تشير رسالة الأشكال البيانية توضح القائمة التالية كيفية تأثير كل وضع نسبي في اشتراك Samwise:

WITH_TIME_PRORATION

ينتهي اشتراك Samwise في المستوى 1 على الفور. لأنه دفع مقابل شهر (1-30 أبريل) لكن تمت ترقيته في منتصف فترة الاشتراك، بنصف تطبيق اشتراك لمدة شهر واحد ($1) على اشتراكه الجديد. ومع ذلك، نظرًا لأن يبلغ سعر الاشتراك الجديد 36 دولارًا أمريكيًا في السنة، ويدفع الرصيد الائتماني بقيمة 1 دولار أمريكي مقابل 10 دولارات فقط يوم (من 16 إلى 25 أبريل) لذلك في 26 أبريل، تم تحصيل 36 دولارًا منه مقابل اشتراك جديد مبلغ 36 دولارًا آخر في 26 أبريل من كل سنة تالية.

يجب عليك استدعاء اسم تطبيقك PurchasesUpdatedListener في اللحظة التي نجاح عملية الشراء، وستتمكن من استرداد عملية الشراء الجديدة كجزء من مكالمة queryPurchasesAsync(). تتلقى الواجهة الخلفية على الفور إشعار واحد (SUBSCRIPTION_PURCHASED) في الوقت الفعلي للمطوّرين

CHARGE_PRORATED_PRICE

يمكن استخدام هذا الوضع بسبب سعر الاشتراك في المستوى 2 لكل وحدة زمنية. (36 دولار أمريكي في السنة = 3 دولار أمريكي في الشهر) أكبر من سعر اشتراك المستوى 1 لكل مرة (دولاران في الشهر). ينتهي اشتراك Samwise في المستوى 1 على الفور. لأنه تم الدفع مقابل شهر كامل، ولكنه استخدم نصفه فقط، أي نصف اشتراك الشهر يتم استخدام ($1) على اشتراكه الجديد. ومع ذلك، ونظرًا لأن هذا الاشتراك الجديد بتكلفة 36 دولارًا في السنة، وتبلغ تكلفة الأيام الـ 15 المتبقية 1.50 دولار؛ لذلك تم تحميل بفارق 0.50 دولار أمريكي مقابل اشتراكه الجديد. في 1 أيار (مايو)، تم تحصيل مبلغ 36 دولار أمريكي من قناة Samwise. لفئة الاشتراك الجديدة و36 دولار أمريكي أخرى في 1 أيار (مايو) من كل عام بعد ذلك.

يجب عليك استدعاء اسم تطبيقك PurchasesUpdatedListener في اللحظة التي نجاح عملية الشراء، وستتمكن من استرداد عملية الشراء الجديدة كجزء من مكالمة queryPurchasesAsync(). تتلقى الواجهة الخلفية على الفور إشعار واحد (SUBSCRIPTION_PURCHASED) في الوقت الفعلي للمطوّرين

WITHOUT_PRORATION

تتم ترقية اشتراك Tier 1 من Samwise مباشرةً إلى المستوى 2 بدون رسوم إضافية، وفي 1 أيار (مايو)، تم تحصيل 36 دولارًا أمريكيًا (أو ما يعادله بالعملة المحلية) مقابل مستوى اشتراكه الجديد مبلغ 36 دولارًا آخر في الأول من مايو من كل عام.

يجب عليك استدعاء اسم تطبيقك PurchasesUpdatedListener في اللحظة التي نجاح عملية الشراء، وستتمكن من استرداد عملية الشراء الجديدة كجزء من مكالمة queryPurchasesAsync(). تتلقى الواجهة الخلفية على الفور إشعار واحد (SUBSCRIPTION_PURCHASED) في الوقت الفعلي للمطوّرين

DEFERRED

يستمر اشتراك Samwise في المستوى 1 حتى انتهاء صلاحيته في 30 نيسان (أبريل). في أيار (مايو) أولاً، يتم تطبيق اشتراك Tier 2، ويتم تحصيل 36 دولار أمريكي من Samwise مقابل فئة الاشتراك الجديدة التي يقدّمها

يجب عليك استدعاء اسم تطبيقك PurchasesUpdatedListener في اللحظة التي نجاح عملية الشراء، وستتمكن من استرداد عملية الشراء الجديدة كجزء من مكالمة queryPurchasesAsync(). تتلقى الواجهة الخلفية على الفور إشعار واحد (SUBSCRIPTION_PURCHASED) في الوقت الفعلي للمطوّرين عليك معالجة عملية الشراء بالطريقة نفسها التي تتم بها معالجة أي عملية شراء جديدة أخرى في هذه المرحلة. وعلى وجه الخصوص، احرص على الموافقة على عملية الشراء الجديدة. ملاحظة أنّه تمت تعبئة startTime للاشتراك الجديد في لحظة تفعيل عملية الاستبدال، وهو ما يحدث عندما لانتهاء صلاحية الاشتراك. ستحصل في هذه المرحلة على SUBSCRIPTION_RENEWED RTDN لخطة الاشتراك الجديدة يمكنك قراءة المزيد عن سلوك واحد (ReplacementMode.DEFERRED) في التعامل مع الاستبدال المؤجل:

CHARGE_FULL_PRICE

ينتهي اشتراك Samwise في المستوى 1 على الفور. اشتراكه في المستوى 2 يبدأ اليوم ويخصم منه 36 دولارًا أمريكيًا. لأنه دفع لمدة شهر كامل ولكنه استخدم نصفها فقط، فيتم تطبيق نصف الاشتراك لمدة شهر ($1) على اشتراكك. نظرًا لأن الاشتراك الجديد يكلف 36 دولارًا في السنة، فسيحصل على 1/36 سنة إضافية إلى فترة اشتراكه (حوالي 10 أيام). لذلك، يعتبر نهج سامويك سيتم تحصيل الرسوم القادمة بعد سنة واحدة و10 أيام من اليوم مقابل 36 دولارًا أمريكيًا. بعد ذلك، يتم تحصيل 36 دولارًا أمريكيًا (أو ما يعادله بالعملة المحلية) كل سنة تالية.

عند اختيار وضع التناسب، احرص على مراجعة اقتراحات الاستبدال.

تشغيل تغييرات الاشتراك داخل التطبيق

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

Kotlin

val offerToken = productDetails
        .getSubscriptionOfferDetails(selectedOfferIndex)
        .getOfferToken()

val billingParams = BillingFlowParams.newBuilder().setProductDetailsParamsList(
       listOf(
           BillingFlowParams.ProductDetailsParams.newBuilder()
               .setProductDetails(productDetails)
               .setOfferToken(offerToken)
               .build()
       )
       ).setSubscriptionUpdateParams(
           BillingFlowParams.SubscriptionUpdateParams.newBuilder()
               .setOldPurchaseToken("old_purchase_token")
               .setSubscriptionReplacementMode(
                 BillingFlowParams.ReplacementMode.CHARGE_FULL_PRICE
               )
               .build()
       ).build()

billingClient.launchBillingFlow(
    activity,
    billingParams
   )
// ...

Java

String offerToken = productDetails
    .getSubscriptionOfferDetails(selectedOfferIndex)
    .getOfferToken();

BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(
        ImmuableList.of(
            ProductDetailsParams.newBuilder()
                // fetched via queryProductDetailsAsync
                .setProductDetails(productDetails)
                // offerToken can be found in
                // ProductDetails=>SubscriptionOfferDetails
                .setOfferToken(offerToken)
                .build()))
    .setSubscriptionUpdateParams(
        SubscriptionUpdateParams.newBuilder()
            // purchaseToken can be found in Purchase#getPurchaseToken
            .setOldPurchaseToken("old_purchase_token")
            .setSubscriptionReplacementMode(ReplacementMode.CHARGE_FULL_PRICE)
            .build())
    .build();

BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// ...

اقتراحات الاستبدال

يوضح الجدول التالي سيناريوهات التوزيع التناسبي المختلفة بالإضافة إلى ما أوصي بها لكل سيناريو:

السيناريو وضع الاستبدال المقترَح النتيجة
الترقية إلى فئة بسعر أعلى CHARGE_PRORATED_PRICE يحصل المستخدم على إذن الوصول على الفور مع الاحتفاظ بالفوترة نفسها. الفترة.
الرجوع إلى مستوى أقل تكلفة DEFERRED دفع المستخدم بالفعل مقابل الفئة الأكثر تكلفة، لذلك يحتفظ حتى تاريخ الفوترة التالي.
الترقية أثناء الفترة التجريبية المجانية، مع الاحتفاظ بالتجربة WITHOUT_PRORATION يحتفظ المستخدم بإمكانية الوصول المجاني إلى الإصدار التجريبي، ولكن عند الترقيات إلى مستوى أعلى الفترة المتبقية من الفترة التجريبية.
الترقية أثناء استخدام الإصدار التجريبي المجاني - إنهاء إمكانية الوصول إلى الإصدار التجريبي المجاني CHARGE_PRORATED_PRICE يحصل المستخدم على إذن الوصول إلى الفئة الجديدة على الفور، ولكن ليس بعد ذلك. لديه فترة تجريبية مجانية.

التعامل مع عمليات الشراء عند تغيير الاشتراك

إنّ تغييرات الخطة هي عمليات شراء جديدة لجميع الأحكام والأغراض، ويجب أن تكون تتم معالجتها والإقرار بذلك بعد اكتمال عملية الفوترة بنجاح. فبالإضافة إلى معالجة عملية الشراء الجديدة بشكل مناسب، إلغاء عملية الشراء التي يتم استبدالها.

ويكون السلوك داخل التطبيق مماثلاً لأي عملية شراء جديدة. يتلقّى تطبيقك نتيجة عملية الشراء الجديدة في PurchasesUpdatedListener عملية شراء جديدة متاحة في queryPurchasesAsync.

تعرض واجهة برمجة التطبيقات Google Play Developer API رمز linkedPurchaseToken في مورد اشتراك عندما تحل عملية شراء محل شراء حالي واحد. يُرجى التأكّد من إلغاء صلاحية الرمز المميّز المقدَّم في "linkedPurchaseToken" من أجل: تأكَّد من عدم استخدام الرمز المميّز القديم للوصول إلى خدماتك. عرض عمليات الترقية والرجوع إلى إصدار سابق وعمليات إعادة الاشتراك للحصول على معلومات حول كيفية التعامل مع الترقية والرجوع إلى إصدار سابق من عمليات الشراء

عندما تتلقّى رمز الشراء الجديد، اتّبِع خطوات عملية إثبات الملكية نفسها. من خلال إثبات ملكية رمز مميّز جديد للشراء احرص على الإقرار بهذه البنود عمليات الشراء باستخدام BillingClient.acknowledgePurchase() من Google Play Billing Library أو Purchases.subscriptions:acknowledge من واجهة برمجة تطبيقات مطوّر برامج Google Play.

التعامل مع الاستبدال المؤجل

يتيح لك وضع الاستبدال المؤجل السماح للمستخدم بالاستفادة من المبلغ المتبقّي حق الوصول في خطتهم القديمة قبل البدء في الخطة الجديدة.

عند استخدام ReplacementMode.DEFERRED لعملية شراء جديدة، إرجاع queryPurchasesAsync() رمز مميز جديد للشراء بعد عملية الشراء التدفق الذي يظل مرتبطًا بالمنتج القديم إلى أن يتم الاستبدال المؤجل في تاريخ التجديد التالي، وبعد انتهاء هذا التاريخ عاد.

سابقًا، كان بإمكانك تحقيق تجربة المستخدم هذه من خلال تطبيق "ProrationMode.DEFERRED"، ولكن تم إيقاف "ProrationMode.DEFERRED" نهائيًا من خلال Play مكتبة الفوترة 6. راجِع الجدول التالي لفهم مكان السلوك يختلف:

الوقت

ProrationMode.DEFERRED (متوقّف نهائيًا)

استبدال وضع.DEFERRED

بعد نجاح مسار الشراء مباشرةً (التطبيق)

يتم استدعاء PurchasesUpdatedListener بعد الشراء مع عرض حالة ما إذا كانت الترقية أو الرجوع إلى إصدار سابق ناجحة.

ويستمر استحقاق الخطة القديمة حتى تاريخ التجديد التالي. للتأكّد من أنّ التطبيق يمنح الأذونات المناسبة، يعرض queryPurchasesAsync() عنصر "عملية شراء" يحتوي على رمز الشراء الأصلي وإذن الوصول الأصلي إلى أن يتم الاستبدال.

لم يتم عرض رمز الشراء المميّز الجديد، لذا لا يمكن معالجته في هذه المرحلة.

يتم استدعاء PurchasesUpdatedListener بعد الشراء مع عرض حالة ما إذا كانت الترقية أو الرجوع إلى إصدار سابق ناجحة.

يعرض queryPurchasesAsync() عملية الشراء باستخدام رمز الشراء الجديد على الفور، وإذن الاستخدام الأصلي المرتبط به.

يتم عرض الرمز المميّز الجديد للشراء، لذا يجب معالجته عند هذه النقطة مع مراعاة موعد إجراء الاستبدال.

بعد نجاح مسار الشراء مباشرةً (الخلفية)

لا يتم إرسال SUBSCRIPTION_PURCHASED RTDN بعد مسار الشراء لم يتم إعلام الخلفية بعملية الشراء الجديدة بعد.

يتم إرسال SUBSCRIPTION_PURCHASED RTDN باستخدام معرّف product_id القديم مباشرةً بعد مسار الشراء للرمز المميّز الجديد للشراء.

يؤدي طلب طريقة purchases.subscriptionsv2.get باستخدام الرمز المميّز الجديد للشراء إلى إرجاع عملية شراء تتضمّن "startTime" التي تشير إلى وقت الشراء من خلال عنصرَين:

  • عنصر يمثّل الاستحقاق القديم وبه السمة "expiryTime" في المستقبل. لن يتم تجديد الإذن القديم ويحتوي على DeferredItemReplacement يحتوي على منتج الاستحقاق الجديد. يشير ذلك إلى استبدال الإذن القديم في انتظار المراجعة عند انتهاء صلاحيته.
  • تمثّل هذه السمة إذن الاستخدام الذي تم شراؤه حديثًا. لم يتم ضبط قيمة لـ "expiryTime".

تم إرسال SUBSCRIPTION_EXPIRED للرمز المميز القديم للشراء. عند طلب طريقة purchases.subscriptionsv2.get باستخدام رمز الشراء القديم، تظهر الحالة على أنّها منتهي الصلاحية (يتم نقل استحقاق الخطة القديمة إلى عملية الشراء الجديدة للفترة المتبقية).

عند الاستبدال - التجديد الأول بعد مسار الشراء (التطبيق)

تعرض queryPurchasesAsync() عنصر "شراء" جديدًا بإذن شراء ورمز مميز جديد.

يظهر الآن الرمز المميّز الجديد للشراء، لذا يجب معالجته.

يعرض queryPurchasesAsync() عملية الشراء باستخدام رمز الشراء الجديد على الفور، والإذن الجديد المرتبط به.

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

عند الاستبدال - التجديد الأول بعد مسار الشراء (الخلفية)

يمكن الآن معالجة عملية الشراء الجديدة والإقرار بها عند إرسال أول SUBSCRIPTION_RENEWED RTDN.

يمكن استخدام linkedPurchaseToken في مورد الاشتراك لتحديد المستخدم الذي يجب تحديثه في الخلفية للاشتراك، إذا كان ذلك منطبقًا، بالإذن الجديد.

تمت معالجة عملية الشراء الجديدة والإقرار بها عند إرسال SUBSCRIPTION_PURCHASED RTDN للرمز المميّز الجديد للشراء وتسجيله كـ "startTime".

من خلال تطبيقReplacementMode.DEFERRED، تسري عمليات التجديد الأولى على السلوك العادي لأي عملية تجديد أخرى ولن تحتاج إلى اتّباع منطق خاص لعمليات الاستبدال عند تنفيذ هذا الحدث.

عند طلب طريقة purchases.subscriptionsv2.get باستخدام الرمز المميّز الجديد للشراء، يتم إرجاع عملية شراء تتضمّن عنصرَين:

  • أحدهما يمثّل الاستحقاق القديم، مع وجود `expiryTime` في الماضي بدون قيمة معيّنة لـ DeferredItemReplacement.
  • واحد يمثّل الاستحقاق الجديد، مع ضبط وقت انتهاء الصلاحية على "وقت انتهاء الصلاحية" في المستقبل وتفعيل العلامة auto_renewing_enabled.

يجب استخدام replaceMode.DEFERRED من الآن بدلاً من الإيقاف النهائي ProrationMode.DEFERRED، لأنّه يقدّم السلوك نفسه في ما يتعلّق بإذن الوصول إلى الموقع الإلكتروني التغييرات، ولكنها توفر طريقة لإدارة عملية الشراء بشكل أكثر اتساقًا مع وسلوكيات المستخدمين لعمليات الشراء الجديدة الأخرى.

إدارة العملاء

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

بعد أن يلغي المستخدم اشتراكه، يمكنك محاولة استعادته. إما في تطبيقك أو من خلال متجر Play. يوضّح الجدول التالي سيناريوهات الاشتراك المختلفة بالإضافة إلى إجراءات استعادة الاشتراكات متطلبات التطبيقات.

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

التطبيقات التي لا تستخدم الإصدار 2.0 من Billing Library أو الإصدارات الأحدث: لا

التطبيقات التي تستخدم الإصدار 2.0 من Billing Library أو الإصدارات الأحدث: نعم. يمكن للمطوّرين إيقاف هذه الميزة في Console.

متى يتم تحصيل رسوم من المستخدم

في حال استخدام رمز التخزين التعريفي نفسه: نهاية المدة الزمنية الحالية للفوترة.

في حال استخدام رمز تخزين تعريفي مختلف: يعتمد ذلك على وضع التقسيم.

نهاية المدة الزمنية الحالية للفوترة فورًا فورًا
التنفيذ مطلوب تقديم المِنح واجهة مستخدم لإعادة الاشتراك في تطبيقك

رصد التغيير في حالة الاشتراك

رابط لصفحة معيّنة في "متجر Play"

توفير واجهة مستخدم لإعادة الاشتراك في تطبيقك التعامل مع عمليات الشراء خارج التطبيق

قبل انتهاء الاشتراك: داخل التطبيق

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

في معظم الأحيان، ستريد أن تقدم للمستخدم نفس السعر ورمز التخزين التعريفي الذي يستخدمه سبق لهم الاشتراك فيها، على النحو التالي:

  • ابدأ عملية شراء اشتراك جديد باستخدام رمز التخزين التعريفي نفسه.
  • يحل الاشتراك الجديد محل الاشتراك القديم ويتم تجديده في تاريخ انتهاء الصلاحية نفسه. التاريخ. يتم فورًا وضع علامة "منتهي الصلاحية" على الاشتراك القديم.
  • على سبيل المثال، لدى Achilles اشتراك في Example Music App، أن تنتهي صلاحية الاشتراك في 1 آب (أغسطس). في 10 تموز (يوليو)، أعاد الاشتراك في الاشتراك لمدة شهر واحد بالسعر نفسه شهريًا الاشتراك الجديد يتم تقسيمه بالتناسب مع الرصيد المتبقي وأن يكون نشطًا على الفور ولا يزال يتم تجديدها في 1 آب (أغسطس).

إذا أردت تقديم سعر مختلف، على سبيل المثال فترة تجريبية مجانية جديدة أو خصم استعادة الاشتراكات - يمكنك بدلاً من ذلك تقديم رمز تخزين تعريفي مختلف للمستخدم:

  • يمكنك بدء الترقية أو الرجوع إلى إصدار سابق باستخدام رمز تخزين تعريفي مختلف. باستخدام وضع الاستبدال WITHOUT_PRORATION.
  • يحل الاشتراك الجديد محل الاشتراك القديم ويتم تجديده في تاريخ انتهاء الصلاحية نفسه. التاريخ. يتم تحصيل سعر رمز التخزين التعريفي الجديد من المستخدم، بما في ذلك بأسعار تمهيدية في تاريخ انتهاء الصلاحية الأصلي. إذا كان الاشتراك القديم تم إنشاؤه باستخدام رقم تعريف حساب مشفّر، يجب تمرير رقم التعريف نفسه إلى BillingFlowParams للحصول على الترقيات والرجوع إلى الإصدارات السابقة.
  • على سبيل المثال، لدى Achilles اشتراك في Example Music App، أن تنتهي صلاحية الاشتراك في 1 آب (أغسطس). في 10 تموز (يوليو)، أعاد الاشتراك في اشتراك سنوي بسعر تمهيدي الاشتراك الجديد نشطة على الفور، ويتم تحصيل السعر التمهيدي من المستخدم 1 آب (أغسطس)
  • إذا قررت تضمين فترة تجريبية مجانية أو سعر تمهيدي في رمز التخزين التعريفي لاسترداد الميزات للتأكد من أن المستخدم مؤهل من خلال إلغاء تحديد مربع السماح لفترة تجريبية مجانية واحدة لكل تطبيق في Google Play Console، أن يحصل المستخدم على نسخة تجريبية مجانية واحدة لكل تطبيق.

عندما تتلقى رمز الشراء المميز، معالجة عملية الشراء تمامًا كما في الاشتراك الجديد بالإضافة إلى ذلك، إنّ واجهة برمجة التطبيقات Google Play Developer API تعرِض linkedPurchaseToken في مورد الاشتراك. تأكد من إلغاء صلاحية الرمز المميّز المقدَّم في linkedPurchaseToken للتأكد من عدم استخدام الرمز المميز القديم الوصول إلى خدماتك.

قبل انتهاء صلاحية الاشتراك - في "متجر Play"

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

قسم الاشتراكات في تطبيق متجر Google Play يعرض
            تم إلغاء الاشتراك باستخدام زر "إعادة الاشتراك"
الشكل 8. الحساب > قسم الاشتراكات في تطبيق "متجر Google Play" يعرض اشتراكًا تم إلغاؤه مع زر إعادة الاشتراك

لمزيد من المعلومات حول استعادة الاشتراكات، يمكنك الاطّلاع على الاستعادة.

بعد انتهاء الاشتراك: داخل التطبيق

يمكنك السماح للمشتركين الذين انتهت صلاحية اشتراكاتهم بإعادة الاشتراك داخل تطبيقك من خلال تقديم طلب جديد. نفس مسار شراء المنتج داخل التطبيق كما هو الحال بالنسبة للمشتركين الجدد. لاحظ التالي:

  • لتقديم خصم للمستخدمين، قد تحتاج إلى تقديم معرِّف منتج مع تضمين والذي يسمّى أيضًا رمز تخزين تعريفي لاسترداد الاشتراكات يمكنك تقديم العرض في تطبيقك، أو يمكنك إبلاغ المستخدم بما يلي: العرض خارج التطبيق، مثل الرسائل الإلكترونية
  • لبدء عملية استرداد الاشتراك، عليك بدء عملية الشراء في Android باستخدام Google Play Billing Library. تمامًا كما هو الحال مع الاشتراك الجديد، ولكن يمكنك تحديد رمز التخزين التعريفي المتاحة للمستخدم.
  • إذا قررت تضمين فترة تجريبية مجانية أو سعر تمهيدي في ميزة استرداد الاشتراك SKU، تأكَّد من أنّ المستخدم مؤهَّل من خلال إزالة العلامة من المربّع بجانب مربع السماح لفترة تجريبية مجانية واحدة لكل تطبيق في Google Play Console، أن يحصل المستخدم على نسخة تجريبية مجانية واحدة لكل تطبيق.
  • إذا أعاد المستخدم الاشتراك في رمز التخزين التعريفي نفسه، لن يعود مؤهّلاً. الفترات التجريبية المجانية أو السعر التمهيدي وتأكَّد من أنّ واجهة المستخدم تعكس ذلك.

عندما تتلقى رمز الشراء المميز، معالجة عملية الشراء تمامًا كما في الاشتراك الجديد لن تتلقّى linkedPurchaseToken. في مورد الاشتراك

بعد انتهاء الاشتراك: في "متجر Play"

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

قسم الاشتراكات في تطبيق متجر Google Play يعرض
            اشتراك تم إلغاؤه وانتهت صلاحيته مع إعادة الاشتراك والإزالة
            أزرار
الشكل 9. الحساب > الاشتراكات قسم في تطبيق "متجر Google Play" يعرض حالة مُلغاة وانتهت صلاحيتها اشتراك يتضمّن ميزتَي إعادة الاشتراك وإزالة
.

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

الترويج للاشتراكات

يمكنك إنشاء رموز ترويجية لمنح مستخدمين محددين فترة تجريبية مجانية إضافية. باشتراك حالي لمزيد من المعلومات، يُرجى مراجعة الرموز الترويجية:

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

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

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

الإلغاء أو ردّ الأموال أو إبطالها

يمكنك استخدام صفحة واجهة برمجة التطبيقات Google Play Developer API إلى إلغاء، ردّ الأموال، أو إبطال اشتراك. تتوفر هذه الوظيفة أيضًا في Google Play Console

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

يوضّح الجدول التالي الاختلافات بين الإلغاء وردّ الأموال و إبطالها.

إيقاف التجديد ردّ الأموال إبطال إذن الوصول
إلغاء نعم لا لا
ردّ الأموال لا نعم لا
إبطال نعم نعم نعم

تأجيل الفوترة لأحد المشتركين

يمكنك تقديم تاريخ الفوترة التالي لأي مشترك يتجدّد تلقائيًا، وذلك باستخدام Purchases.subscriptions:defer من Google Play Developer API. وخلال فترة التأجيل، اشتركوا في المحتوى الخاص بك مع إمكانية الوصول الكامل ولكن لا يتم تحصيل رسوم منهم. تشير رسالة الأشكال البيانية يتم تعديل تاريخ تجديد الاشتراك ليوافق التاريخ الجديد.

بالنسبة إلى خطط الدفع المُسبق، يمكنك استخدام تأجيل الفوترة لواجهة برمجة التطبيقات لتأجيل انتهاء الصلاحية. الوقت.

تتيح لك الفوترة المؤجلة إجراء ما يلي:

  • منح المستخدمين إمكانية الوصول المجاني كعرض خاص، مثل تقديم أسبوع واحد مجانًا شراء فيلم.
  • امنح العملاء وصولاً مجانيًا كإيماءة حسنة.

يمكن تأجيل الفوترة بمقدار يوم واحد أو لمدة تصل إلى عام واحد لكل طلب بيانات من واجهة برمجة التطبيقات. لتأجيل الفوترة أكثر، يمكنك طلب واجهة برمجة التطبيقات مرة أخرى قبل حلول تاريخ الفوترة الجديد.

على سبيل المثال، تمتلك دارسي اشتراكًا شهريًا في المحتوى عبر الإنترنت تطبيق صيد الأسماك ربع السنوي. عادةً ما يتم إصدار فاتورة لها بقيمة 1.25 جنيه إسترليني في اليوم الأول من كل شهر. في آذار (مارس)، شاركت في استطلاع عبر الإنترنت لناشر التطبيق. يكافئها الناشر بستة أسابيع مجانية من خلال تأجيل الدفعة التالية. حتى 15 أيار (مايو)، أي بعد ستة أسابيع من تاريخ الفوترة المحدد لها في وقت سابق. في 1 أبريل. لا يتم تحصيل رسوم من دارسي عن شهر أبريل أو بداية مايو حق الوصول إلى المحتوى. وفي 15 أيار (مايو)، تم تحصيل مبلغ 1.25 جنيه إسترليني عادي رسوم الاشتراك للشهر. وسيكون تاريخ تجديدها التالي هو 15 حزيران (يونيو).

عند التأجيل، قد ترغب في إشعار المستخدم عبر البريد الإلكتروني أو داخل التطبيق لإبلاغهم بتغيير تاريخ الفوترة.

التعامل مع حالات رفض الدفعة

في حال حدوث مشاكل في الدفع متعلقة بتجديد الاشتراك، ستتولى Google محاولة تجديد الاشتراك بشكل دوري لبعض الوقت قبل الإلغاء يمكن أن تتكون فترة الاسترداد هذه من فترة سماح، تليها فترة تعليق الاشتراك الفترة. وخلال هذه الفترة، ترسل Google رسائل إلكترونية وإشعارات إلى المستخدمين. يطلب منه تعديل طريقة الدفع

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

بعد انتهاء أي فترة سماح، يدخل الاشتراك في حساب فترة الاحتفاظ بالبيانات. خلال فترة تعليق الاشتراك، فيجب التأكد من عدم وصول المستخدم إلى استحقاقات الاشتراك.

يمكنك تحديد طول فترة السماح لكل خطة أساسية يتم تجديدها تلقائيًا فترة تعليق الاشتراك في Google Play Console إن تحديد أطوال أقل من يمكن أن تؤدي القيم التلقائية إلى تقليل عدد الاشتراكات التي يتم استردادها من الدفعات يرفض.

لزيادة احتمالية استرداد الاشتراك أثناء رفض الدفعة، يمكنك إبلاغ المستخدم بمشكلة الدفع وطلب حلها.

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

المراسلة داخل التطبيق

في حال تفعيل المراسلة داخل التطبيق باستخدام InAppMessageCategoryId.TRANSACTIONAL، سيعرض Google Play للمستخدمين الرسائل خلال فترة السماح وفترة تعليق الاشتراك مرة واحدة يوميًا ومنحهم فرصة لإصلاح المشكلة بدون مغادرة التطبيق.

تطبيق Snackbar يُعلِم المستخدم بحلّ المشكلة في عملية الدفع
الشكل 20 يتم من خلال تطبيق Snackbar إرسال إشعار للمستخدم بحلّ المشكلة في عملية الدفع.

وننصحك باستدعاء واجهة برمجة التطبيقات هذه عندما يفتح المستخدم التطبيق لتحديد ما إذا كان ينبغي عرض الرسالة أم لا.

إذا استعاد المستخدم اشتراكه بنجاح، ستتلقّى رمز الاستجابة SUBSCRIPTION_STATUS_UPDATED إلى جانب رمز شراء مميّز. يجب عليك بعد ذلك استخدام رمز الشراء هذا لطلب واجهة Google Play Developer API وإعادة تحميل حالة الاشتراك في تطبيقك

دمج ميزة المراسلة داخل التطبيق

لعرض المراسلة داخل التطبيق للمستخدم، استخدم BillingClient.showInAppMessages()

وفي ما يلي مثال على بدء مسار المراسلة داخل التطبيق:

Kotlin

val inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build()

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        object : InAppMessageResponseListener() {
            override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) {
                if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        })

Java

InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder()
        .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)
        .build();

billingClient.showInAppMessages(activity,
        inAppMessageParams,
        new InAppMessageResponseListener() {
            @Override
            public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) {
                if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.NO_ACTION_NEEDED) {
                    // The flow has finished and there is no action needed from developers.
                } else if (inAppMessageResult.responseCode
                        == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) {
                    // The subscription status changed. For example, a subscription
                    // has been recovered from a suspend state. Developers should
                    // expect the purchase token to be returned with this response
                    // code and use the purchase token with the Google Play
                    // Developer API.
                }
            }
        });

التعامل مع معاملات الاشتراك في انتظار المراجعة

يمكن أن تحدث المعاملات المعلّقة في عملية الشراء الأولية أو إضافة رصيد أو ترقية أو الرجوع إلى إصدار سابق. تبدأ عملية شراء الاشتراك حالة SUBSCRIPTION_STATE_PENDING قبل الانتقال إلى SUBSCRIPTION_STATE_ACTIVE إذا انتهت صلاحية المعاملة أو تم إلغاؤها من خلال المستخدم، سينتقل إلى SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED. يجب ويجب عدم تعديل إذن وصول المستخدِم إلا بعد إتمام المعاملة مكتملة.

تغيير حالة الاشتراك لعملية الشراء الأوّلية مع المعاملات المعلّقة أمر مباشر وسهل. يتلقّى تطبيقك حالة Purchase مع PENDING عند يبدأ المستخدم معاملةً معلّقة. عند اكتمال المعاملة، لن يتم يتلقّى التطبيق Purchase مرة أخرى مع تعديل الحالة إلى PURCHASED. حاسمة تم إرسال رسالة واحدة (SubscriptionNotification) من النوع SUBSCRIPTION_PURCHASED إلى عميل RTDN اتّبِع العملية العادية لتأكيد عملية الشراء، ثم امنح وصول المستخدم إلى المحتوى والإقرار بعملية الشراء. إذا كانت المعاملة تنتهي الصلاحية أو تم إلغاؤها، رسالة SubscriptionNotification من النوع سيتم إرسال SUBSCRIPTION_PENDING_PURCHASE_CANCELED إلى عميل RTDN. في مثل هذه غير مسموح للمستخدم بالوصول إلى المحتوى مطلقًا.

تشمل تغييرات الحالة تغييرات في حالة إضافة رصيد أو ترقية أو الرجوع إلى إصدار سابق من خلال المعاملات المعلّقة. لكلّ من الاشتراكات القديمة والجديدة عندما يبدأ المستخدم عملية انتظار معاملة إضافة رصيد أو ترقية أو الرجوع إلى إصدار سابق، سيتلقّى تطبيقك Purchase مقابل الاشتراك القديم مع كائن PendingPurchaseUpdate. في هذا الوقت، تشير لا يزال المستخدم يملك الاشتراك القديم ولم يحصل على الاشتراك الجديد اشتراكك حتى الآن. جارٍ الاتصال بـ getProducts() وgetPurchaseToken() على يعرض الكائن PendingPurchaseUpdate معرّفات المنتجات ورمز الشراء المميز للاشتراك الجديد. عند اكتمال المعاملة، يتلقّى تطبيقك Purchase مع ضبط رمز الشراء المميّز الأعلى مستوى للاشتراك الجديد يتم تعيين الولاية على PURCHASED. رسالة SubscriptionNotification من النوع سيتم إرسال SUBSCRIPTION_PURCHASED إلى عميل RTDN. في هذا الوقت فقط، استبدال رمز الشراء القديم بالرمز المميّز الجديد للشراء وتعديل وصول المستخدم إلى المحتوى. في حال انتهاء صلاحية المعاملة أو إلغائها، رسالة واحدة (SubscriptionNotification) من النوع سيتم إرسال SUBSCRIPTION_PENDING_PURCHASE_CANCELED إلى عميل RTDN. في مثل هذه في هذه الحالة، يجب أن يظل بإمكان المستخدم الوصول إلى محتوى الاشتراك القديم.