درباره اشتراک ها

این مبحث نحوه مدیریت رویدادهای چرخه عمر اشتراک، مانند تمدید و انقضا را شرح می دهد. همچنین ویژگی های اشتراک اضافی مانند ارائه تبلیغات و اجازه دادن به کاربران شما برای مدیریت اشتراک های خود را شرح می دهد.

اگر محصولات اشتراک را برای برنامه خود پیکربندی نکرده‌اید، به ایجاد و پیکربندی محصولات خود مراجعه کنید.

نمای کلی اشتراک ها

اشتراک مجموعه‌ای از مزایایی است که کاربران می‌توانند در طول یک دوره زمانی مشخص به آن‌ها دسترسی داشته باشند. برای مثال، یک اشتراک ممکن است به کاربر حق دسترسی به یک سرویس پخش موسیقی را بدهد.

می‌توانید چندین اشتراک در یک برنامه داشته باشید، یا برای نشان دادن مجموعه‌های مختلف مزایا، یا سطوح مختلف از یک مجموعه مزایا (مثلاً طبقات «نقره‌ای» و «طلا»).

از طریق طرح‌ها و پیشنهادات پایه، می‌توانید چندین پیکربندی را برای یک محصول اشتراک ایجاد کنید. به عنوان مثال، می توانید یک پیشنهاد مقدماتی برای کاربرانی که هرگز در برنامه شما مشترک نشده اند ایجاد کنید. به طور مشابه، می توانید یک پیشنهاد ارتقاء برای کاربرانی که قبلا مشترک شده اند ایجاد کنید.

برای یک نمای کلی از محصولات اشتراک، طرح‌های پایه و پیشنهادات، به مستندات موجود در مرکز راهنمای کنسول Play مراجعه کنید.

ادغام طرح های پیش پرداخت

طرح های پیش پرداخت به صورت خودکار پس از انقضا تمدید نمی شوند . برای تمدید حق اشتراک خود بدون وقفه، کاربر باید یک طرح پیش پرداخت را برای همان اشتراک شارژ کند .

برای شارژ، جریان صورت‌حساب را مانند خرید اصلی راه‌اندازی کنید. نیازی نیست نشان دهید که خرید یک شارژ است.

شارژهای طرح پیش‌پرداخت همیشه از حالت جایگزینی CHARGE_FULL_PRICE استفاده می‌کنند و نیازی به تنظیم صریح این حالت ندارید. کاربر بلافاصله برای یک دوره صورت‌حساب کامل هزینه دریافت می‌کند و استحقاق او با مدت زمان مشخص‌شده در شارژ تمدید می‌شود.

پس از تکمیل، فیلدهای زیر در شیء نتیجه Purchase به‌روزرسانی می‌شوند تا جدیدترین خرید شارژ را منعکس کنند:

  • شناسه سفارش
  • زمان خرید
  • امضا
  • خرید توکن
  • تصدیق کرد

فیلدهای Purchase زیر همیشه حاوی همان داده‌های موجود در خرید اصلی هستند:

  • نام بسته
  • وضعیت خرید
  • محصولات
  • تمدید خودکار

تاییدیه خرید پیش پرداخت

مشابه اشتراک‌های تمدید خودکار، پس از خرید باید طرح‌های پیش‌پرداخت را تأیید کنید. هم خرید اولیه و هم هرگونه شارژ باید تایید شود. برای اطلاعات بیشتر، به پردازش خریدها مراجعه کنید.

با توجه به احتمال کوتاه مدت طرح پیش پرداخت، مهم است که خرید را در اسرع وقت تایید کنید.

طرح های پیش پرداخت با مدت زمان یک هفته یا بیشتر باید ظرف سه روز تایید شوند.

طرح های پیش پرداخت با مدت زمان کمتر از یک هفته باید در نیمی از مدت زمان طرح تایید شوند. به عنوان مثال، توسعه دهندگان 1.5 روز فرصت دارند تا یک طرح پیش پرداخت سه روزه را تایید کنند.

ادغام اشتراک های اقساطی

اشتراک اقساطی نوعی از اشتراک است که در آن کاربران به جای پرداخت کل هزینه اشتراک، هزینه اشتراک را در یک دوره زمانی چند قسطی پرداخت می کنند.

