سیستم صورتحساب Google Play سرویسی است که به شما امکان میدهد محصولات و محتوای دیجیتال را در برنامه Android خود بفروشید. با انتشار می 2022، ما نحوه تعریف محصولات اشتراک را تغییر دادیم و این بر نحوه فروش درون برنامهای و مدیریت آنها در باطن شما تأثیر میگذارد. اگر برای اولین بار است که با Google Play Billing ادغام میشوید، میتوانید ادغام خود را با خواندن Reading شروع کنید.
اگر قبل از ماه مه 2022 با Google Play Billing اشتراک میفروختید، مهم است که بدانید چگونه میتوانید ویژگیهای جدید را با حفظ اشتراکهای موجود خود بپذیرید.
اولین چیزی که باید بدانید این است که همه اشتراکها، برنامهها و ادغامهای باطن شما دقیقاً مانند قبل از انتشار می 2022 عمل میکنند . شما نیازی به تغییر فوری ندارید و می توانید این ویژگی های جدید را به مرور زمان بپذیرید. هر نسخه اصلی کتابخانه صورتحساب Google Play به مدت دو سال پس از انتشار پشتیبانی میشود. یکپارچهسازیهای موجود با Google Play Developer API مانند گذشته به کار خود ادامه میدهند.
در اینجا مروری بر بهروزرسانیهای می 2022 است:
- کنسول جدید Google Play به شما امکان میدهد اشتراکها، طرحهای پایه و پیشنهادات را ایجاد و مدیریت کنید. این شامل هر دو اشتراک جدید و مهاجرت شده است.
- Play Developer API حاوی بهروزرسانیهایی برای پشتیبانی از عملکرد جدید رابط کاربری کنسول Google Play در فرم API است. قابل ذکر است که نسخه جدیدی از API خرید اشتراک وجود دارد. از این API برای بررسی وضعیت اشتراک و مدیریت خریدهای اشتراک استفاده کنید.
- نسخه جدید کتابخانه صورتحساب Play به برنامه شما امکان میدهد از همه ویژگیهای اشتراک جدید بهره مند شود. هنگامی که برای ارتقاء به نسخه 5 آماده شدید، راهنمایی های موجود در راهنمای مهاجرت را دنبال کنید.
پیکربندی اشتراک ها
مدیریت اشتراک ها از طریق کنسول Google Play
از ماه می 2022، متوجه تفاوتهایی در کنسول Google Play خواهید شد.
اکنون یک اشتراک می تواند چندین طرح و پیشنهاد پایه داشته باشد. SKUهای اشتراکی که قبلا ایجاد شدهاند اکنون بهعنوان این اشتراکها، طرحهای پایه و اشیاء پیشنهادی جدید در کنسول Play ظاهر میشوند. اگر قبلاً این کار را نکردهاید، تغییرات اخیر در اشتراکها را در Play Console برای توضیح اشیاء جدید، از جمله عملکرد و پیکربندی آنها ببینید. همه محصولات اشتراک قبلی شما در این قالب جدید در کنسول Google Play ظاهر میشوند. هر SKU اکنون با یک شی اشتراک نشان داده می شود که در صورت وجود، شامل یک طرح پایه واحد و پیشنهاد سازگار با عقب است.
از آنجایی که ادغامهای قدیمیتر انتظار داشتند که هر اشتراک شامل یک پیشنهاد واحد باشد که توسط یک شیء SkuDetails
نشان داده میشود، هر اشتراک میتواند یک طرح یا پیشنهاد پایه سازگار با عقب را داشته باشد. طرح یا پیشنهاد پایه سازگار با عقبنشینی بهعنوان بخشی از یک SKU برای برنامههایی که از روش querySkuDetailsAsync()
استفاده میکنند، بازگردانده میشود. برای اطلاعات بیشتر در مورد پیکربندی و مدیریت پیشنهادات سازگار با عقب، به درک اشتراکها مراجعه کنید وقتی برنامه شما فقط از queryProductDetailsAsync()
استفاده میکند، و زمانی که نسخههای قدیمیتری از برنامه شما هنوز خرید نمیکنند، دیگر نیازی به استفاده از پیشنهاد سازگار با نسخه قبلی ندارید. .
مدیریت اشتراک ها از طریق API انتشارات اشتراک
Play Developer API دارای عملکرد جدیدی برای خرید اشتراک است. inappproducts
API برای مدیریت SKU مانند گذشته به کار خود ادامه می دهد، از جمله رسیدگی به محصولات خرید یکباره و اشتراک ها، بنابراین برای حفظ یکپارچگی خود نیازی به ایجاد تغییرات فوری ندارید.
با این حال، توجه به این نکته مهم است که کنسول Google Play فقط از موجودیت های اشتراک جدید استفاده می کند. وقتی شروع به ویرایش اشتراکهای خود در کنسول کنید، دیگر نمیتوان از inappproducts
API برای اشتراکها استفاده کرد .
اگر قبل از می 2022 از Publishing API استفاده کردهاید، برای جلوگیری از هر گونه مشکلی، همه اشتراکهای موجود اکنون بهعنوان فقط خواندنی در کنسول Google Play ظاهر میشوند. اگر بخواهید تغییراتی ایجاد کنید، ممکن است هشداری دریافت کنید که این محدودیت را توضیح می دهد. قبل از ویرایش بیشتر اشتراکها در کنسول، باید ادغام باطن خود را برای استفاده از نقاط پایانی انتشار اشتراک جدید بهروزرسانی کنید. نقاط پایانی monetization.subscriptions
، monetization.subscriptions.baseplans
و monetization.subscriptions.offers
جدید به شما این امکان را می دهند که همه طرح ها و پیشنهادات پایه موجود را مدیریت کنید. میتوانید نحوه نقشهبرداری فیلدهای مختلف از موجودیت InAppProduct
به اشیاء جدید تحت monetization.subscriptions
را در جدول زیر ببینید:
InAppProduct | اشتراک |
---|---|
packageName | packageName |
sku | productId |
status | basePlans[0].state |
prices | basePlans[0].regionalConfigs.price |
listings | لیست ها |
defaultPrice | بدون معادل سازی |
subscriptionPeriod | basePlans[0].autoRenewingBasePlanType.billingPeriodDuration |
trialPeriod | basePlans[0].offers[0].phases[0].regionalConfigs[0].free |
gracePeriod | basePlans[0].autoRenewingBasePlanType.gracePeriodDuration |
subscriptionTaxesAndComplianceSettings | taxAndCompliance Settings |
این بهروزرسانی API مورد نیاز فقط برای Publishing API (مدیریت SKU) اعمال میشود.
کتابخانه صورتحساب Play تغییر میکند
برای پشتیبانی از انتقال تدریجی، کتابخانه صورتحساب Play شامل تمام روشها و اشیاء موجود در نسخههای قبلی است. اشیاء و توابع SkuDetails
مانند querySkuDetailsAsync()
هنوز وجود دارند، بنابراین میتوانید برای استفاده از عملکرد جدید بدون نیاز به بهروزرسانی فوری کد اشتراکهای موجود، ارتقا دهید. همچنین میتوانید با علامتگذاری آنها بهعنوان سازگار با عقب، کنترل کنید که کدام پیشنهادها از طریق این روشها در دسترس هستند.
علاوه بر حفظ روشهای قدیمی، Play Billing Library 5 اکنون شامل یک شی ProductDetails
جدید و یک متد queryProductDetailsAsync()
مربوطه برای مدیریت موجودیتها و عملکردهای جدید است. محصولات درونبرنامهای موجود (خریدهای یکباره و مواد مصرفی) اکنون توسط ProductDetails
نیز پشتیبانی میشوند.
برای یک اشتراک، ProductDetails.getSubscriptionOfferDetails()
فهرستی از همه طرح های پایه را برمی گرداند و به کاربر پیشنهاد می دهد که واجد شرایط خرید باشد. این بدان معنی است که شما می توانید بدون در نظر گرفتن سازگاری با عقب، به همه طرح ها و پیشنهادات پایه واجد شرایط برای کاربر دسترسی داشته باشید. getSubscriptionOfferDetails()
برای محصولات غیر اشتراکی null
برمی گرداند. برای خریدهای یکباره، میتوانید از getOneTimePurchaseOfferDetails()
استفاده کنید.
Play Billing Library 5 همچنین شامل روشهای جدید و قدیمی برای راهاندازی جریان خرید است. اگر شی BillingFlowParams
ارسال شده به BillingClient.launchBillingFlow()
با استفاده از یک شیء SkuDetails
پیکربندی شود، سیستم اطلاعات پیشنهاد را برای فروش از طرح یا پیشنهاد اولیه سازگار با عقبافتاده که با SKU مطابقت دارد استخراج میکند. اگر شی BillingFlowParams
به BillingClient.launchBillingFlow()
با استفاده از اشیاء ProductDetailsParams
پیکربندی شود که شامل ProductDetails
و String
است که نشان دهنده کد پیشنهادی خاص برای پیشنهاد خریداری شده است، سیستم سپس از آن اطلاعات برای شناسایی محصولی که توسط کاربر خریداری شده است استفاده می کند.
queryPurchasesAsync()
تمام خریدهای متعلق به کاربر را برمی گرداند. برای نشان دادن نوع محصول درخواستی، میتوانید مانند نسخههای قدیمیتر، یک مقدار BillingClient.SkuType
یا یک شی QueryPurchasesParams
که حاوی یک مقدار BillingClient.ProductType
است که موجودیتهای اشتراک جدید را نشان میدهد، ارسال کنید.
توصیه می کنیم به زودی برنامه های خود را به نسخه 5 کتابخانه به روز کنید تا بتوانید از این ویژگی های اشتراک جدید بهره ببرید.
مدیریت وضعیت اشتراک
این بخش تغییرات اولیه اجزای پشتیبان یکپارچه سازی سیستم صورتحساب Google Play را که برای انتقال به نسخه 5 باید اجرا شوند، توضیح می دهد.
اعلانهای برنامهنویس در زمان واقعی
به زودی شیء SubscriptionNotification
دیگر حاوی شناسه اشتراک نخواهد بود. اگر برای شناسایی محصول اشتراک به این فیلد متکی هستید، باید پس از دریافت اعلان، این اطلاعات را از وضعیت اشتراک با استفاده از purchases.subscriptionv2:get
بهروزرسانی کنید. هر عنصر SubscriptionPurchaseLineItem
در مجموعه lineItems که به عنوان بخشی از وضعیت خرید بازگردانده میشود، شامل productId مربوطه خواهد بود.
API خرید اشتراک ها: دریافت وضعیت اشتراک
در نسخههای قبلی Subscriptions Purchases API، میتوانید با استفاده از purchases.subscriptions:get
وضعیت اشتراک را جویا شوید. این نقطه پایانی بدون تغییر است و برای خریدهای اشتراک سازگار با عقب مانده به کار خود ادامه می دهد. این نقطه پایانی از هیچ عملکرد جدیدی که در می 2022 منتشر شده است پشتیبانی نمی کند .
در نسخه جدید Subscriptions Purchases API، از purchases.subscriptionsv2:get
استفاده کنید تا وضعیت خرید اشتراک را به دست آورید. این API با اشتراکهای مهاجرتشده، اشتراکهای جدید (اعم از پیشپرداخت و تمدید خودکار)، و انواع خرید سازگار است. میتوانید از این نقطه پایانی برای بررسی وضعیت اشتراک هنگام دریافت اعلانها استفاده کنید. شیء برگشتی، SubscriptionPurchaseV2
، حاوی فیلدهای جدید است، اما همچنان شامل دادههای قدیمی است که برای ادامه پشتیبانی از اشتراکهای موجود لازم است.
قسمت های SubscriptionPurchaseV2 برای طرح های پیش پرداخت
فیلدهای جدیدی برای پشتیبانی از طرح های پیش پرداخت اضافه شده است که به جای تمدید خودکار، توسط کاربر تمدید می شود. همه فیلدها برای طرحهای پیشپرداخت مانند اشتراکهای تمدید خودکار اعمال میشوند، به استثنای موارد زیر:
- [فیلد جدید] lineItems[0].prepaid_plan.allowExtendAfterTime : نشان می دهد که چه زمانی کاربر مجاز است برای تمدید طرح پیش پرداخت خود، شارژ دیگری بخرد، زیرا کاربر مجاز است هر بار فقط یک شارژ مصرف نشده داشته باشد.
- [فیلد جدید] SubscriptionState : وضعیت شیء اشتراک را مشخص می کند. برای طرحهای پیشپرداخت، این مقدار همیشه یا
ACTIVE
،PENDING
یاCANCELED
است. - lineItems[0].expiryTime : این فیلد همیشه برای طرحهای پیشپرداخت وجود دارد.
- paused_state_context : این فیلد هرگز وجود ندارد، زیرا برنامه های پیش پرداخت نمی توانند متوقف شوند.
- lineItems[0].auto_renewing_plan : برای طرح های پیش پرداخت وجود ندارد.
- canceled_state_context : برای طرحهای پیشپرداخت وجود ندارد، زیرا این قسمت فقط برای کاربرانی اعمال میشود که فعالانه اشتراک را لغو میکنند.
- lineItems[0].productId : این فیلد جایگزین
subscriptionId
از نسخههای قبلی میشود.
فیلدهای SubscriptionPurchaseV2 برای اشتراک های تکراری
purchases.subscriptionv2
حاوی فیلدهای جدیدی است که جزئیات بیشتری درباره اشیاء اشتراک جدید ارائه می دهد. جدول زیر نحوه فیلدها از نقشه نقطه پایانی اشتراک قدیمی به فیلدهای مربوطه در purchases.subscriptionv2
را نشان میدهد.
اشتراک خرید | اشتراک خرید V2 |
---|---|
countryCode | regionCode |
orderId | latestOrderId |
(بدون فیلد معادل) | lineItems (فهرست SubscriptionPurchaseLineItem ) که نشان دهنده محصولات به دست آمده با خرید است |
(بدون فیلد معادل) | lineItems.offerDetails.basePlanId |
(بدون فیلد معادل) | lineItems.offerDetails.offerId |
(بدون فیلد معادل) | lineItems.offerDetails.offerTags |
startTimeMillis | startTime |
expiryTimeMillis | lineItems.expiryTime (هر اشتراکی که در خرید به دست می آید expiryTime خود را دارد) |
(بدون فیلد معادل) | subscriptionState (نشان دهنده وضعیت اشتراک است ) |
(بدون فیلد معادل) | pausedStateContext (فقط در صورتی وجود دارد که وضعیت اشتراک SUBSCRIPTION_STATE_PAUSED باشد) |
autoResumeTimeMillis | pausedStateContext.autoResumeTime |
(بدون فیلد معادل) | canceledStateContext (فقط در صورتی وجود دارد که وضعیت اشتراک SUBSCRIPTION_STATE_CANCELED باشد) |
(بدون فیلد معادل) | testPurchase (فقط در خریدهای آزمایش کننده دارای مجوز موجود است) |
autoRenewing | lineItems.autoRenewingPlan.autoRenewEnabled |
priceCurrenceCode , priceAmountMicros , introductoryPriceInfo | (بدون فیلد معادل) این اطلاعات را می توان در basePlan / offer برای هر یک از اشتراک های خریداری شده یافت. |
توسعه دهنده Payload | بار برنامهنویس (بدون فیلد معادل) منسوخ شده است |
دولت پرداخت | (بدون فیلد معادل) می توانید وضعیت پرداخت را از subscriptionState استنباط کنید:
|
cancelReason , userCancellationTimeMillis , cancelSurveyResult | canceledStateContext |
linkedPurchaseToken | linkedPurchaseToken (بدون تغییر) |
purchaseType | تست: از طریق testPurchase ارتقاء: signupPromotion |
priceChange | lineItems.autoRenewingPlan.priceChangeDetails |
profileName ، emailAddress ، givenName ، familyName ، profileId | subscribeWithGoogleInfo |
acknowledgementState | acknowledgementState (no change) |
promotionType ، promotionCode | signupPromotion |
externalAccountId , obfuscatedExternalAccountId , obfuscatedExteranlProfileId | externalAccountIdentifiers |
سایر توابع مدیریت اشتراک
در حالی که purchases.subscriptions:get
به purchases.subscriptionsv2:get
ارتقا یافته است، بقیه عملکردهای مدیریت اشتراک برنامهنویس در حال حاضر در نقطه پایانی purchases.subscriptions
بدون تغییر باقی میمانند، بنابراین میتوانید به استفاده از purchases.subscriptions:acknowledge
، purchases.subscriptions:cancel
، purchases.subscriptions:defer
، purchases.subscriptions:refund
، و purchases.subscriptions:revoke
همانطور که قبلا انجام دادید.
API قیمت گذاری
از نقطه پایانی monetization.convertRegionPrices
برای محاسبه قیمت های منطقه ای مانند کنسول Play استفاده کنید. این روش یک قیمت واحد را به هر ارز پشتیبانی شده توسط Play میپذیرد و قیمتهای تبدیلشده (از جمله نرخ پیشفرض مالیات در صورت وجود) را برای همه مناطقی که Google Play از خریدها پشتیبانی میکند، برمیگرداند.