اشتراک با برافزا به شما امکان میدهد چندین محصول اشتراکی را در قالب یک بسته ارائه دهید که میتوان آنها را با هم خریداری، صورتحساب، و مدیریت کرد. اشتراکهای کاتالوگ محصول فعلیتان را میتوانید بهراحتی بهعنوان برافزا بدون هیچگونه مشخصات اولیه یا پیکربندی اضافی ارائه دهید. میتوانید جریان خریدی را با چند محصول اشتراکی موجود راهاندازی کنید و آنها را بهعنوان برافزا بفروشید.
ملاحظات
هنگام استفاده از ویژگی اشتراک با برافزا، نکات زیر را درنظر بگیرید:
اشتراک با برافزا فقط برای طرحهای پایه با تمدید خودکار پشتیبانی میشود.
همه موارد موجود در خرید باید دوره صورتحساب تکرارشونده یکسانی داشته باشند. برای مثال، نمیتوانید اشتراک با صورتحساب سالانه و برافزا با صورتحساب ماهانه داشته باشید.
در اشتراک با خرید برافزا، حداکثر میتوانید ۵۰ مورد داشته باشید.
این ویژگی در کره جنوبی (KR) دردسترس نیست.
ادغام با «کتابخانه خدمات صورتحساب Play»
این بخش نحوه ادغام کردن ویژگی اشتراک با برافزاها را با «کتابخانه خدمات صورتحساب Play» (PBL) شرح میدهد. فرض بر این است که شما با مراحل اولیه ادغام PBL آشنا هستید، مانند افزودن وابستگی PBL به برنامه خود، مقداردهی اولیه BillingClient، و اتصال به Google Play. این بخش بر جنبههای ادغام PBL تمرکز دارد که مختص اشتراک با برافزا است.
راهاندازی جریان خرید
برای راهاندازی جریان خرید برای اشتراک دارای برافزا، مراحل زیر را انجام دهید:
بااستفاده از روش
BillingClient.queryProductDetailsAsync، همه موارد اشتراکتان را واکشی کنید.شیء
ProductDetailsParamsرا برای هر مورد تنظیم کنید.موردی که با شیء
ProductDetailsParamsنشان داده میشود، همProductDetailsرا که نشاندهنده مورد اشتراک است و همofferTokenرا کهbase planیاofferاشتراک خاصی را انتخاب میکند مشخص میکند.جزئیات مورد را در روش
BillingFlowParams.Builder.setProductDetailsParamsListمشخص کنید. کلاسBillingFlowParamsجزئیات جریان خرید را مشخص میکند.نمونه زیر نشان میدهد که چگونه جریان صورتحساب را برای خرید اشتراک با چند محصول راهاندازی کنید:
جاوا
BillingClient billingClient = …; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ArrayList
productDetailsList = new ArrayList<>(); productDetailsList.add(productDetails1); productDetailsList.add(productDetails2); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
قوانین ذیربط برای موارد موجود در خرید
- برای اطمینان از اینکه تاریخهای تمدید برافزا درنهایت با محصول پایه هماهنگ شود، Google Play ممکن است پساز هر دوره آزمایشی یا فاز قیمت آغازین، هزینه سرشکنشدهای را درج کند.
- واجدشرایط بودن برای پیشنهاد ویژه برای هر مورد بهطور جداگانه ارزیابی خواهد شد.
پردازش خریدها
پردازش اشتراک با برافزاها مانند پردازش
خرید اشتراک تکی است که در
ادغام کردن کتابخانه خدمات صورتحساب Google Play در برنامه شرح داده شده است. تنها
تفاوت این است که کاربر میتواند با یک خرید، چندین
حق استفاده دریافت کند. خرید اشتراک با برافزاها چندین مورد را برمیگرداند که میتوان آنها را بااستفاده از Purchase.getProducts() در «کتابخانه خدمات صورتحساب Google Play» و سپس فهرست lineItems در purchases.subscriptionsv2.get از Google Play Developer API بازیابی کرد.
اصلاح اشتراکهای دارای برافزا
هرگونه تغییر در اشتراک شما با برافزاها منجر به ارتقا یا تنزل میشود. برای اطلاعات بیشتر، ارتقا یا تنزل اشتراکها را ببینید.
برای تغییر یا بازیابی خرید موجود اشتراک با برافزاها در
برنامهتان، باید launchBillingFlow API را با پارامترهای
اضافی فراخوانی کنید و از موارد زیر مطمئن شوید:
- همیشه
setOldPurchaseTokenرا با کد خرید اشتراک فعلی فراخوانی کنید. - برای ارتقا، تنزل، یا تغییر طرح یک مورد،
SubscriptionProductReplacementParams.setReplacementModeرا فراخوانی کنید تا مشخص شود تغییر طرح بین مورد خرید قدیمی و جدید چگونه باید انجام شود. درغیراینصورت، نیازی به تنظیمSubscriptionProductReplacementParamsنیست. - وقتی محصول پایه تغییر نکرده است، همچنان میتوانید
SubscriptionProductReplacementParams.setSubscriptionReplacementModeرا برای اعمال رفتار جایگزینی خاصی فراخوانی کنید. برای اطلاع از قوانین قابلاجرا در این مورد، به ازسرگرفتن اشتراک یا عوض کردن طرح در همان اشتراک مراجعه کنید. - برافزاهای جدید بلافاصله با هزینه سرشکنشده اعمال میشوند تا تاریخ تمدید بعدی با مورد پایه در اشتراک هماهنگ شود.
- برافزاهای برداشتهشده در پایان دورههای صورتحساب فعلیشان منقضی خواهند شد.
- هنگام راهاندازی جریان صورتحساب، باید همه موارد فعال در اشتراک را با برافزاها مشخص کنید، بهجز مواردی که باید برداشته شوند، بههمراه هر برافزای جدید.
نمونه زیر نشان میدهد که چگونه میتوان میانای برنامهسازی کاربردی launchBillingFlow را هنگام تغییر خرید موجود اشتراک با برافزاها فراخوانی کرد:
جاوا
BillingClient billingClient = …; int replacementMode =…; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ProductDetailsParams productDetails3 = ...; ArrayListnewProductDetailsList = new ArrayList<>(); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) // No need to set if change does not affect the base item. .setSubscriptionReplacementMode(replacementMode) .build()) .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
سناریوهای اصلاح اشتراک
جدول زیر سناریوهای مختلف اصلاح اشتراک با برافزاها و رفتار مربوطه را فهرست میکند.
هنگام استفاده از SubscriptionProductReplacementParams
| موارد موجود | موارد اصلاحشده | آیا باید حالت جایگزینی را در SubscriptionProductReplacementParams تنظیم کنید؟ | رفتار |
|---|---|---|---|
| A (مورد پایه)، B | A (مورد پایه) | بله (از KEEP_EXISTING استفاده شود) |
|
| آمپر | A (مورد پایه)، B | بله (از KEEP_EXISTING برای A استفاده شود) |
|
| A (مورد پایه)، B | A (مورد پایه)، C | بله (از KEEP_EXISTING برای A استفاده شود) |
|
| A (مورد پایه)، B | B (مورد پایه) | نه | A برای برداشتن معوق زمانبندی شده است. |
| A (مورد پایه)، B | C (مورد پایه) | بله |
|
| A (مورد پایه)، B | C (مورد پایه)، B | بله |
|
| A (مورد پایه)، B | C (مورد پایه)، D | بله |
|
| A (مورد پایه)، B | A (مورد پایه)، C | بله |
|
| A (مورد پایه)، B، C | D (مورد پایه)، B، C | بله |
|
هنگام استفاده از SubscriptionUpdateParams
| موارد موجود | موارد اصلاحشده | آیا لازم است اطلاعات جایگزین را تنظیم کنید؟ | رفتار |
|---|---|---|---|
| A (مورد پایه)، B | A (مورد پایه) | نه |
|
| آمپر | A (مورد پایه)، B | نه |
|
| A (مورد پایه)، B | A (مورد پایه)، C | نه |
|
| A (مورد پایه)، B | B (مورد پایه) | نه | A برای برداشتن معوق زمانبندی شده است. |
| A (مورد پایه)، B | C (مورد پایه) | بله |
|
| A (مورد پایه)، B | C (مورد پایه)، B | بله | جایگزین A -> C به
setSubscriptionReplacementMode بستگی دارد (در PBL 8.1 منسوخ شده است). |
| A (مورد پایه)، B | C (مورد پایه)، D | بله |
|
اعلانهای بیدرنگ برنامهنویس
فیلد subscriptionId در RTDN برای خریدهای اشتراک با برافزا که شامل چندین حق استفاده از محصول است ارائه نمیشود.
درعوض، میتوانید از Play Developer API برای دریافت خرید و
دیدن حقوق مرتبط با محصول استفاده کنید.
تغییر قیمت برای مشترکین فعلی
تغییر قیمت اشتراک برای مشترکین فعلی اشتراکی که خرید برافزا دارد مشابه تغییر قیمت اشتراک تکی است که در تغییر قیمت اشتراک شرح داده شده است. بااینحال، برخی محدودیتها و تفاوتهای عملکردی وجود دارد که در این بخش شرح داده شده است.
پایان دادن به همگروه قیمت قدیمی
پایان دادن به همگروه قدیمی بر اشتراکهای دارای خرید برافزا نیز تأثیر میگذارد. قوانین زیر اعمال میشود:
همه افزایش قیمتهای با الزام به توافق معوقه باید زمان تمدید یکسانی با قیمت جدید داشته باشند. اگر موردی در اشتراک با خرید برافزاها افزایش قیمت با الزام به توافق داشته باشد که هنوز توسط کاربر تأیید نشده است، هرگونه افزایش قیمت با الزام به توافق جدید برای موارد دیگر در خرید نادیده گرفته خواهد شد، مگراینکه منجر به همان زمان تمدید اعمال قیمت جدید شود که افزایش قیمت موجود در وضعیت معوقه دارد. وقتی کاربر افزایش قیمت را تأیید کند، هرگونه تغییر قیمت جدیدتر ثبت خواهد شد. و کاربران فقط میتوانند همه افزایشهای قیمت با الزام به توافق با کاربر را که تأیید نشدهاند بهطور همزمان بپذیرند.
مثال:
- اشتراکی را با برافزاها (محصولات الف و ب) درنظر بگیرید، که در هفتم هر ماه تمدید میشود.
- مورد الف انتقال قیمت درحالانجام از ۷ دلار به ۱۰ دلار دارد و انتظار میرود افزایش قیمت در ۷ ژوئیه اعمال شود.
- انتقال قیمت جدید از ۵ دلار به ۶ دلار برای محصول B در ۲ ژوئن شروع میشود. ازآنجاییکه افزایش قیمت با الزام به توافق ۳۷ روز پساز انتقال شروع میشود، زودترین افزایش قیمت برای محصول ب در ۷ اوت خواهد بود.
در این سناریو، تا زمانی که کاربر تغییر قیمت را برای مورد الف نپذیرد (تا زمانی که در وضعیت تأییدشده باشد)، تغییر قیمت برای مورد ب برای این خرید اشتراک ثبت نمیشود، و SubscriptionPurchaseV2 جزئیات تغییر قیمت را برای مورد ب برنمیگرداند. پساز اینکه کاربر تغییر قیمت محصول الف را تأیید کرد، تغییر قیمت محصول ب شروع میشود. کاربر افزایش قیمت با الزام به توافق محصول ب را فقط پساز پذیرفتن افزایش قیمت با الزام به توافق محصول الف دریافت میکند.
ایمیل Google Play حاوی فهرستی از همه مواردی است که افزایش یا کاهش قیمت آنها در همان روز اعمال میشود.
لغو اشتراک دارای برافزا
کاربران میتوانند کل خرید اشتراک با برافزاها را در «مرکز اشتراک Play» لغو کنند، و شما فقط میتوانید کل خرید اشتراک با برافزاها را بااستفاده از Google Play Developer API لغو کنید.
وقتی خرید اشتراکی لغو میشود اما فسخ نمیشود، هیچکدام از موارد موجود در خرید بهطور خودکار تمدید نمیشود، اما کاربر همچنان تا پایان دورههای صورتحساب مربوطه به موارد مجاز، ازجمله دورههای آزمایشی رایگان، دسترسی خواهد داشت.
لغو و استرداد مبلغ اشتراکهای دارای برافزا
برخیاز دستورالعملهای لغو و بازپرداخت اشتراکها در زیر آمده است:
از «کنسول Play» برای صدور استرداد مبلغی برای «سفارش» خاصی بدون لغو دسترسی به اشتراک استفاده کنید.
برای بازپرداخت کامل پرداختهای اشتراک خاصی که کاربر انجام داده است، بدون لغو دسترسی به اشتراک، با
orders.refundتماس بگیرید.برای لغو فوری دسترسی به همه موارد اشتراک، با
purchases.subscriptionsv2.revokeتماس بگیرید. با این API میتوانید:دسترسی به همه موارد را لغو کنید و بازپرداخت سرشکنشده ارائه دهید.
هنگام لغو اشتراک با برافزاها بااستفاده از بازپرداختهای سرشکنشده، بازپرداختی برای آخرین سفارش هر مورد با مبلغ سرشکنشده براساس زمان باقیمانده تا تمدید بعدی صادر خواهد شد.
دسترسی به همه موارد را لغو کنید و استرداد مبلغ کامل ارائه دهید.
دسترسی به مورد تکی را لغو کنید و استرداد کامل برای آن مورد انجام دهید.
لغو کردن مورد تکی در اشتراک دارای برافزا
برای لغو کردن موارد اشتراک تکی در اشتراک دارای برافزا بدون لغو کردن کل خرید، purchases.subscriptionsv2.revoke را با فیلد ItemBasedRefund تنظیمشده در RevocationContext فراخوانی کنید. productId موردی که باید لغو و مسترد شود را میتوان در فیلد ItemBasedRefund تنظیم کرد.
فیلد ItemBasedRefund را میتوان برای خریدهایی با یک یا چند
مورد اشتراک تمدید خودکار تنظیم کرد.
- اگر پساز لغو کردن محصول مشخصشده در
ItemBasedRefund، همچنان محصولات فعالی در خرید اشتراک باقی مانده باشد، فقط آن محصول لغو میشود و بدون ایجاد وقفه در وضعیت اشتراک، مبلغ آن بهطور کامل مسترد میشود. - اگر پساز لغو کردن محصول مشخصشده در
ItemBasedRefund، هیچ محصول فعالی در خرید اشتراک باقی نماند، محصول لغو میشود، مبلغ آن بهطور کامل مسترد میشود، و اشتراک لغو میشود.
ملاحظات
- هنگام استفاده از
ItemBasedRefund، فقط یک مورد را میتوان در هر بار لغو کرد. اگر لازم باشد موارد مختلفی لغو شود، میتوان درخواست را چندین بار فراخوانی کرد. - وقتی خرید اشتراک در هریک از حالتهای رد پرداخت باشد، یا
مورد مشخصشده در
ItemBasedRefundمتعلق به کاربر نباشد یا منقضی شده باشد، رد کردن مورد مسدود میشود. - کاهش سطح محصول در اشتراک پیشپرداخت پشتیبانی نمیشود.
بهتعویق انداختن صورتحساب
میتوانید تاریخ صورتحساب بعدی را برای اشتراک دارای برافزا بااستفاده از
روش Purchases.subscriptionsv2:defer جلو بیندازید.
وقتی اشتراکی را با برافزاها بهتعویق میاندازید، همه موارد موجود در اشتراک به همان مدت بهتعویق میافتند. درطول دوره تعویق، کاربر دسترسی کامل به همه موارد را حفظ میکند اما هزینهای از او کسر نمیشود. تاریخ تمدید همه موارد به تاریخ جدید بهروزرسانی میشود.
این کار میتواند برای تبلیغات یا ابراز حسن نیت به مشتری مفید باشد. صدور صورتحساب را میتوان بهازای هر فراخوانی API از یک روز تا یک سال بهتعویق انداخت. میتوانید چندین بار با API تماس بگیرید تا تعویق را قبلاز رسیدن تاریخ صورتحساب جدید تمدید کنید.
وقتی این کنش انجام شود، اعلان بیدرنگ توسعهدهنده SUBSCRIPTION_DEFERRED راهاندازی میشود.
انقضای محصول درطول رد پرداخت
برای خرید اشتراک با برافزاها، ممکن است برخیاز تمدیدها فقط نیاز به تمدید زیرمجموعهای از حقوق آیتم داشته باشند، بدون اینکه بر آیتمهایی با تاریخ انقضای آینده تأثیر بگذارند.
صرفنظر از اینکه کدام محصولات در تمدید دخیل هستند، اگر پرداخت تمدید رد شود، کل خرید اشتراک وارد مهلت ارفاقی و تعلیق حساب میشود، همانطور که در مستندات زیر توضیح داده شده است.
انتخاب دوره بازیابی
ازآنجاییکه مهلت ارفاقی همچنان به کاربر حق استفاده میدهد، پساز خرید اشتراک با برافزا، پرداخت تمدید رد میشود، محصولی با حداقل مهلت ارفاقی از بین همه محصولات فعال انتخاب میشود، و مهلت ارفاقی و دوره تعلیق حساب آن بهعنوان دوره بازیابی برای این تمدید اعمال میشود.
موارد فعال شامل مواردی است که در خرید اشتراک با برافزاها درست قبلاز تلاش برای تمدید فعال بودهاند، موارد جدیداً اضافهشده را شامل نمیشود (که تا بعداز بازیابی واجدشرایط نخواهند بود)، و مواردی را که بهدلیل برداشته شدن یا رد شدن دیگر فعال نیستند شامل نمیشود.
تنظیم تعلیق حساب موردی که حداقل مهلت ارفاقی برای آن انتخاب شده است اعمال میشود. اگر بیشاز یک مورد با حداقل مهلت ارفاقی وجود داشته باشد، اما دورههای توقف حساب متفاوت باشد، طولانیترین دوره توقف حساب اعمال میشود.
دوره مهلت
وقتی پرداخت تمدید اشتراک رد شود، خرید اشتراک وارد وضعیت مهلت ارفاقی میشود. درطول مهلت ارفاقی، کاربر همچنان به همه موارد فعال از دوره تمدید قبلی دسترسی خواهد داشت. پساز مهلت ارفاقی، اگر روش پرداخت اصلاح نشده باشد، کل خرید اشتراک بهحالت تعلیق حساب میرود. اگر تاریخ تمدید هر محصول دیگری درطول مهلت ارفاقی فرا برسد، پساز اینکه اشتراک از رد پرداخت بازیابی شد، تلاش جدیدی برای کسر هزینه آن محصولات آغاز خواهد شد.
تعلیق موقت حساب
وقتی خرید اشتراک در وضعیت تعلیق حساب است، دسترسی به همه موارد اشتراک تا زمان بازیابی پرداخت بهحالت تعلیق درمیآید.
اگر اشتراک در تعلیق حساب بازیابی شود، خرید اشتراک بههمان صورت ادامه مییابد. اگر اشتراک بازیابی نشود، موارد موجود در رد پرداخت منقضی میشوند و دسترسی به موارد دیگر برای باقیمانده دورههای صورتحساب آنها ازسر گرفته میشود.
مثال:
کاربری اشتراک طرح پایه من دارد که در روز اول هر ماه تمدید میشود، سپس در ۱۵ اوت، طرح برافزای ۱۰ دلاری در ماه با دوره آزمایشی رایگان هفتروزه اضافه میکند. برای هیچکدام از این محصولات مهلت ارفاقی تنظیم نشده است و هر دو محصول دوره توقف حساب ۳۰ روزه دارند.
در ۲۲ اوت، مبلغ ۲٫۹۰ دلار (۱۰*۹/۳۱) بهصورت سرشکن تا ۳۱ اوت از کاربر کسر میشود، اما روش پرداخت کاربر قبلاز آن منقضی میشود و اشتراک در ۲۲ اوت به وضعیت رد پرداخت میرود.
وقتی اشتراک بهدلیل رد شدن پرداخت وارد تعلیق حساب میشود، کاربر به هیچکدام از موارد موجود در اشتراک با برافزاها دسترسی ندارد. زمان باقیمانده برای مواردی که تمدید نمیشوند، وقتی اشتراک از حالت تعلیق حساب خارج شود، به کاربران بازگردانده میشود، چه به دلیل بازیابی پرداخت و چه به دلیل لغو آن.
در مثال قبلی، اشتراک در ۲۲ اوت وارد تعلیق حساب میشود.
اگر حساب در ۲۵ اوت، قبلاز تاریخ تمدید گستردهتر در ۱ سپتامبر، بازیابی شود، کاربر در همان روز دوباره به طرح پایه من و طرح برافزا دسترسی پیدا میکند. تاریخ صورتحساب بعدی به ۴ سپتامبر تغییر کرد.
اگر حساب پساز ۳۰ روز بازیابی نشود، اشتراک در ۲۱ سپتامبر لغو میشود و کاربر دسترسی به طرح برافزا را ازدست میدهد و دسترسی به طرح پایه من را تا ۳۰ سپتامبر ازسر میگیرد.
در این مثال، باید expiryTime بهروزشده را برای همه موارد موجود در اشتراک با برافزاها دریافت کنید، زیرا ممکن است برخیاز موارد پساز دوره ارفاقی و تعلیق حساب، حق استفاده خود را ازسر بگیرند.
گزارش مالی و تطبیق
از گزارش درآمد برای تطبیق دادن اشتراکهای فعال با تراکنشهایتان در Play استفاده کنید. هر قلم تراکنش دارای شناسه سفارش است. در خریدهایی که شامل چند محصول است، گزارشهای درآمد و فروش تخمینی شامل ردیفهای جداگانهای برای هر تراکنش مانند هزینه، کارمزد، مالیات، و بازپرداخت برای هر محصول مربوطه خواهد بود.
برای داشبوردها در «کنسول Play»:
آمار درآمد ارائهشده در بخش گزارش مالی کنسول براساس موارد تفکیک شده است.
مدیریت سفارش نشاندهنده خرید اشتراک با برافزاها است و فهرستهای تفکیکشدهای از آنچه خریداری شده است را نشان میدهد. از مدیریت سفارش، میتوانید خرید کاربر را لغو یا مسترد کنید.