ملاحظات اضافی برای اشتراک اقساطی:

  • در دسترس بودن کشور : ویژگی اشتراک اقساطی فقط در برزیل، فرانسه، ایتالیا و اسپانیا در دسترس است (برای آخرین در دسترس بودن کنسول را بررسی کنید).
  • تنظیم قیمت : هنگام تعیین قیمت اشتراک اقساطی در کنسول، قیمت نشان دهنده مبلغ پرداخت ماهانه است. این، همراه با دوره تعهد تنظیم شده، کل مبلغ اشتراک را در صفحه خرید ایجاد می کند.
  • دوره تعهد : کل مدت تعهد اشتراک اولیه که طی آن پرداخت های ماهانه مورد نیاز است. به عنوان مثال، اگر یک طرح پایه دارای یک دوره تعهد 15 ماهه باشد، کاربر در این مدت 15 پرداخت ماهانه انجام خواهد داد.
  • تمدید : در زمینه اشتراک اقساط، "تجدید" به معنای پایان یک دوره تعهد است، یا دوره تعهد اولیه یا دوره تعهد بعدی. پس از ثبت نام اولیه، اولین تمدید پس از اتمام کل دوره تعهد اولیه رخ می دهد. تمدیدهای بعدی پس از انجام هر دوره تعهد بعدی انجام می شود. انواع تمدید برای اشتراک های اقساطی می تواند "تمدید خودکار ماهانه" یا "تمدید خودکار برای مدت زمان مشابه" باشد. برای "تمدید خودکار ماهانه"، هیچ تعهد بعدی وجود ندارد و این طرح مانند یک اشتراک ماهانه عمل می کند که در آن هر هزینه اشتراک ماهانه یک تمدید است.
  • دوره صورت‌حساب : در زمینه اشتراک‌های اقساطی، این به بازه زمانی تکراری اطلاق می‌شود که در آن پرداخت‌های فردی، همانطور که در طرح پایه مشخص شده است، انجام می‌شود.
  • تغییر برنامه در مقابل رفتارهای تغییر قیمت : برای تغییرات قیمت و لغو، تعهد قطعی است. این بدان معناست که اگر کاربری بخواهد لغو کند یا توسعه‌دهنده بخواهد قیمت را تغییر دهد، این تغییر در پایان یک دوره تعهد اعمال می‌شود. برای تغییرات طرح، تعهد قطعی نیست. این بدان معنی است که تغییر طرح نیازی به صبر کردن تا پایان دوره تعهد ندارد، یا بلافاصله یا در تاریخ پرداخت بعدی بر اساس حالت جایگزینی تنظیم شده اعمال می شود.
  • تغییر طرح اشتراکی یکسان : تغییر طرح از طرح پایه اقساطی به طرح پایه غیر اقساطی همان محصول اشتراکی مجاز نیست.
  • اعلان‌های بی‌درنگ برنامه‌نویس (RTDN) : یک SUBSCRIPTION_CANCELLATION_SCHEDULED RTDN بلافاصله پس از لغو شروع‌شده توسط کاربر، زمانی که پرداخت‌ها برای دوره تعهد باقی می‌ماند، ارسال می‌شود. لغو در انتظار است و فقط در پایان دوره تعهد اعمال می شود. سپس، اگر توسط کاربر بازیابی نشود، RTDN های SUBSCRIPTION_CANCELED و SUBSCRIPTION_EXPIRED در پایان دوره تعهد ارسال می شوند.

  • پرداخت‌ها / تحقق درآمد : پرداخت‌های برنامه‌نویس زمانی اتفاق می‌افتد که کاربران پرداخت‌های ماهانه خود را مشروط به شرایطی مشابه با سایر اشتراک‌ها انجام می‌دهند. زمانی که کاربر برای اشتراک اقساطی ثبت‌نام می‌کند، به برنامه‌نویسان پرداختی پرداخت نمی‌شود.

  • جمع‌آوری‌های پرداخت از دست رفته : اگر کاربر نتواند پرداخت‌های اشتراک اقساطی را انجام دهد، نه Google و نه توسعه‌دهنده تلاشی برای دریافت چنین پرداخت‌های از دست رفته یا معوقی از کاربر نخواهند داشت، به‌جز اینکه Google ممکن است به‌طور دوره‌ای پرداخت را در طول هر دوره مهلت قابل اعمال یا دوره توقف حساب تکرار کند. مطابق با روش های عادی پرداخت مجدد آن. Google در قبال پرداخت‌های اقساطی پرداخت نشده باقیمانده در قبال برنامه‌نویس مسئولیتی نخواهد داشت.

  • در دسترس بودن کتابخانه صورت‌حساب Play : قسمت installmentDetails فقط برای PBL 7 یا بالاتر در دسترس است. برای PBL 5 و نسخه های جدیدتر، اشتراک اقساط با استفاده از queryProductDetails() برگردانده می شود، اما اشتراک شامل اطلاعات دقیق اقساط مانند تعداد پرداخت های تعهد شده طرح نمی شود.

از پیوندهای عمیق استفاده کنید تا کاربران بتوانند اشتراک را مدیریت کنند

برنامه شما باید دارای پیوندی در صفحه تنظیمات یا تنظیمات برگزیده باشد که به کاربران امکان می دهد اشتراک های خود را مدیریت کنند، که می توانید آن را در ظاهر و احساس طبیعی برنامه خود بگنجانید.

می‌توانید یک پیوند عمیق از برنامه خود به مرکز اشتراک‌های Google Play برای اشتراک‌های منقضی نشده اضافه کنید، که می‌توانید با استفاده از قسمت subscriptionState منبع اشتراک تعیین کنید. بر این اساس، راه‌های مختلفی وجود دارد که می‌توانید به مرکز اشتراک‌های فروشگاه Play پیوند عمیق بدهید.

همانطور که در شکل های 1 و 2 نشان داده شده است، از URL زیر برای هدایت کاربران به صفحه ای که همه اشتراک های آنها را نشان می دهد استفاده کنید:

https://play.google.com/store/account/subscriptions
صفحه اشتراک‌های فروشگاه Play وضعیت همه اشتراک‌های صورت‌حساب Google Play کاربر را نشان می‌دهد.
شکل 1. صفحه اشتراک‌های فروشگاه Play وضعیت همه اشتراک‌های صورت‌حساب Google Play کاربر را نشان می‌دهد.


برای مشاهده جزئیات بیشتر روی اشتراک ضربه بزنید.
شکل 2. برای مشاهده جزئیات بیشتر روی اشتراک ضربه بزنید.

این پیوند عمیق می‌تواند برای کمک به کاربر برای بازیابی اشتراک لغو شده از مرکز اشتراک‌های فروشگاه Play مفید باشد.

برای پیوند مستقیم به صفحه مدیریت برای اشتراکی که منقضی نشده است، نام بسته و productId مرتبط با اشتراک خریداری شده را مشخص کنید. برای تعیین برنامه‌نویسی productId برای یک اشتراک موجود، باطن برنامه خود را پرس و جو کنید یا با BillingClient.queryPurchasesAsync() برای فهرستی از اشتراک‌های مرتبط با یک کاربر خاص تماس بگیرید. هر اشتراک حاوی productId مربوطه به عنوان بخشی از اطلاعات وضعیت اشتراک است. هر شیء SubscriptionPurchaseLineItem مرتبط با خرید اشتراک حاوی مقدار productId مرتبط با اشتراکی است که کاربر در آن آیتم خط خریداری کرده است.

از URL زیر برای هدایت کاربران به یک صفحه مدیریت اشتراک خاص استفاده کنید و به ترتیب نام بسته 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

برای کسب اطلاعات بیشتر در مورد برنامه های مختلف upsell و winback پیشنهادات ارتقا یا کاهش، راهنمای پیشنهادات و تبلیغات را بخوانید.

حالت جایگزینی را برای خرید تنظیم کنید

بر اساس ترجیحات و منطق تجاری خود، می توانید از حالت های جایگزین برای انواع مختلف انتقال اشتراک استفاده کنید. این بخش نحوه تنظیم حالت جایگزینی برای تغییر در اشتراک و محدودیت های اعمال شده را توضیح می دهد.

