این موضوع نحوه انتقال از «کتابخانه خدمات صورتحساب Google Play» نسخه ۴ یا ۵ به «کتابخانه خدمات صورتحساب Google Play» نسخه ۶ و نحوه استفاده از قابلیتهای جدید اشتراک را شرح میدهد.
برای مشاهده فهرست کامل تغییرات در نسخه ۶.۰.۰، به یادداشتهای انتشار مراجعه کنید.
نمای کلی
«کتابخانه خدمات صورتحساب Google Play» نسخه ۶ براساس ویژگیهای جدید اشتراک که در نسخه ۵ معرفی شده بود ساخته شده است و چند بهبود دیگر نیز به آن اضافه شده است. این ویژگیها به شما امکان میدهند اشتراکها را به روشهای بیشتری بفروشید و با حذف نیاز به ایجاد و مدیریت تعداد فزایندهای از SKUها، هزینههای عملیاتی را کاهش دهید.
برای اطلاعات بیشتر درباره ویژگیهای جدید معرفیشده با «کنسول Play» نسخه ۵، به تغییرات اخیر در اشتراکها در «کنسول Play» مراجعه کنید.
ارتقای «کتابخانه خدمات صورتحساب Play» سازگار با نسخه قدیمی
همه محصولات اشتراکی موجود بهطور خودکار به این الگوی جدید تبدیل شدند که بخشی از انتشار Play Billing Library 5 و پلاتفرم اشتراکهای جدید در مه ۲۰۲۲ بود. این یعنی برای داشتن کاتالوگی که با نسخههای جدید «کتابخانه خدمات صورتحساب Play» سازگار باشد، لازم نیست هیچ تغییری در پیکربندی محصول اشتراکی ایجاد کنید. برای اطلاعات بیشتر درباره نحوه تبدیل SKUهای اشتراک به اشتراکهای سازگار با نسخه قدیمی، به بخش کار با اشتراکهای قدیمیتر در مقاله راهنمای کنسول Play مراجعه کنید.
نسخههای قدیمیتر برنامهتان همچنان کار میکند
اگر کاتالوگ اشتراک سازگار با نسخه قدیمی دارید، همه نسخههای موجود برنامهتان باید همچنان برای آن محصولات طبق انتظار کار کند. خرید محصولات یکباره نیز باید بدون مشکل در نسخههای قدیمیتر ادامه یابد.
نسخههای برنامهتان که از روشهای منسوخشده (برای مثال،
querySkuDetailsAsync())
استفاده میکنند نمیتوانند طرحهای پایه یا پیشنهادهای ویژهای را که با نسخه قدیمی سازگار نیستند بفروشند. میتوانید درباره پیشنهادهای سازگار با نسخههای قدیمی در مقاله مربوطه در «مرکز راهنمایی کنسول Play» بخوانید.
ارتقا دادن به «کتابخانه خدمات صورتحساب Play» نسخه ۵ یا ۶
«کتابخانه خدمات صورتحساب Play» نسخه ۵ و ۶ شامل روشهای منسوخشده
querySkuDetailsAsync و BillingFlowParams.Builder.setSkuDetails است که
SkuDetails را بهعنوان پارامتر جریان
صورتحساب درنظر میگیرد. این یعنی میتوانید با برنامهریزی مراحل مختلف انتقال، بهتدریج به «کتابخانه خدمات صورتحساب Play» نسخه ۶ منتقل شوید.
بهعنوان اولین گام برای انتقال، میتوانید فقط نسخه کتابخانه را بهروز کنید، کاتالوگ و پسبک خود را همانطور که هستند رها کنید، و برنامهتان را درحالیکه هنوز از روشهای منسوخشده استفاده میکند آزمایش کنید. اگر از
queryPurchases، launchPriceChangeFlow، یا setVrPurchaseFlow استفاده نمیکنید،
باید همچنان طبق انتظار کار کند. پساز آن، میتوانید برای پذیرش کامل ویژگیهای جدید اشتراک که در مه ۲۰۲۲ منتشر شد تکرار کنید.
اگر قبلاً این ویژگیها را با انتقال به «کتابخانه خدمات صورتحساب Google Play» نسخه ۵ اتخاذ کردهاید، میتوانید مستقیماً به بخشهای دارای برچسب بهروزرسانی کتابخانه خدمات صورتحساب Google Play و تغییر خریدهای اشتراک کاربر بروید. اگر از نسخه قبلی شروع میکنید یا هنوز ویژگیهای جدید را کاملاً اتخاذ نکردهاید، میتوانید مراحل کامل انتقال را که در ادامه آمده است بخوانید تا با نحوه اتخاذ آنها آشنا شوید.
مراحل کامل انتقال
ایجاد اشتراکهای جدید در کاتالوگ محصول پسین
بااستفاده از «کنسول توسعهدهنده Play» یا Play Developer API، اکنون میتوانید یک اشتراک را با چندین طرح پایه پیکربندی کنید که هرکدام چندین پیشنهاد ویژه داشته باشند. پیشنهادهای اشتراک دارای مدلهای قیمتگذاری و گزینههای واجدشرایط بودن انعطافپذیر هستند. میتوانید بااستفاده از انواع طرحهای پیشپرداخت و تمدید خودکار، درطول چرخه حیات اشتراک پیشنهاد ایجاد کنید.
توصیه میکنیم قبلاز انتقال برنامهتان، محصولات جدید را براساس ساختار موجودیت در پلتفرم اشتراک جدید برای ادغام «کتابخانه خدمات صورتحساب Play» نسخه ۶ ایجاد کنید. میتوانید محصولات تکراری را در کاتالوگ قدیمیتان که نشاندهنده مزایای حق استفاده یکسان تحت یک اشتراک هستند ادغام کنید و از پیکربندیهای طرح پایه و پیشنهاد ویژه برای نمایش همه گزینههایی که میخواهید ارائه دهید استفاده کنید. برای کسب اطلاعات بیشتر درباره این توصیه، به بخش کار با اشتراکهای قدیمیتر در مقاله راهنمای کنسول Play مراجعه کنید.
توصیه میکنیم محصولات اشتراکی تبدیلشده را پساز انتشار مه ۲۰۲۲ اصلاح نکنید؛ باید آنها را همانطور که هستند رها کنید تا با نسخههای برنامهتان که از روشهای منسوخشده استفاده میکنند (برای مثال، querySkuDetailsAsync()) فروخته شوند، بدون اینکه تغییراتی ایجاد کنید که بتواند بر این نسخههای قدیمیتر تأثیر بگذارد.
فرایند تبدیل، محصولات اشتراکی را که قبلاز مه ۲۰۲۲ در کاتالوگ شما بودند، فقط خواندنی کرد تا از تغییرات تصادفی که میتوانست منجر به مشکلاتی در ادغام موجود شما شود، جلوگیری کند. ایجاد تغییر در این اشتراکها امکانپذیر است، اما پیامدهایی وجود دارد که میتواند بر ادغامهای پیشنما و پسنمای شما تأثیر بگذارد:
در بخش کاربری، نسخههای برنامهای که از
querySkuDetailsAsync()برای دریافت جزئیات محصول اشتراکی استفاده میکنند فقط میتوانند طرحهای پایه و پیشنهادهای ویژه سازگار با نسخه قدیمی را بفروشند و فقط یک ترکیب طرح پایه و پیشنهاد ویژه سازگار با نسخه قدیمی میتواند وجود داشته باشد، بنابراین اگر طرحها یا پیشنهادهای ویژه جدیدی به اشتراکهای تبدیلشده اضافه کنید، طرحهای پایه یا پیشنهادهای ویژه جدید اضافی نمیتوانند در این نسخههای قدیمیتر برنامهتان فروخته شوند.در پسبک، اگر اشتراکهای تبدیلشدهتان را در واسط کاربر «کنسول Play» ویرایش کنید، نمیتوانید آنها را با نقطه پایانی
inappproductsمدیریت کنید، اگر نقطه پایانی را برای این منظور فراخوانی میکردید. همچنین باید به نقطه پایانی وضعیت خرید اشتراک جدید (purchases.subscriptionsv2.get) برای مدیریت خریدها برای این اشتراکها مهاجرت کنید، زیرا نقطه پایانی وضعیت خرید قدیمی (purchases.subscriptions.get) فقط دادههای لازم برای مدیریت طرحهای پایه سازگار با نسخههای قدیمی و خریدهای پیشنهادها را برمیگرداند. برای اطلاعات بیشتر، بخش مدیریت وضعیت خرید اشتراک را بخوانید.
کاتالوگ اشتراک پسزمینهتان را با میانای برنامهسازی کاربردی جدید مدیریت کنید
اگر کاتالوگ محصول اشتراکیتان را بهطور خودکار با Google Play Developer API مدیریت میکنید، باید از نقاط پایانی تعریف محصول اشتراکی جدید برای ایجاد و مدیریت اشتراکها، طرحهای پایه، و پیشنهادها استفاده کنید. برای کسب اطلاعات بیشتر درباره تغییرات API کاتالوگ محصول برای این نسخه، راهنمای ویژگیهای اشتراک مه ۲۰۲۲ را بخوانید.
برای انتقال واحد مدیریت کاتالوگ محصول خودکار برای
اشتراکهای «خدمات صورتحساب Google Play»،
inappproducts
API را با Subscription Publishing API جدید جایگزین کنید تا
کاتالوگ اشتراکتان را مدیریت و منتشر کنید. سه نقطه پایانی جدید وجود دارد:
Monetization.subscriptionsبرای مدیریت محصولات اشتراکی.Monetization.basePlansبرای مدیریت طرحهای پایه برای اشتراکها.Monetization.offersبرای مدیریت پیشنهادهای ویژه برای طرحهای پایه.
این نقاط پایانی جدید همه عملکردهای لازم را برای بهرهبرداری از همه قابلیتهای جدید در کاتالوگ شما دارند: طرح پایه و برچسبهای پیشنهاد، هدفیابی منطقهای، طرحهای پیشپرداخت، و غیره.
برای مدیریت کاتالوگ محصولات درونبرنامه برای محصولات خرید یکباره، همچنان باید از
inappproducts
میانای برنامهسازی کاربردی استفاده کنید.
inappproducts برای اشتراکها استفاده کنید.
نسخههای برنامهتان که از روشهای منسوخشده (برای مثال، querySkuDetailsAsync()) استفاده میکنند نمیتوانند طرحهای پایه یا پیشنهادهای ویژهای را که با نسخههای قدیمی سازگار نیستند بفروشند. میتوانید درباره پیشنهادهای ویژه سازگار با نسخه قدیمی اینجا بخوانید.
بهروزرسانی «کتابخانه خدمات صورتحساب Google Play»
پساز ایجاد کاتالوگ محصولات اشتراکی جدید،
میتوانید برنامهتان را به «کتابخانه خدمات صورتحساب Google» نسخه ۵ منتقل کنید. وابستگی «کتابخانه خدمات صورتحساب Play» موجود را با نسخه بهروزشده در فایل build.gradle برنامهتان جایگزین کنید.
dependencies {
def billingVersion = "6.0.0"
implementation "com.android.billingclient:billing:$billingVersion"
}
پروژهتان باید فوراً ساخته شود، حتی اگر هیچکدام از فراخوانیهای روشها را اصلاح نکرده باشید—«کتابخانه خدمات صورتحساب Play» نسخه ۶ با نسخههای قدیمی سازگار است. مفهوم SKU منسوخشده درنظر گرفته میشود، اما همچنان وجود دارد تا انتقال برنامهها به فرایندی سادهتر و تدریجیتر تبدیل شود.
مقداردهی اولیه «کارخواه صورتحساب» و برقراری اتصال به Google Play
مراحل اولیه برای راهاندازی خریدها از برنامه Android یکسان باقی میماند:
نمایش محصولات دردسترس برای خرید
برای دریافت همه پیشنهادهای ویژهای که کاربر واجدشرایط خرید آنها است:
SkuDetailsParamsرا باQueryProductDetailsParamsجایگزین کنید- تماس
BillingClient.querySkuDetailsAsync()را برای استفاده ازBillingClient.queryProductDetailsAsync()عوض کنید
توجه داشته باشید که نتایج پُرسمان اکنون ProductDetails است نه SkuDetails.
هر مورد ProductDetails حاوی اطلاعاتی درباره محصول است
(شناسه، عنوان، نوع، و غیره). برای محصولات آبونهای، ProductDetails
حاوی List<ProductDetails.SubscriptionOfferDetails> است که
فهرست جزئیات پیشنهاد ویژه اشتراک است. برای محصولات خرید یکباره،
ProductDetails حاوی ProductDetails.OneTimePurchaseOfferDetails است. از این برچسبها میتوان برای تصمیمگیری درباره اینکه کدام پیشنهادهای ویژه به کاربران نشان داده شود استفاده کرد.
نمونه زیر نشان میدهد که برنامهتان قبل و بعداز اعمال این تغییرات ممکن است چگونه بهنظر برسد:
قبل
کاتلین
val skuList = ArrayList<String>() skuList.add("up_basic_sub") val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS).build() billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList -> // Process the result }
جاوا
List<String> skuList = new ArrayList<>(); skuList.add("up_basic_sub"); SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList).setType(SkuType.SUBS).build(); billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { // Process the result. } } );
بعداز
کاتلین
val productList = listOf( QueryProductDetailsParams.Product.newBuilder() .setProductId("up_basic_sub") .setProductType(BillingClient.ProductType.SUBS) .build() ) val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build() billingClient.queryProductDetailsAsync(params) { billingResult, productDetailsList -> // Process the result }
جاوا
ImmutableList<Product> productList = ImmutableList.of(Product.newBuilder() .setProductId("up_basic_sub") .setProductType(ProductType.SUBS) .build()); QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder() .setProductList(productList) .build(); billingClient.queryProductDetailsAsync( params, new ProductDetailsResponseListener() { public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) { // Process the result } } );
بازخوانی برای queryProductDetailsAsync، List<ProductDetails> را برمیگرداند.
هر مورد ProductDetails حاوی اطلاعاتی درباره محصول است
(شناسه، عنوان، نوع، و غیره). تفاوت اصلی این است که محصولات آبونهای
اکنون حاوی List<ProductDetails.SubscriptionOfferDetails> نیز هستند
که شامل همه پیشنهادهای دردسترس برای کاربر است.
ازآنجاییکه نسخههای قبلی «کتابخانه خدمات صورتحساب Play» از اشیاء جدید (اشتراکها، طرحهای پایه، پیشنهادها، و غیره) پشتیبانی نمیکنند، سیستم جدید هر SKU اشتراک را به یک طرح پایه و پیشنهاد سازگار با نسخه قدیمی ترجمه میکند. محصولات خرید یکباره دردسترس نیز به شیء ProductDetails منتقل میشوند. جزئیات پیشنهاد ویژه محصول خرید یکباره را میتوان با روش getOneTimePurchaseOfferDetails() دریافت کرد.
بهندرت، برخیاز دستگاهها نمیتوانند از ProductDetails و queryProductDetailsAsync() پشتیبانی کنند،
معمولاً بهدلیل قدیمی بودن نسخههای
خدمات Google Play. برای اطمینان از
پشتیبانی مناسب برای این سناریو، قبلاز تماس با queryProductDetailsAsync،
با isFeatureSupported()
برای ویژگی PRODUCT_DETAILS
تماس بگیرید. اگر پاسخ
OK باشد،
دستگاه از این ویژگی پشتیبانی میکند و میتوانید با فراخوانی queryProductDetailsAsync() ادامه دهید.
اگر پاسخ FEATURE_NOT_SUPPORTED باشد،
میتوانید بهجای آن فهرست محصولات سازگار با نسخه قدیمی دردسترس را با
querySkuDetailsAsync() درخواست کنید.
برای کسب اطلاعات بیشتر درباره نحوه استفاده از ویژگیهای سازگاری با نسخه قدیمی،
راهنمای ویژگیهای اشتراک مه ۲۰۲۲ را ببینید.
راهاندازی جریان خرید پیشنهاد
راهاندازی جریان خرید برای پیشنهاد ویژه بسیار شبیه به راهاندازی جریان برای SKU است. برای شروع درخواست خرید بااستفاده از نسخه ۶، کارهای زیر را انجام دهید:
- بهجای استفاده از
SkuDetailsبرایBillingFlowParams، ازProductDetailsParamsاستفاده کنید. - جزئیات پیشنهاد(ها)، مانند شناسه پیشنهاد، شناسه طرح پایه، و موارد دیگر را میتوان بااستفاده از شیء
SubscriptionOfferDetailsبهدست آورد.
برای خرید محصول با پیشنهاد ویژه انتخابی کاربر، offerToken
پیشنهاد ویژه انتخابی را دریافت کنید و آن را به شیء ProductDetailsParams منتقل کنید.
پساز ایجاد شیء BillingFlowParams، راهاندازی جریان صورتحساب
با BillingClient بدون تغییر باقی میماند.
نمونه زیر نشان میدهد که برنامهتان قبل و بعداز اعمال این تغییرات ممکن است چگونه بهنظر برسد:
قبل
کاتلین
// An activity reference from which the billing flow will be launched. val activity : Activity = ... // Retrieve a value for "skuDetails" by calling querySkuDetailsAsync(). val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
جاوا
// An activity reference from which the billing flow will be launched. Activity activity = ...; // Retrieve a value for "skuDetails" by calling querySkuDetailsAsync(). BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
بعداز
کاتلین
// An activity reference from which the billing flow will be launched. val activity : Activity = ...; val productDetailsParamsList = listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // For One-time product, "setOfferToken" method shouldn't be called. // For subscriptions, to get the offer token corresponding to the selected // offer call productDetails.subscriptionOfferDetails?.get(selectedOfferIndex)?.offerToken .setOfferToken(selectedOfferToken) .build() ) val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build() // Launch the billing flow val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
جاوا
// An activity reference from which the billing flow will be launched. Activity activity = ...; ImmutableList<ProductDetailsParams> productDetailsParamsList = ImmutableList.of( ProductDetailsParams.newBuilder() // retrieve a value for "productDetails" by calling queryProductDetailsAsync() .setProductDetails(productDetails) // For one-time products, "setOfferToken" method shouldn't be called. // For subscriptions, to get the offer token corresponding to the selected // offer call productDetails.getSubscriptionOfferDetails().get(selectedOfferIndex).getOfferToken() .setOfferToken(selectedOfferToken) .build() ); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); // Launch the billing flow BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
پردازش خریدها
پردازش خریدها با «کتابخانه خدمات صورتحساب Google Play» نسخه ۶ مشابه نسخههای قبلی باقی میماند.
برای دریافت همه خریدهای فعال متعلق به کاربر و جستجوی خریدهای جدید، کارهای زیر را انجام دهید:
- بهجای ارسال مقدار
BillingClient.SkuTypeبهqueryPurchasesAsync()، شیءQueryPurchasesParamsارسال کنید که حاوی مقدارBillingClient.ProductTypeباشد.
نمونه زیر نشان میدهد که برنامهتان قبل و بعداز اعمال این تغییرات ممکن است چگونه بهنظر برسد:
قبل
کاتلین
billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) { billingResult, purchaseList -> { // Process the result } }
جاوا
billingClient.queryPurchasesAsync( BillingClient.SkuType.SUBS, new PurchasesResponseListener() { public void onQueryPurchasesResponse( BillingResult billingResult, List<Purchase> purchases) { // process the result } } );
بعداز
کاتلین
billingClient.queryPurchasesAsync( QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.SUBS) .build() ) { billingResult, purchaseList -> // Process the result }
جاوا
billingClient.queryPurchasesAsync( QueryPurchasesParams.newBuilder().setProductType(ProductType.SUBS).build(), new PurchasesResponseListener() { public void onQueryPurchasesResponse( BillingResult billingResult, List<Purchase> purchases) { // Process the result } } );
مراحل مدیریت خریدهای خارج از برنامه و تراکنشهای معلق تغییر نکرده است.
مدیریت وضعیت خرید اشتراک با میانای برنامهسازی کاربردی جدید در پسای شما
باید مؤلفه مدیریت وضعیت خرید اشتراکها را در پسزمینه خود انتقال دهید تا برای رسیدگی به خریدهای محصولات جدید ایجادشده در مراحل قبلی آماده باشید. مؤلفه مدیریت وضعیت خرید اشتراکهای فعلی شما باید برای محصولات اشتراکی تبدیلشدهای که قبلاز راهاندازی مه ۲۰۲۲ تعریف کردهاید، طبق معمول کار کند و باید برای مدیریت خریدهای پیشنهادهای ویژه سازگار با نسخههای قدیمی کافی باشد، اما از هیچکدام از عملکردهای جدید پشتیبانی نمیکند.
باید Subscription Purchases API جدید را برای واحد مدیریت وضعیت خرید اشتراکهایتان پیادهسازی کنید. این میانای برنامهسازی کاربردی وضعیت خرید را بررسی میکند و حقوق اشتراک «صورتحساب Play» را در پسای شما مدیریت میکند. نسخه قدیمی میانای برنامهسازی کاربردی همه جزئیات لازم را برای مدیریت خریدها در پلاتفرم جدید برنمیگرداند. برای جزئیات مربوط به تغییرات نسبت به نسخههای قبلی، راهنمای ویژگیهای جدید اشتراک مه ۲۰۲۲ را ببینید.
معمولاً هربار که SubscriptionNotificationاعلان بیدرنگ توسعهدهنده دریافت میکنید، باید Subscription Purchases API را فراخوانی کنید تا جدیدترین اطلاعات مربوط به وضعیت اشتراک را دریافت کنید. باید فراخوانیهایتان به purchases.subscriptions.get را با نسخه جدید Subscription Purchases API، purchases.subscriptionsv2.get، جایگزین کنید.
منبع جدیدی بهنام
SubscriptionPurchaseV2
وجود دارد که اطلاعات کافی برای مدیریت حق خرید اشتراکها در مدل جدید را ارائه میدهد.
این نقطه پایانی جدید وضعیت همه محصولات اشتراکی و همه خریدهای شما را برمیگرداند، صرفنظر از نسخه برنامهای که آنها را فروخته است و زمان تعریف محصول (قبل یا بعداز انتشار مه ۲۰۲۲)، بنابراین پساز انتقال فقط به این نسخه از واحد مدیریت وضعیت خرید اشتراک نیاز خواهید داشت.
تغییر خریدهای اشتراک کاربر
در «کتابخانه خدمات صورتحساب Play» نسخه ۵ و نسخههای قبلی،
ProrationMode
برای اعمال تغییرات در خریدهای اشتراک کاربر، مانند ارتقا
یا تنزل، استفاده میشد. این مورد منسوخ شده است و در نسخه ۶ با
ReplacementMode
جایگزین شده است.
مدیریت تغییرات قیمت اشتراک
launchPriceConfirmationFlow API که قبلاً منسوخ شده بود در
«کتابخانه خدمات صورتحساب Play» نسخه ۶ برداشته شده است. برای گزینههای جایگزین، راهنمای تغییرات قیمت را ببینید.
رسیدگی به خطاهای «کتابخانه خدمات صورتحساب Play»
در «کتابخانه صورتحساب Play» نسخه ۶، کد NETWORK_ERROR جدیدی اضافه شده است که نشاندهنده مشکلات اتصال شبکه بین دستگاه کاربر و سیستم Google Play است. همچنین تغییراتی در کدهای SERVICE_TIMEOUT و
SERVICE_UNAVAILABLE ایجاد شده است. برای اطلاعات بیشتر، به مدیریت کدهای پاسخ
BillingResult مراجعه کنید.
رسیدگی به تراکنشهای معلق
از نسخه ۶.۰.۰ بهبعد، «کتابخانه خدمات صورتحساب Play» برای خریدهای معلقه شناسه سفارش ایجاد نمیکند. برای این خریدها، شناسه سفارش پساز انتقال خرید به وضعیت
PURCHASED
تکمیل میشود. مطمئن شوید که ادغام شما فقط پساز تکمیل کامل تراکنش، شناسه سفارش را انتظار دارد. همچنان میتوانید از کد خرید برای
سوابقتان استفاده کنید. برای اطلاعات بیشتر درباره رسیدگی به خریدهای معلقه،
راهنمای ادغام «کتابخانه خدمات صورتحساب Play» و
راهنمای مدیریت چرخه حیات خرید را ببینید.