اشتراک با افزونهها به شما امکان میدهد چندین محصول اشتراک را با هم بچسبانید که میتوانند با هم خریداری، صورتحساب و مدیریت شوند. اشتراکهای کاتالوگ محصولات موجود شما را میتوان بهصورت یکپارچه بهعنوان افزونهها و بدون هیچگونه مشخصات اولیه یا پیکربندی اضافی ارائه کرد. میتوانید یک جریان خرید را با چندین محصول اشتراک موجود راهاندازی کنید و آنها را به عنوان افزونه بفروشید.
ملاحظات
هنگام استفاده از اشتراک با ویژگی افزودنی به نکات زیر توجه کنید:
اشتراک با افزونهها فقط برای طرحهای پایه تمدید خودکار پشتیبانی میشود.
همه اقلام موجود در خرید باید دارای دوره صورتحساب تکرار شونده یکسانی باشند. به عنوان مثال، نمیتوانید اشتراک سالانه صورتحساب با افزونههای صورتحساب ماهانه داشته باشید.
با خرید افزونه می توانید حداکثر 50 مورد در اشتراک داشته باشید.
این ویژگی در مناطق هند ( IN ) و کره جنوبی ( KR ) در دسترس نیست.
با کتابخانه صورتحساب Play یکپارچه شوید
این بخش نحوه ادغام اشتراک با ویژگی افزودنی را با کتابخانه صورتحساب Play (PBL) توضیح میدهد. فرض بر این است که شما با مراحل اولیه ادغام PBL مانند افزودن وابستگی PBL به برنامه خود ، مقداردهی اولیه BillingClient و اتصال به Google Play آشنا هستید. این بخش بر جنبههای یکپارچهسازی PBL که مختص اشتراک با افزونهها است، تمرکز دارد.
یک جریان خرید راه اندازی کنید
برای راهاندازی جریان خرید برای اشتراک با افزونهها، مراحل زیر را انجام دهید:
همه موارد اشتراک خود را با استفاده از روش
BillingClient.queryProductDetailsAsync
واکشی کنید.شی
ProductDetailsParams
را برای هر مورد تنظیم کنید.موردی که توسط شی
ProductDetailsParams
نشان داده می شود، همProductDetails
مشخص می کند که آیتم اشتراک را نشان می دهد و هم یکofferToken
که یک طرح یاoffer
base plan
اشتراک خاص را انتخاب می کند.جزئیات مورد را در روش
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
API برنامهنویس Google Play بازیابی شوند.
اشتراک ها را با افزونه ها تغییر دهید
هر گونه تغییر در اشتراک شما با افزونه ها، منجر به ارتقا یا کاهش می شود. برای اطلاعات بیشتر، به ارتقا یا کاهش اشتراک ها مراجعه کنید.
برای تغییر یا بازیابی خرید اشتراک موجود با افزونههای موجود در برنامه خود، باید با launchBillingFlow
API با پارامترهای اضافی تماس بگیرید و از موارد زیر اطمینان حاصل کنید:
- همیشه با نماد خرید خرید اشتراک فعلی
setOldPurchaseToken
تماس بگیرید. - برای ارتقا، تنزل یا تقاطع آیتم پایه، با
setSubscriptionReplacementMode
تماس بگیرید تا مشخص کنید که چگونه تغییر طرح بین آیتم های پایه قبلی و خرید جدید اشتراک با افزونه ها انجام شود. در غیر این صورت نیازی به تنظیم این پارامتر نیست. - وقتی آیتم پایه تغییر نمی کند، همچنان می توانید
setSubscriptionReplacementMode
را برای اعمال یک رفتار تقسیم بندی خاص فراخوانی کنید. برای قوانین قابل اجرا در این مورد، به اشتراک مجدد یا تغییر طرح ها در همان اشتراک مراجعه کنید. - افزونههای جدید بلافاصله با هزینه متناسب اعمال میشوند تا تاریخ تمدید بعدی را با آیتم پایه در اشتراک هماهنگ کنند.
- افزونههای حذفشده در پایان دورههای صورتحساب فعلیشان منقضی میشوند.
- هنگام راهاندازی جریان صورتحساب، باید همه موارد فعال در اشتراک را با افزونهها به استثنای مواردی که باید حذف شوند، به همراه هر افزونه جدید مشخص کنید.
نمونه زیر نحوه فراخوانی launchBillingFlow
API را هنگام تغییر خرید اشتراک موجود با افزونه ها نشان می دهد:
جاوا
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);
سناریوهای اصلاح اشتراک
جدول زیر سناریوهای مختلف اصلاح برای اشتراک با افزونهها و رفتار مربوطه را فهرست میکند.
موارد موجود | موارد اصلاح شده | آیا باید حالت تعویض را تنظیم کنید؟ | رفتار |
---|---|---|---|
A (مورد پایه)، B | A (مورد پایه) | خیر | مورد B برای حذف معوق برنامه ریزی شده است. |
الف | A (مورد پایه)، B | خیر | مورد B بلافاصله با هزینه نسبتاً اضافه می شود. |
A (مورد پایه)، B | A (مورد پایه)، C | خیر |
|
A (مورد پایه)، B | B (مورد پایه) | خیر | A برای حذف معوق برنامه ریزی شده است. |
A (مورد پایه)، B | C (مورد پایه) | بله |
|
A (مورد پایه)، B | ج (مورد پایه)، B | بله | جایگزینی A -> C به setSubscriptionReplacementMode بستگی دارد. |
A (مورد پایه)، B | ج (مورد پایه)، D | بله |
|
اعلانهای بیدرنگ توسعهدهندگان
فیلد subscriptionId
در RTDN برای خرید اشتراک با افزونههایی که شامل چند مورد استحقاقی دارند، ارائه نشده است. درعوض، میتوانید از APIهای برنامهنویس Play برای خرید و مشاهده حقوق مورد مرتبط استفاده کنید.
تغییرات قیمت برای مشترکین موجود
تغییر قیمت اشتراک برای مشترکین موجود اشتراک با خرید برافزا مشابه تغییر قیمت اشتراک اشتراکهای تک موردی است که در تغییر قیمت اشتراک توضیح داده شده است. با این حال، برخی محدودیت ها و تفاوت های عملکردی وجود دارد که در این بخش توضیح داده شده است.
به یک گروه قیمت قدیمی پایان دهید
پایان دادن به یک گروه قدیمی بر اشتراک در خریدهای افزودنی نیز تأثیر می گذارد. قوانین زیر اعمال می شود:
تمام افزایشهای قیمت انتخابی برجسته باید زمان تمدید یکسانی با قیمت جدید داشته باشند. اگر موردی در اشتراک با خرید افزونه دارای افزایش قیمت انتخابی باشد که هنوز توسط کاربر تأیید نشده است، هرگونه افزایش قیمت انتخابی جدید برای سایر موارد در خرید نادیده گرفته میشود مگر اینکه منجر به همان زمان تمدید درخواست قیمت جدید شود که افزایش قیمت موجود در وضعیت OUTSTANDING . پس از تایید کاربر افزایش قیمت، هرگونه تغییر قیمت جدیدتر ثبت خواهد شد. و کاربران فقط میتوانند همه افزایش قیمتهای انتخابنشده تایید نشده را یکباره بپذیرند.
مثال:
- اشتراکی را با افزونه ها در نظر بگیرید (موارد A و B) که در 7 هر ماه تمدید می شود.
- آیتم A دارای تغییر قیمت مداوم از 7 دلار به 10 دلار است و انتظار می رود افزایش قیمت در 7 جولای اعمال شود.
- تغییر قیمت جدید از 5 دلار به 6 دلار، برای مورد B در 2 ژوئن شروع می شود. از آنجایی که افزایش قیمت انتخابی 37 روز پس از مهاجرت شروع می شود، برای اولین افزایش قیمت برای مورد B در 7 اوت خواهد بود.
در این سناریو، تا زمانی که کاربر تغییر قیمت مورد A را نپذیرد (تا زمانی که در وضعیت CONFIRMED قرار نگیرد)، تغییر قیمت برای کالای B برای این خرید اشتراک ثبت نمیشود و SubscriptionPurchaseV2 جزئیات تغییر قیمت مورد B را برمیگرداند. پس از تایید کاربر تغییر قیمت برای مورد A، تغییر قیمت مورد B شروع میشود. کاربر تنها پس از پذیرش افزایش انتخاب برای کالای A، افزایش قیمت انتخابی B را دریافت میکند.
ایمیل Google Play حاوی فهرستی از تمام مواردی است که افزایش یا کاهش قیمت در همان روز اعمال میشود.
لغو اشتراک با افزونه ها
کاربران میتوانند کل خرید اشتراک را با افزونهها در مرکز اشتراک Play لغو کنند و شما فقط میتوانید کل خرید اشتراک را با افزونهها با استفاده از Google Play Developer API لغو کنید.
هنگامی که خرید اشتراک بدون لغو لغو می شود، هیچ یک از موارد موجود در خرید به طور خودکار تمدید نمی شود، اما کاربر تا پایان دوره های صورتحساب مربوطه به موارد تحت عنوان دسترسی خواهد داشت.
لغو و بازپرداخت اشتراک ها با افزونه ها
در زیر برخی از دستورالعمل های لغو و بازپرداخت اشتراک آورده شده است:
از Play Console برای بازپرداخت بر اساس مبلغ برای یک سفارش خاص بدون لغو دسترسی به اشتراک استفاده کنید.
برای بازپرداخت کامل پرداخت های اشتراک خاصی که کاربر بدون لغو دسترسی به اشتراک انجام داده است، با
orders.refund
تماس بگیرید.با
purchases.subscriptionsv2.revoke
تماس بگیرید تا فوراً دسترسی به همه موارد اشتراک را لغو کنید. با این API می توانید:دسترسی به همه موارد را لغو کنید و بازپرداخت متناسبی را ارائه دهید.
هنگام لغو اشتراک با افزونهها با استفاده از بازپرداخت نسبتاً، بازپرداختی برای آخرین سفارش هر مورد با مبلغ متناسب بر اساس زمان باقیمانده تا تمدید بعدی صادر میشود.
دسترسی به همه موارد را لغو کنید و بازپرداخت کامل ارائه دهید.
با بازپرداخت کامل وجه روی مورد، دسترسی هر مورد را لغو کنید .
با استفاده از افزونهها، یک مورد را در یک اشتراک لغو کنید
برای لغو موارد اشتراک فردی در یک اشتراک با افزونهها بدون لغو کل خرید، با فیلد ItemBasedRefund
تنظیم شده در RevocationContext
با purchases.subscriptionsv2.revoke
تماس بگیرید. productId
موردی که باید لغو و بازپرداخت شود را می توان در قسمت ItemBasedRefund
تنظیم کرد.
قسمت ItemBasedRefund
را می توان برای خرید با یک یا چند مورد اشتراک تمدید خودکار تنظیم کرد.
- اگر پس از ابطال مورد مشخص شده در
ItemBasedRefund
، هنوز موارد فعالی در خرید اشتراک باقی مانده باشد، فقط آن مورد باطل می شود و بدون قطع شدن وضعیت اشتراک، به طور کامل بازپرداخت می شود. - اگر پس از لغو مورد مشخص شده در
ItemBasedRefund
هیچ مورد فعالی در خرید اشتراک باقی نماند، مورد لغو شده، به طور کامل بازپرداخت می شود و اشتراک لغو می شود.
ملاحظات
- هنگام استفاده از
ItemBasedRefund
فقط یک مورد را می توان در یک زمان باطل کرد. در صورت نیاز به ابطال موارد مختلف، درخواست را می توان چندین بار فراخوانی کرد. - زمانی که خرید اشتراک در یکی از وضعیتهای رد شده باشد، یا کالای مشخصشده در
ItemBasedRefund
متعلق به آن نباشد یا منقضی شده باشد، رد کردن مورد مسدود میشود. - رد کردن مورد در اشتراک پیش پرداخت پشتیبانی نمی شود.
انقضای کالا در هنگام رد پرداخت
برای خرید اشتراک با افزونهها، تمدیدهای خاص ممکن است فقط نیاز به تمدید زیرمجموعهای از حقوق اقلام داشته باشند، بدون اینکه بر موارد با تاریخ انقضای آینده تأثیر بگذارند.
صرف نظر از اینکه کدام موارد مربوط به تمدید می شود، اگر پرداخت تمدید رد شود، کل خرید اشتراک وارد دوره مهلت و نگهداری حساب می شود که در اسناد زیر توضیح داده شده است.
انتخاب دوره نقاهت
از آنجایی که دوره مهلت همچنان به کاربر این حق را میدهد، پس از خرید اشتراک با افزونهها، پرداخت تمدید رد میشود، موردی با حداقل مهلت برای همه موارد فعال انتخاب میشود و دوره مهلت و دوره نگهداری حساب آن به عنوان دوره بازیابی برای این تمدید اعمال میشود.
موارد فعال شامل مواردی میشود که درست قبل از تمدید، در خرید اشتراک با افزونهها فعال بودند، موارد جدید اضافهشده (که تا پس از بازیابی حق ندارند) را شامل نمیشود، و مواردی را که دیگر به دلیل حذف یا رد شدن فعال نیستند، شامل نمیشود.
تنظیم نگهداری حساب مورد با حداقل مهلت انتخاب شده اعمال می شود. اگر بیش از یک مورد با حداقل مهلت وجود داشته باشد، اما دوره های نگهداری حساب متفاوت باشد، طولانی ترین دوره نگهداری حساب اعمال می شود.
دوره ارفاقی
هنگامی که پرداخت تمدید اشتراک رد شود، خرید اشتراک وارد حالت دوره مهلت می شود. در طول دوره مهلت، کاربر همچنان به تمام موارد فعال دوره تمدید قبلی دسترسی خواهد داشت. پس از مهلت، اگر روش پرداخت ثابت نشده باشد، کل خرید اشتراک به حساب نگهداری میشود. اگر هر مورد دیگری در طول دوره مهلت به تاریخ تمدید خود برسد، پس از بازیابی اشتراک پس از رد پرداخت، تلاش برای هزینه جدیدی برای آن موارد آغاز خواهد شد.
نگه داشتن حساب
در حالی که خرید اشتراک در حساب نگهداری است، دسترسی به همه موارد اشتراک تا زمان بازیابی پرداخت به حالت تعلیق در میآید.
اگر اشتراک موجود در حساب بازیابی شود، خرید اشتراک همچنان به وجود خود ادامه میدهد. در صورت عدم بازیابی اشتراک، مواردی که در حال کاهش پرداخت هستند منقضی میشوند و دسترسی به سایر موارد برای باقیمانده دورههای صورتحساب آنها از سر گرفته میشود.
مثال:
یک کاربر دارای یک اشتراک My Base Plan است که در اول هر ماه تمدید میشود، سپس در 15 آگوست، 10 دلار در ماه اضافه میکند با یک دوره آزمایشی رایگان هفت روزه. هیچ یک از اقلام دارای مهلت تعیین شده نیستند و هر دو دارای دوره نگهداری حساب 30 روزه هستند.
در تاریخ 22 آگوست، مبلغ 2.90 دلار (10*9/31) از کاربر دریافت میشود تا تا 31 آگوست تقسیم شود، اما روش پرداخت کاربر قبل از آن منقضی میشود و اشتراک در 22 آگوست کاهش مییابد.
هنگامی که اشتراک به دلیل رد پرداخت وارد حساب کاربری می شود، کاربر به هیچ یک از موارد موجود در اشتراک با افزونه ها دسترسی ندارد. زمان باقیمانده برای مواردی که تمدید نمیشوند، به دلیل اینکه پرداخت بازیابی شده یا لغو شده است، پس از خروج اشتراک، به کاربران بازگردانده میشود.
در مثال قبلی، یک اشتراک در 22 آگوست وارد حساب کاربری خود می شود.
اگر حساب در 25 آگوست، قبل از تاریخ تمدید گسترده تر در 1 سپتامبر بازیابی شود، کاربر در همان روز به طرح پایه من و برنامه افزودن به طرح مجدد دسترسی پیدا می کند. تاریخ صورتحساب بعدی به 4 سپتامبر تغییر یافته است.
اگر حساب پس از 30 روز بازیابی نشد، اشتراک در 21 سپتامبر لغو میشود و کاربر دسترسی به طرح افزودن را از دست میدهد و دسترسی به طرح پایه من را تا 30 سپتامبر از سر میگیرد.
در این مثال، شما باید expiryTime
بهروزرسانیشده برای همه موارد موجود در اشتراک را با افزونهها دریافت کنید، زیرا ممکن است برخی از موارد پس از مهلت و توقف حساب، حق خود را از سر بگیرند.
گزارشگری مالی و تطبیق
از گزارش درآمد برای تطبیق اشتراکهای فعال خود با تراکنشهای موجود در Play استفاده کنید. هر مورد خط تراکنش دارای شناسه سفارش است. با خریدهایی که چندین مورد را نشان میدهند، گزارشهای درآمد و فروش تخمینی شامل ردیفهای جداگانه برای هر تراکنش مانند هزینه، کارمزد، مالیات و بازپرداخت برای هر کالای درگیر میشود.
برای داشبوردهای موجود در Play Console:
آمار درآمد ارائه شده در بخش گزارشگری مالی کنسول بر اساس اقلام تفکیک شده است.
مدیریت سفارش، خرید اشتراک را با افزونهها منعکس میکند و فهرستهای جزئی از آنچه خریداری شده را نشان میدهد. از مدیریت سفارش، می توانید خرید کاربر را لغو، لغو یا به طور کامل بازپرداخت کنید.