مجدداً مشترک شوید یا طرح‌ها را در همان اشتراک تغییر دهید

می توانید حالت جایگزینی پیش فرض را در کنسول Google Play تعیین کنید. این تنظیم به شما امکان می‌دهد انتخاب کنید که چه زمانی از مشترکین فعلی در صورت خرید طرح پایه یا پیشنهاد متفاوت برای اشتراک مشابه یا اشتراک مجدد پس از لغو، هزینه دریافت کنید. گزینه های موجود عبارتند از شارژ فوری , معادل CHARGE_FULL_PRICE , و شارژ در تاریخ صورتحساب بعدی , معادل WITHOUT_PRORATION . اینها تنها حالت‌های جایگزین مربوط به هنگام تعویض طرح‌های پایه در همان اشتراک هستند.

برای مثال، اگر پس از لغو کاربر، اما قبل از پایان اشتراک، یک پیشنهاد winback را برای همان طرح پیاده‌سازی می‌کنید، می‌توانید خرید جدید را به‌عنوان یک خرید معمولی بدون نشان دادن هیچ مقداری در SubscriptionUpdateParams پردازش کنید. سیستم از حالت جایگزینی پیش‌فرض که در اشتراک پیکربندی کرده‌اید استفاده می‌کند و به طور خودکار انتقال طرح از خرید قدیمی به خرید جدید را مدیریت می‌کند.

برنامه‌ها را بین اشتراک‌ها تغییر دهید یا حالت جایگزینی پیش‌فرض را لغو کنید

اگر کاربر در حال تغییر محصولات اشتراک است - خرید اشتراک دیگری - یا اگر می‌خواهید به هر دلیلی حالت جایگزینی پیش‌فرض را لغو کنید، نرخ تناسب در زمان اجرا را به عنوان بخشی از پارامترهای جریان خرید مشخص می‌کنید.

برای ارائه صحیح SubscriptionUpdateParams به عنوان بخشی از پیکربندی جریان خرید زمان اجرا، به محدودیت‌های زیر توجه کنید:

  • هنگام ارتقاء، ارتقاء، یا شروع انجام یک تغییر اشتراک به یک طرح پیش‌پرداخت از یک طرح پیش‌پرداخت، طرح تمدید خودکار یا طرح اقساطی، تنها حالت جایگزین مجاز CHARGE_FULL_PRICE است. اگر حالت جایگزین دیگری را مشخص کنید، خرید با شکست مواجه می شود و خطایی به کاربر نشان داده می شود.
  • هنگام تعویض طرح‌ها در همان اشتراک به یک طرح تمدید خودکار از یک طرح پیش‌پرداخت یا یک طرح تمدید خودکار، حالت‌های تقسیم بندی معتبر CHARGE_FULL_PRICE و WITHOUT_PRORATION هستند. اگر حالت proration دیگری را مشخص کنید، خرید با شکست مواجه می شود و یک خطا به کاربر نشان داده می شود.
  • تغییر طرح های درون یک محصول اشتراکی از طرح پایه اقساطی به طرح پایه غیر اقساطی مجاز نیست.

مثال ها و رفتارهای جایگزین

برای درک نحوه عملکرد هر حالت proration، سناریوی زیر را در نظر بگیرید:

Samwise دارای اشتراک محتوای آنلاین از برنامه Country Gardener است. او اشتراک ماهانه نسخه Tier 1 محتوا را دارد که فقط متنی است. این اشتراک 2 دلار در ماه برای او هزینه دارد و در اول ماه تمدید می شود.

در 15 آوریل، Samwise تصمیم گرفت تا به نسخه سالانه اشتراک Tier 2 ارتقا یابد، که شامل به‌روزرسانی‌های ویدیویی است و هزینه آن 36 دلار در سال است.

هنگام ارتقاء اشتراک، توسعه‌دهنده حالت proration را انتخاب می‌کند. فهرست زیر نحوه تأثیر هر حالت proration را بر اشتراک Samwise توضیح می دهد:

WITH_TIME_PRORATION

اشتراک Tier 1 Samwise بلافاصله پایان می یابد. از آنجایی که او برای یک ماه کامل (1 تا 30 آوریل) پرداخت کرد اما در نیمه دوره اشتراک ارتقا یافت، نیمی از اشتراک یک ماهه (1 دلار) برای اشتراک جدید او اعمال می شود. با این حال، از آنجا که هزینه اشتراک جدید 36 دلار در سال است، موجودی اعتباری 1 دلاری تنها برای 10 روز پرداخت می شود (16-25 آوریل). بنابراین در 26 آوریل، 36 دلار برای اشتراک جدید و 36 دلار دیگر در 26 آوریل هر سال از او دریافت می شود.

شما باید در لحظه ای که خرید موفق شد با PurchasesUpdatedListener برنامه خود تماس بگیرید و می توانید خرید جدید را به عنوان بخشی از تماس queryPurchasesAsync() بازیابی کنید. باطن شما بلافاصله یک اعلان برنامه‌نویس SUBSCRIPTION_PURCHASED بلادرنگ دریافت می‌کند.

CHARGE_PRORATED_PRICE

این حالت را می توان استفاده کرد زیرا قیمت اشتراک ردیف 2 در هر واحد زمانی (36 دلار در سال = 3 دلار در ماه) بیشتر از قیمت اشتراک ردیف 1 در واحد زمانی (2 دلار در ماه) است. اشتراک Tier 1 Samwise بلافاصله پایان می یابد. از آنجایی که او یک ماه کامل را پرداخت کرد اما فقط نیمی از آن را استفاده کرد، نیمی از اشتراک یک ماهه (1 دلار) برای اشتراک جدید او اعمال می شود. با این حال، از آنجایی که هزینه اشتراک جدید 36 دلار در سال است، 15 روز باقی مانده 1.50 دلار هزینه دارد. بنابراین مابه التفاوت 0.50 دلار برای اشتراک جدیدش دریافت می شود. در 1 می، Samwise 36 دلار برای ردیف اشتراک جدید خود و 36 دلار دیگر در 1 می هر سال بعد از آن دریافت می‌کند.

شما باید در لحظه ای که خرید موفق شد با PurchasesUpdatedListener برنامه خود تماس بگیرید و می توانید خرید جدید را به عنوان بخشی از تماس queryPurchasesAsync() بازیابی کنید. باطن شما بلافاصله یک اعلان برنامه‌نویس SUBSCRIPTION_PURCHASED بلادرنگ دریافت می‌کند.

WITHOUT_PRORATION

اشتراک Tier 1 Samwise بلافاصله بدون هیچ هزینه اضافی به Tier 2 ارتقا می یابد و در 1 می 36 دلار برای ردیف اشتراک جدید خود و 36 دلار دیگر در 1 می هر سال بعد از آن دریافت می شود.

شما باید در لحظه ای که خرید موفق شد با PurchasesUpdatedListener برنامه خود تماس بگیرید و می توانید خرید جدید را به عنوان بخشی از تماس queryPurchasesAsync() بازیابی کنید. باطن شما بلافاصله یک اعلان برنامه‌نویس SUBSCRIPTION_PURCHASED بلادرنگ دریافت می‌کند.

DEFERRED

اشتراک Tier 1 Samwise ادامه دارد تا اینکه در 30 آوریل منقضی شود. در 1 مه، اشتراک Tier 2 اعمال می شود و Samwise برای ردیف اشتراک جدید خود 36 دلار دریافت می کند.

شما باید در لحظه ای که خرید موفق شد با PurchasesUpdatedListener برنامه خود تماس بگیرید و می توانید خرید جدید را به عنوان بخشی از تماس queryPurchasesAsync() بازیابی کنید. باطن شما بلافاصله یک اعلان برنامه‌نویس SUBSCRIPTION_PURCHASED بلادرنگ دریافت می‌کند. شما باید خرید را به همان روشی پردازش کنید که هر خرید جدید دیگری را در آن مرحله پردازش می کنید. به ویژه، مطمئن شوید که خرید جدید را تایید می کنید. توجه داشته باشید که startTime اشتراک جدید در لحظه ای که جایگزینی موثر است پر می شود، که زمانی اتفاق می افتد که اشتراک قدیمی منقضی شود. در آن مرحله، یک SUBSCRIPTION_RENEWED RTDN برای طرح اشتراک جدید دریافت می‌کنید. درباره رفتار ReplacementMode.DEFERRED در Handle deferred تعویض بیشتر بخوانید.

CHARGE_FULL_PRICE

اشتراک Tier 1 Samwise بلافاصله پایان می یابد. اشتراک Tier 2 او از امروز شروع می شود و 36 دلار از او دریافت می شود. از آنجایی که او یک ماه کامل را پرداخت کرد اما فقط نیمی از آن را استفاده کرد، نیمی از اشتراک یک ماهه (1 دلار) برای اشتراک جدید او اعمال می شود. از آنجا که هزینه اشتراک جدید 36 دلار در سال است، او 1/36 سال به دوره اشتراک خود اضافه می کند (10 روز). بنابراین، شارژ بعدی Samwise یک سال و 10 روز از امروز با قیمت 36 دلار خواهد بود. پس از آن، هر سال 36 دلار از او دریافت می شود.

هنگام انتخاب حالت تناسب، حتماً توصیه‌های جایگزین ما را مرور کنید.

ایجاد تغییرات اشتراک در برنامه

برنامه شما می‌تواند با استفاده از مراحل مشابه با راه‌اندازی جریان خرید، ارتقا یا تنزل را به کاربران ارائه دهد. با این حال، هنگام ارتقا یا ارتقاء، باید جزئیات اشتراک فعلی، اشتراک آینده (ارتقا یا کاهش یافته) و حالت جایگزینی برای استفاده را ارائه دهید، همانطور که در مثال زیر نشان داده شده است:

کاتلین

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
   )
// ...

جاوا

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 یا Purchases.subscriptions:acknowledge از Google Play Developer API تأیید کنید.

تعویض معوق را کنترل کنید

حالت جایگزینی معوق به شما اجازه می دهد تا قبل از شروع طرح جدید، به کاربر اجازه دهید از حق باقی مانده در طرح قدیمی خود استفاده کند.

هنگامی که از ReplacementMode.DEFERRED برای خرید جدیدی استفاده می کنید، queryPurchasesAsync() یک نشانه خرید جدید را پس از جریان خرید بازمی گرداند که با محصول قدیمی مرتبط می ماند تا زمانی که تعویض به تعویق افتاده در تاریخ تمدید بعدی انجام شود، پس از آن محصول جدید برگردانده می شود.

در گذشته می‌توانستید این تجربه کاربری را با ProrationMode.DEFERRED منسوخ شده به دست آورید، اما ProrationMode.DEFERRED با Play Billing Library 6 منسوخ شده است. جدول زیر را ببینید تا متوجه شوید این رفتار در کجا متفاوت است:

زمان

ProrationMode.DEFERRED (منسوخ شده)

ReplacementMode.DEFERRED

درست پس از موفقیت در جریان خرید (برنامه)

PurchasesUpdatedListener پس از خرید با وضعیت موفقیت آمیز بودن ارتقا یا تنزل رتبه فراخوانی می شود.

استحقاق طرح قدیمی تا تاریخ تمدید بعدی ادامه دارد. برای اطمینان از اینکه برنامه استحقاق مناسب را می دهد، queryPurchasesAsync() یک شی Purchase را با توکن خرید اصلی و حق اصلی را تا زمانی که جایگزینی انجام شود، برمی گرداند.

رمز خرید جدید ظاهر نشده است، بنابراین در این مرحله قابل پردازش نیست.

PurchasesUpdatedListener پس از خرید با وضعیت موفقیت آمیز بودن ارتقا یا تنزل رتبه فراخوانی می شود.

queryPurchasesAsync() خرید را با توکن خرید جدید و حق اصلی مرتبط با آن را بلافاصله برمی گرداند.

رمز خرید جدید ظاهر شده است، بنابراین باید در این مرحله با در نظر گرفتن زمانی که قرار است جایگزینی انجام شود، پردازش شود.

درست پس از موفقیت در جریان خرید (باطن)

SUBSCRIPTION_PURCHASED RTDN پس از جریان خرید ارسال نمی شود. باطن هنوز از خرید جدید مطلع نشده است.

SUBSCRIPTION_PURCHASED RTDN با product_id قدیمی بلافاصله پس از جریان خرید برای رمز خرید جدید ارسال می‌شود.

فراخوانی روش buys.subscriptionsv2.get با توکن خرید جدید، خریدی را برمی‌گرداند که دارای 'startTime' است که زمان خرید را با دو مورد خط نشان می‌دهد:

  • یکی نشان دهنده استحقاق قدیمی است و در آینده دارای "زمان انقضا" است. استحقاق قدیمی تمدید نخواهد شد و دارای یک Replacement DeferredItem حاوی محصول حق جدید است. این نشان‌دهنده جایگزینی معلق استحقاق قدیمی پس از انقضای آن است.
  • یکی نشان دهنده حق تازه خریداری شده است . مقداری برای «expiryTime» تنظیم نشده است.

SUBSCRIPTION_EXPIRED برای رمز خرید قدیمی ارسال شد. هنگام فراخوانی روش buys.subscriptionsv2.get با رمز خرید قدیمی ، به نظر منقضی شده است (استحقاق طرح قدیمی برای زمان باقیمانده به خرید جدید منتقل می شود).

در هنگام تعویض - اولین تمدید پس از جریان خرید (برنامه)

queryPurchasesAsync() یک شیء خرید جدید را با توکن خرید جدید و استحقاق برمی گرداند.

رمز خرید جدید اکنون ظاهر شده است، بنابراین باید پردازش شود.

queryPurchasesAsync() خرید را با توکن خرید جدید و حق جدید مرتبط با آن را برمی گرداند.

خرید جدید باید از قبل با موفقیت جریان خرید پردازش شده باشد، بنابراین برنامه نباید هیچ اقدام خاصی به جز اطمینان از اعطای حق مناسب انجام دهد.

در هنگام تعویض - اولین تمدید پس از جریان خرید (باطن)

خرید جدید اکنون می تواند پردازش و تأیید شود که اولین SUBSCRIPTION_RENEWED RTDN ارسال شود.

linkedPurchaseToken در منبع اشتراک می‌تواند برای تعیین اینکه کدام کاربر در پشتیبان اشتراک شما، در صورت وجود، باید با حق جدید به‌روزرسانی شود، استفاده شود.

زمانی که SUBSCRIPTION_PURCHASED RTDN برای رمز خرید جدید ارسال شد و به عنوان "startTime" ثبت شد، خرید جدید پردازش و تأیید شد.

با ReplacementMode.DEFERRED، اولین تمدیدها از رفتار استاندارد هر تمدید دیگری پیروی می کنند و نیازی نیست در هنگام وقوع این رویداد، منطق خاصی را برای جایگزینی انجام دهید.

هنگام فراخوانی روش buys.subscriptionsv2.get با توکن خرید جدید، خریدی را با دو خط برمی‌گرداند:

  • یکی نشان دهنده حق قدیمی ، با "expiryTime" در گذشته و بدون مقدار تعیین شده برای DeferredItemReplacement .
  • یکی نشان‌دهنده حق جدید ، با «زمان انقضا» در آینده و روشن شدن پرچم auto_renewing_enabled.

ReplacementMode.DEFERRED باید از این پس به جای ProrationMode.DEFERRED منسوخ شده استفاده شود، زیرا رفتار مشابهی را در مورد تغییرات حق ارائه می دهد، اما راهی برای مدیریت خرید ارائه می دهد که با رفتارهای سایر خریدهای جدید سازگارتر است.

مدیریت مشتری

با استفاده از اعلان‌های توسعه‌دهنده بلادرنگ، می‌توانید در زمان واقعی تشخیص دهید که کاربر تصمیم به لغو آن دارد. وقتی کاربری لغو می‌کند، اما قبل از اینکه اشتراکش منقضی شود، می‌توانید برای او اعلان‌های فشاری یا پیام‌های درون‌برنامه بفرستید تا از او بخواهید دوباره اشتراک کند.

پس از اینکه کاربر اشتراک خود را لغو کرد، می توانید سعی کنید او را در برنامه خود یا از طریق فروشگاه Play برگردانید. جدول زیر سناریوهای مختلف اشتراک را به همراه اقدامات winback مرتبط و الزامات برنامه توضیح می دهد.

قبل از انقضای اشتراک پس از انقضای اشتراک
درون برنامه ای در فروشگاه Play درون برنامه ای در فروشگاه Play
قابلیت Winback اشتراک درون برنامه ای بازیابی کنید اشتراک درون برنامه ای دوباره اشتراک کنید
کاربر از جریان پرداخت عبور می کند بله خیر بله بله
اشتراک کاربر با همان SKU مرتبط باقی می ماند کاربر می تواند برای SKU یکسان یا متفاوت ثبت نام کند بله کاربر می تواند برای SKU یکسان یا متفاوت ثبت نام کند بله
رمز خرید جدید ایجاد می کند بله خیر بله بله
به طور پیش فرض فعال است خیر بله، پشتیبانی برای همه برنامه‌نویس‌ها لازم است خیر

برنامه‌های بدون Billing Library 2.0+: خیر

برنامه‌های دارای Billing Library 2.0+: بله. توسعه دهندگان می توانند در کنسول انصراف دهند.

زمانی که کاربر شارژ می شود

در صورت استفاده از SKU یکسان: پایان دوره صورتحساب فعلی.

در صورت استفاده از SKU های مختلف: بستگی به حالت proration دارد.

پایان دوره صورتحساب فعلی بلافاصله بلافاصله
پیاده سازی مورد نیاز است یک UI برای ثبت نام مجدد در برنامه خود ارائه دهید

تشخیص تغییر در وضعیت اشتراک

پیوند عمیق به فروشگاه Play

یک UI برای ثبت نام مجدد در برنامه خود ارائه دهید خریدهای خارج از برنامه را مدیریت کنید

قبل از انقضای اشتراک - درون برنامه

برای اشتراک‌هایی که لغو شده‌اند اما هنوز منقضی نشده‌اند، می‌توانید با اعمال همان جریان خرید محصول درون‌برنامه‌ای که برای مشترکین جدید انجام می‌شود، به مشترکان اجازه دهید اشتراک خود را در برنامه شما بازیابی کنند. اطمینان حاصل کنید که رابط کاربری شما نشان می دهد که کاربر یک اشتراک موجود دارد. به عنوان مثال، ممکن است بخواهید تاریخ انقضای فعلی و قیمت تکراری کاربر را با یک دکمه فعال سازی مجدد نمایش دهید.

در بیشتر مواقع، می خواهید همان قیمت و SKU را به کاربر ارائه دهید که قبلاً مشترک آن بوده است، به شرح زیر:

  • خرید اشتراک جدیدی را با همان SKU آغاز کنید.
  • اشتراک جدید جایگزین اشتراک قبلی می شود و در همان تاریخ انقضا تمدید می شود. اشتراک قدیمی بلافاصله به عنوان منقضی شده علامت گذاری می شود.
  • به عنوان مثال، آشیل یک اشتراک در Example Music App دارد و قرار است اشتراک در 1 آگوست به پایان برسد. در 10 ژوئیه، او مجدداً اشتراک یک ماهه را با همان قیمت در ماه مشترک می کند. اشتراک جدید با اعتبار باقیمانده تقسیم می شود، بلافاصله فعال است و همچنان در 1 آگوست تمدید می شود.

اگر می‌خواهید قیمت متفاوتی ارائه دهید - به عنوان مثال یک آزمایش رایگان جدید یا یک تخفیف winback - می‌توانید در عوض یک SKU متفاوت به کاربر ارائه دهید:

  • با استفاده از حالت جایگزینی WITHOUT_PRORATION ارتقا یا تنزل را با SKU های مختلف آغاز کنید.
  • اشتراک جدید جایگزین اشتراک قبلی می شود و در همان تاریخ انقضا تمدید می شود. قیمت SKU جدید، از جمله قیمت‌های اولیه، در تاریخ انقضای اصلی از کاربر دریافت می‌شود. اگر اشتراک قدیمی با استفاده از شناسه حساب مبهم ایجاد شده باشد، همان شناسه باید برای ارتقا و تنزل به BillingFlowParams ارسال شود.
  • به عنوان مثال، آشیل اشتراکی در Example Music App دارد و قرار است اشتراک در 1 اوت به پایان برسد. در 10 ژوئیه، او مجدداً برای اشتراک سالانه با قیمت مقدماتی مشترک می شود. اشتراک جدید بلافاصله فعال می شود و قیمت اولیه در تاریخ 1 آگوست از کاربر دریافت می شود.
  • اگر تصمیم دارید یک نسخه آزمایشی رایگان یا قیمت مقدماتی را در SKU winback خود لحاظ کنید، با برداشتن علامت Allow one trial free per app در کنسول Google Play، اطمینان حاصل کنید که کاربر واجد شرایط است.

هنگامی که رمز خرید را دریافت کردید، خرید را همانطور که با یک اشتراک جدید انجام می دهید پردازش کنید . علاوه بر این، Google Play Developer API یک linkedPurchaseToken در منبع اشتراک برمی‌گرداند. حتماً نشانه های ارائه شده در linkedPurchaseToken را باطل کنید تا اطمینان حاصل کنید که از نشانه قدیمی برای دستیابی به خدمات شما استفاده نمی شود.

قبل از انقضاء اشتراک - در فروشگاه بازی

در حالی که اشتراک لغو شده اما هنوز هم فعال است ، کاربران می توانند با کلیک بر روی Respection (که قبلاً بازیابی شده بودند ) اشتراک را در مرکز اشتراک Google Play بازیابی کنند. این همان اشتراک و نشانه خرید را حفظ می کند.

بخش اشتراک در برنامه فروشگاه Google Play که نشان می دهد             اشتراک را با یک دکمه ارسال مجدد لغو کرد
شکل 8. حساب> بخش اشتراک در برنامه فروشگاه Google Play که یک اشتراک لغو شده با یک دکمه Respectionscribe را نشان می دهد.

برای کسب اطلاعات بیشتر در مورد بازیابی اشتراک ها ، به ترمیم ها مراجعه کنید.

پس از انقضاء اشتراک - در برنامه

شما می توانید مشترکین منقضی شده را با استفاده از همان جریان خرید محصول درون برنامه ای برای مشترکین جدید ، در برنامه خود دوباره ثبت کنند. به موارد زیر توجه کنید:

  • برای ارائه تخفیف به کاربران ، ممکن است بخواهید شناسه محصول را با قیمت گذاری ویژه برای اشتراک خود ارائه دهید ، همچنین به عنوان SKU Winback نامیده می شود. شما می توانید پیشنهاد را در برنامه خود ارائه دهید ، یا می توانید کاربر را در خارج از برنامه مانند ایمیل به کاربر اطلاع دهید.
  • برای شروع اشتراک Winback ، با استفاده از کتابخانه صورتحساب Google Play ، جریان خرید را در برنامه Android خود راه اندازی کنید. این همان فرآیند با اشتراک جدید است ، اما می توانید SKU را که در دسترس کاربر است تعیین کنید.
  • اگر تصمیم دارید یک آزمایش رایگان یا قیمت مقدماتی را در Winback SKU خود درج کنید ، اطمینان حاصل کنید که کاربر واجد شرایط با بررسی عدم بررسی اجازه یک آزمایش رایگان برای هر کادر برنامه در کنسول Google Play است ، که کاربر را برای دریافت یک آزمایش رایگان در هر برنامه محدود می کند.
  • اگر کاربر به همان SKU بپردازد ، آنها دیگر واجد شرایط آزمایش رایگان یا قیمت مقدماتی نیستند. اطمینان حاصل کنید که UI شما این را منعکس می کند.

هنگامی که نشانه خرید را دریافت می کنید ، خرید را دقیقاً همانطور که می خواهید با یک اشتراک جدید پردازش کنید . شما یک linkedPurchaseToken در منبع اشتراک دریافت نخواهید کرد.

پس از انقضاء اشتراک - در فروشگاه بازی

در صورت فعال بودن ، کاربران می توانند پس از انقضا با کلیک بر روی Respection در مرکز اشتراک Google Play ، تا یک سال پس از انقضا دوباره به همان SKU بپیوندند. این یک اشتراک و خرید جدید ایجاد می کند.

بخش اشتراک در برنامه فروشگاه Google Play که نشان می دهد             اشتراک لغو و منقضی شده با ارسال مجدد و حذف             دکمه ها
شکل 9. حساب> بخش اشتراک در برنامه فروشگاه Google Play که یک اشتراک لغو و منقضی شده با دکمه های ارسال مجدد و حذف را نشان می دهد.

Respection یک خرید خارج از برنامه محسوب می شود ، بنابراین حتماً بهترین روش های انجام خرید خریداری شده از خارج از برنامه خود را دنبال کنید.

اشتراک خود را ارتقا دهید

شما می توانید کدهای تبلیغاتی ایجاد کنید تا به کاربران منتخب یک آزمایش رایگان گسترده در یک اشتراک موجود ارائه دهید. برای کسب اطلاعات بیشتر ، به کدهای تبلیغاتی مراجعه کنید.

برای آزمایش های رایگان ، Google Play تأیید می کند که کاربر قبل از شروع آزمایش رایگان از روش پرداخت معتبر برخوردار است. برخی از کاربران ممکن است این تأیید را به عنوان نگه داشتن یا هزینه روش پرداخت خود مشاهده کنند. این نگهدارنده یا شارژ موقتی است و بعداً معکوس یا بازپرداخت می شود.

پس از پایان دوره آزمایش ، روش پرداخت کاربر برای مبلغ اشتراک کامل شارژ می شود.

اگر کاربر در هر زمان در طول آزمایش رایگان ، اشتراک را لغو کند ، اشتراک تا پایان آزمایش فعال است و با پایان دوره آزمایش رایگان ، آنها شارژ نمی شوند.

لغو ، بازپرداخت یا ابطال

می توانید از API توسعه دهنده Google Play برای لغو ، بازپرداخت یا ابطال اشتراک استفاده کنید. این قابلیت در کنسول Google Play نیز موجود است.

  • لغو : کاربران می توانند اشتراک در Google Play را لغو کنند. همچنین می توانید گزینه ای را برای کاربران فراهم کنید تا در برنامه یا وب سایت خود لغو کنند. برنامه شما باید این لغو ها را همانطور که در لغو توضیح داده شده است ، کنترل کنند.
  • بازپرداخت : هنگام بازپرداخت ، کاربر می تواند به استفاده از اشتراک ادامه دهد. بازپرداخت می تواند مورد استفاده قرار گیرد اگر به عنوان مثال ، خطای فنی وجود داشته باشد که مانع از دسترسی کاربر به محصول شما شود ، اما خطا برطرف شده است. توجه داشته باشید که برای بازپرداخت بیش از جدیدترین پرداخت ، یا اگر می خواهید بازپرداخت جزئی صادر کنید ، باید از کنسول Google Play استفاده کنید.
  • ابطال : هنگامی که شما را ابطال می کنید ، کاربر بلافاصله دسترسی به اشتراک را از دست می دهد. این می تواند مورد استفاده قرار گیرد ، به عنوان مثال ، یک خطای فنی وجود دارد که مانع از دسترسی کاربر به محصول شما می شود و کاربر نمی خواهد استفاده از محصول را ادامه دهد. برنامه شما باید این لغو ها را همانطور که در Revocations توضیح داده شده است ، کنترل کنند.

در جدول زیر تفاوت بین لغو ، بازپرداخت و ابطال نشان داده شده است.

تمدید را متوقف می کند بازپرداخت پول لغو دسترسی
لغو کنید بله خیر خیر
بازپرداخت خیر بله خیر
لغو بله بله بله

صورتحساب را برای مشترک به تعویق بیندازید

شما می توانید تاریخ صورتحساب بعدی را برای مشترکین تمدید خودکار با استفاده از Purchases.subscriptions:defer . در دوره تعویق ، کاربر با دسترسی کامل در محتوای شما مشترک می شود اما شارژ نمی شود. تاریخ تجدید اشتراک به روز شده است تا تاریخ جدید را منعکس کند.

برای برنامه های پیش پرداخت ، می توانید از API Offer Billing برای تعویق زمان انقضا استفاده کنید.

صورتحساب معوق به شما امکان می دهد موارد زیر را انجام دهید:

  • به کاربران دسترسی رایگان به عنوان یک پیشنهاد ویژه ، مانند دادن یک هفته رایگان برای خرید فیلم ، دسترسی رایگان کنید.
  • به عنوان یک ژست حسن نیت به مشتریان دسترسی رایگان داشته باشید.

صورتحساب را می توان به اندازه یک روز و تا زمانی که یک سال در هر تماس API به تعویق افتاد ، تعویق کرد. برای به تعویق انداختن صورتحساب حتی بیشتر ، می توانید قبل از رسیدن تاریخ جدید صورتحساب ، دوباره با API تماس بگیرید.

به عنوان نمونه ، دارسی اشتراک ماهانه به محتوای آنلاین برای برنامه فصلنامه ماهیگیری دارد. او به طور معمول در هر ماه 1.25 پوند صورتحساب می شود. در ماه مارس ، وی در یک نظرسنجی آنلاین برای ناشر برنامه شرکت کرد. این ناشر با شش هفته رایگان با تعویق پرداخت بعدی تا 15 مه ، که شش هفته پس از تاریخ صدور صورتحساب قبلی او در تاریخ 1 آوریل است ، به او پاداش می دهد. دارسی برای ماه آوریل یا آغاز ماه مه شارژ نمی شود و هنوز به محتوا دسترسی دارد. در تاریخ 15 ماه مه ، هزینه اشتراک 1.25 پوند معمولی را برای ماه متهم می کند. تاریخ تجدید بعدی وی اکنون 15 ژوئن است.

هنگام تعویق ، ممکن است بخواهید از طریق ایمیل یا در داخل برنامه به کاربر اطلاع دهید تا به آنها اطلاع دهید که تاریخ صورتحساب آنها تغییر کرده است.

رسیدگی به پرداخت پرداخت

اگر مشکلات پرداخت با تمدید اشتراک وجود داشته باشد ، Google به طور دوره ای قبل از لغو تلاش برای تمدید اشتراک برای مدتی است. این دوره بهبودی می تواند شامل یک دوره فضل باشد و به دنبال آن یک دوره نگه داشتن حساب انجام شود. در این مدت ، Google ایمیل ها و اعلان های کاربر را به آنها ارسال می کند و باعث می شود که آنها روش پرداخت خود را به روز کنند.

پس از کاهش پرداخت ، اشتراک در صورت پیکربندی یک دوره فضل وارد می شود. در طول دوره GRACE ، شما باید اطمینان حاصل کنید که کاربر هنوز به حق اشتراک دسترسی دارد.

پس از پایان هر دوره فضل ، اشتراک وارد یک دوره نگه داشتن حساب می شود. در حین نگه داشتن حساب ، باید اطمینان حاصل کنید که کاربر به حق اشتراک دسترسی ندارد.

می توانید طول هر دوره GRACE و نگهدارنده حساب Base Plan Base را در کنسول Google Play مشخص کنید. مشخص کردن طول کمتر از مقادیر پیش فرض ممکن است تعداد اشتراک های دریافت شده از کاهش پرداخت را کاهش دهد.

برای به حداکثر رساندن احتمال بازیابی اشتراک در طی کاهش پرداخت ، می توانید کاربر خود را از مسئله پرداخت مطلع کنید و از آنها بخواهید که آن را برطرف کنند.

شما می توانید این کار را خودتان انجام دهید ، همانطور که در بخش های GRACE و بخش نگهدارنده حساب توضیح داده شده است ، یا می توانید API پیام رسانی درون برنامه را پیاده سازی کنید ، جایی که Google پیامی را برای کاربران در برنامه شما نشان می دهد.

پیام رسانی درون برنامه ای

اگر پیام های درون برنامه ای را با InAppMessageCategoryId.TRANSACTIONAL فعال کرده اید ، Google Play به کاربران پیام رسانی را در طول دوره فضل و نگه داشتن حساب یک بار در روز نشان می دهد و فرصتی را برای آنها فراهم می کند تا بدون ترک برنامه ، پرداخت خود را برطرف کنند.

Snackbar به کاربر اطلاع می دهد تا پرداخت خود را برطرف کند
شکل 20 Snackbar به کاربر اطلاع می دهد تا پرداخت خود را برطرف کند.

توصیه می کنیم هر زمان که کاربر برنامه را باز کند ، با این API تماس بگیرید تا مشخص شود که آیا پیام باید نشان داده شود.

اگر کاربر اشتراک خود را با موفقیت بازیابی کند ، شما یک کد پاسخ از SUBSCRIPTION_STATUS_UPDATED به همراه یک نشانه خرید دریافت خواهید کرد. سپس باید از این نشانه خرید استفاده کنید تا با API توسعه دهنده Google Play تماس بگیرید و وضعیت اشتراک را در برنامه خود تازه کنید.

پیام های درون برنامه را ادغام کنید

برای نشان دادن پیام رسانی درون برنامه به کاربر ، از BillingClient.showInAppMessages() استفاده کنید.

در اینجا نمونه ای از تحریک جریان پیام رسانی در برنامه وجود دارد:

کاتلین

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.
                }
            }
        })

جاوا

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_ACTIVE با وضعیت SUBSCRIPTION_STATE_PENDING شروع می شود. اگر معامله توسط کاربر منقضی شده یا لغو شود ، به SUBSCRIPTION_STATE_PENDING_PURCHASE_EXPIRED می رود. شما باید و فقط باید پس از اتمام معامله ، حق کاربر را به روز کنید.

تغییر وضعیت اشتراک برای خرید اولیه با معاملات در انتظار ساده است. برنامه شما وقتی کاربر معامله معلق را آغاز می کند ، Purchase با حالت PENDING دریافت می کند. پس از اتمام معامله ، برنامه شما دوباره Purchase با دولت به روز شده برای PURCHASED دریافت می کند. یک پیام SubscriptionNotification با Type SUBSCRIPTION_PURCHASED به مشتری RTDN شما ارسال می شود. برای تأیید خرید ، فرآیند عادی را دنبال کنید ، به کاربر دسترسی پیدا کنید و به محتوا دسترسی پیدا کنید و خرید را تصدیق کنید. اگر معامله منقضی شود یا لغو شود ، یک پیام SubscriptionNotification با نوع SUBSCRIPTION_PENDING_PURCHASE_CANCELED به مشتری RTDN شما ارسال می شود. در چنین مواردی ، کاربر هرگز نباید به محتوا دسترسی پیدا کند.

بالا به بالا ، ارتقا یا پایین آمدن با معاملات در انتظار ، تغییرات حالت را برای اشتراک های قدیمی و جدید شامل می شود. هنگامی که کاربر یک معامله در انتظار بالا ، ارتقا یا پایین آمدن معامله را آغاز می کند ، برنامه شما با یک شیء PendingPurchaseUpdate Purchase برای اشتراک قدیمی دریافت می کند. در این زمان ، کاربر هنوز صاحب اشتراک قدیمی است و هنوز اشتراک جدید را به دست نیاورد. فراخوانی getProducts() و getPurchaseToken() در مورد PendingPurchaseUpdate ، شناسه های محصول را برمی گرداند و نشانه اشتراک جدید را خریداری می کند. پس از اتمام معامله ، برنامه شما با استفاده از نشانه خرید سطح بالا برای اشتراک جدید و وضعیت خریداری PURCHASED Purchase دریافت می کند. یک پیام SubscriptionNotification با Type SUBSCRIPTION_PURCHASED به مشتری RTDN شما ارسال می شود. فقط در این زمان ، شما باید توکن خرید قدیمی را با نشانه خرید جدید جایگزین کرده و دسترسی کاربر به محتوا را به روز کنید. اگر معامله منقضی شود یا لغو شود ، یک پیام SubscriptionNotification با نوع SUBSCRIPTION_PENDING_PURCHASE_CANCELED به مشتری RTDN شما ارسال می شود. در چنین مواردی ، کاربر هنوز باید به محتوای اشتراک قدیمی دسترسی داشته باشد.