خرید اشتراک میتواند در طول چرخه عمر خود از چندین حالت مختلف عبور کند که این امر به عوامل بسیاری از جمله رفتار تمدید خودکار، موقعیتهای کاهش پرداخت و اقدامات مدیریت توسعهدهنده بستگی دارد.
چرخه عمر اشتراک های تمدید خودکار را مدیریت کنید
هنگامی که وضعیت اشتراک کاربر تغییر می کند، سرور باطن شما یک پیام SubscriptionNotification
دریافت می کند
برای بهروزرسانی وضعیت موجود در باطن خود، با API purchases.subscriptionsv2.get
با کد خرید موجود در اعلان تماس بگیرید. این نقطه پایانی آخرین وضعیت اشتراک را ارائه می دهد که یک نشانه خرید داده می شود و منبع حقیقت برای مدیریت اشتراک در نظر گرفته می شود.
رمز خرید از زمان ثبت نام اشتراک تا 60 روز پس از انقضا معتبر است. پس از این تاریخ، رمز خرید دیگر برای تماس با Google Play Developer API معتبر نیست.
خرید اشتراک جدید با تمدید خودکار
وقتی کاربر اشتراکی را خریداری میکند، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PURCHASED
به مشتری RTDN شما ارسال میشود. چه این اعلان را دریافت کنید یا یک خرید درون برنامه ای جدید از طریق PurchasesUpdatedListener
ثبت کنید یا به صورت دستی خریدها را در روش onResume()
برنامه خود واکشی کنید، باید خرید جدید را در پشتیبان امن خود پردازش کنید. برای این کار مراحل زیر را دنبال کنید:
- برای دریافت منبع اشتراکی که حاوی آخرین وضعیت اشتراک است، از نقطه پایانی
purchases.subscriptionsv2.get
پرس و جو کنید. - مطمئن شوید که مقدار قسمت
subscriptionState
SUBSCRIPTION_STATE_ACTIVE
است. - خرید را تایید کنید
- به کاربر اجازه دسترسی به محتوا را بدهید. اگر شناسهها در زمان خرید با استفاده از
setObfuscatedAccountId
وsetObfuscatedProfileId
تنظیم شده باشند، حساب کاربری مرتبط با خرید را میتوان با شیExternalAccountIdentifiers
از منبع اشتراک شناسایی کرد.
کتابخانه صورتحساب Play همچنین شامل روشی برای تأیید اشتراک، acknowledgePurchase()
و روشی برای بررسی وضعیت تأیید، isAcknowledged()
. با این حال، توصیه می کنیم برای امنیت بهتر، پردازش خرید را در باطن خود انجام دهید.
منبع اشتراک برای خریدهای جدید شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
تمدید اشتراک
برای اشتراکهای بدون قسط و تمدید خودکار، هنگام تمدید اشتراک، اعلان SUBSCRIPTION_RENEWED
ارسال میشود. برای اشتراک های اقساطی، هر بار که اشتراک در تاریخ صورتحساب آن شارژ می شود، یک اعلان SUBSCRIPTION_RENEWED
ارسال می شود. مطمئن شوید که کاربر همچنان حق اشتراک را دارد و سپس وضعیت اشتراک را با expiryTime
جدید ارائه شده در منبع اشتراکی که از Google Play Developer API ارائه شده است، بهروزرسانی کنید. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
]
}
شما نیازی به تایید تمدید اشتراک ندارید.
دوره ارفاقی
اگر در تمدید اشتراک مشکلی در پرداخت وجود داشته باشد، Google به کاربر اطلاع میدهد و بهطور دورهای تلاش میکند تا قبل از منقضی شدن اشتراک، اشتراک را برای مدتی تمدید کند. این دوره بازیابی می تواند شامل یک دوره مهلت و به دنبال آن یک دوره نگهداری حساب باشد. در طول دوره مهلت، کاربر همچنان باید به حق اشتراک خود دسترسی داشته باشد.
متد queryPurchasesAsync()
به بازگرداندن خریدهایی که در دوره مهلت هستند ادامه می دهد. اگر برنامه شما فقط به queryPurchasesAsync
متکی است تا بررسی کند آیا کاربر حق اشتراک دارد یا خیر، برنامه شما باید به طور خودکار دورههای مهلت را مدیریت کند، زیرا این اشتراکها از طریق کتابخانه صورتحساب Play فعال نشان داده میشوند.
همگام سازی وضعیت اشتراک با باطن خود به شما این امکان را می دهد که از کاهش پرداخت ها بیشتر آگاه شوید و در تلاش برای کاهش ریزش غیرارادی زمینه بیشتری در اختیار شما قرار می دهد. به پیامهای SubscriptionNotification
با نوع SUBSCRIPTION_IN_GRACE_PERIOD
گوش دهید تا وقتی کاربر وارد مهلتی شود از آن مطلع شوید. در حالی که کاربر در دوره مهلت است، منبع اشتراک حاوی autoRenewEnabled = true
است. Google Play به صورت پویا مقدار expiryTime
را تا زمان انقضای مهلت تمدید میکند، زیرا این حق باید تا زمانی که کاربر لغو کند یا دوره مهلت حداکثر طول بکشد، ادامه یابد. مقدار قسمت subscriptionState
در این دوره SUBSCRIPTION_STATE_IN_GRACE_PERIOD
است. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Play به کاربرانی که در دوره مهلت هستند اطلاع می دهد که پرداخت آنها رد شده است و از آنها می خواهد مشکلات روش پرداخت خود را در فروشگاه Play برطرف کنند. هنگامی که کاربر وارد یک دوره مهلت می شود، همچنین باید کاربر را تشویق کنید که روش پرداخت خود را در صورتی که شکست غیرارادی بود اصلاح کند. یک راه ساده برای انجام این کار استفاده از API پیام درون برنامه است. اگر زمانی که کاربر برنامه شما را باز میکند، این API را فراخوانی کنید، یک پیام Play در یک اسنک بار موقت به کاربر نشان داده میشود که به کاربر اطلاع میدهد پرداختش رد شده است. این پیام همچنین شامل یک پیوند عمیق برای کاربر است تا روش پرداخت خود را در Google Play اصلاح کند.
به محض اینکه کاربر روش پرداخت خود را اصلاح کرد، اشتراک با تاریخ تمدید اصلی خود تمدید می شود و شما می توانید تمدید را همانطور که در تمدید توضیح داده شده است انجام دهید.
اگر کاربر روش پرداخت خود را در طول دوره مهلت اصلاح نکند، اشتراک وارد حساب ذخیره می شود و حق خود را از دست می دهد.
دسترسی و بازیابی دوره مهلت
شکل 2 یک جدول زمانی برای اشتراکی را نشان می دهد که وارد دوره مهلت می شود و پس از اصلاح روش پرداخت کاربر، بازیابی می شود. پس از پایان دوره مهلت، کاربر باید مزایای اشتراک را از دست بدهد و حساب را متوقف کند.

یادآوری نکات زیر ضروری است:
- در طول دوره مهلت، کاربر باید دسترسی به مزایای اشتراک را حفظ کند.
- هنگامی که اشتراک در طول دوره مهلت بهبود می یابد، تاریخ تمدید مجدد تنظیم نمی شود.
- اگر دوره مهلت را افزایش دهید - به عنوان مثال، از 7 روز به 14 روز - کاربرانی که در دوره مهلت هستند، دسترسی بیشتری به مزایای اشتراک دارند.
- اگر دوره مهلت را کاهش دهید، کاربرانی که به اندازه کافی در دوره مهلت قدیمی هستند و از دوره مهلت جدید فراتر رفته اند، فوراً مزایای اشتراک آنها لغو می شود. به عنوان مثال، اگر دوره مهلت را از 14 روز به 7 روز کاهش دهید، کاربرانی که در روزهای 8 تا 14 دوره مهلت قدیمی هستند فوراً مزایای اشتراک آنها لغو می شود.
- اشتراک در حالت فعال باقی میماند و تا پایان دوره مهلت خاموش، RTDN مهلت دریافت نمیکنید
دوره مهلت خاموش
میتوانید یک مهلت 0 روزه تعیین کنید، اما Play حداقل 1 روز منتظر میماند تا از زمان کافی برای تکرار پرداخت مطمئن شود. این دوره مهلت خاموش یک شبکه ایمنی برای پردازش پرداخت ارائه می دهد. در این دوره 24 ساعته اشتراک در حالت ACTIVE
باقی می ماند.
بهترین راه برای همگام ماندن با تغییرات وضعیت اشتراک، گوش دادن و واکنش به اعلانهای بیدرنگ برنامهنویس (RTDN) است. برای دریافت وضعیت دقیقتر اشتراک، به جای زمان انقضا، متد purchases.subscriptionsv2.get()
را در زمان RTDN فراخوانی کنید.
بسته به وضعیت اشتراک پس از مهلت 24 ساعته خاموش، باید یکی از اعلانهای زیر را دریافت کنید:
-
SUBSCRIPTION_ON_HOLD
(در صورت فعال بودن) -
SUBSCRIPTION_CANCELED
(در صورت لغو) -
SUBSCRIPTION_EXPIRED
(اگر منقضی شده باشد) -
SUBSCRIPTION_RENEWED
(در صورت تمدید موفقیت آمیز)
همچنین میتوانید متد subscriptionV2.get()
را در هر نقطه پس از مهلت 24 ساعته خاموش فراخوانی کنید تا آخرین وضعیت اشتراک را دریافت کنید.
نگه داشتن حساب
اگر مشکلات پرداختی در مورد تمدید اشتراک وجود داشته باشد، پس از پایان هر دوره مهلت ، دوره نگهداری حساب شروع می شود. هنگامی که یک اشتراک وارد حالت توقف حساب می شود، باید دسترسی به حق اشتراک را مسدود کنید.
در حین توقف حساب، باید هرگونه لغو ، بازیابی یا خرید مجدد اشتراکهای خود را در صورت لزوم انجام دهید، زیرا ممکن است کاربر در زمانی که اشتراک در حالت تعلیق است، این تغییرات را انجام دهد.
هنگامی که کاربر وارد دوره نگهداری حساب می شود، RTDN ها به شما اطلاع می دهند، بنابراین می توانید در اسرع وقت به او اطلاع دهید که چرا دسترسی او به اشتراک به حالت تعلیق درآمده است. یک راه ساده برای انجام این کار استفاده از API پیام درون برنامه است. با فراخوانی این API هنگامی که کاربر برنامه را باز میکند، پیامی را در یک اسنک بار موقت به کاربر نشان میدهد که به او اطلاع میدهد پرداختش رد شده است. این پیام همچنین شامل یک پیوند عمیق برای کاربر است تا روش پرداخت خود را در Google Play اصلاح کند.
اگر کاربران شما بتوانند به محتوای اشتراک خارج از برنامه شما دسترسی داشته باشند، ممکن است متوجه شوند که دسترسی به سطوح مختلف را از دست داده اند. ممکن است بخواهید یک اعلان فشار یا ایمیلی برای کاربر ارسال کنید تا به او اطلاع دهید که اشتراک او به دلیل رد پرداخت دیگر فعال نیست.
اشتراک با روش queryPurchasesAsync()
در حین نگهداری حساب بازگردانده نمی شود، بنابراین اگر برنامه شما برای نمایش خریدهای موجود به این روش متکی است، باید به طور پیش فرض از نگهداری حساب پشتیبانی کنید.
با اعلانهای بیدرنگ برنامهنویس ، هنگامی که یک اشتراک وارد حالت توقف حساب میشود، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_ON_HOLD
دریافت میکنید. برای بازیابی اطلاعات اشتراک جدید، با روش purchases.subscriptionsv2.get
از سرور باطن امن خود تماس بگیرید. در حین نگهداری حساب، قسمت expiryTime
منبع اشتراک روی مهر زمانی گذشته و قسمت subscriptionState
روی SUBSCRIPTION_STATE_ON_HOLD
تنظیم میشود:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
برای بازیابی دسترسی، کاربران باید روش پرداخت خود را اصلاح کنند. Play به کاربرانی که در حساب ذخیره شدهاند از رد پرداختشان اطلاع میدهد، و همچنین باید آنها را تشویق کنید که روش پرداخت خود را اصلاح کنند.
پس از اینکه کاربر روش پرداخت خود را اصلاح کرد، اشتراک به حالت فعال باز میگردد و سپس باید دسترسی به محتوای مشترک شده را بازیابی کنید. در این حالت، رمز خرید مانند قبل از شروع توقف حساب است، زیرا همان خرید در حال بازیابی است و شما یک RTDN با نوع SUBSCRIPTION_RECOVERED
دریافت میکنید.
برای اشتراکهای اقساطی، رد پرداخت و بازیابی ممکن است برای هر تلاشی برای پرداخت صورت گیرد.
پس از بازیابی، کتابخانه صورتحساب Play اشتراک را دوباره از طریق روش queryPurchasesAsync()
برمیگرداند. اگر از این روش برای تعیین اینکه آیا یک کاربر حق اشتراک دارد یا نه استفاده میکنید، برنامه شما باید بهطور خودکار بازیابی اشتراک پس از توقف حساب را مدیریت کند.
به پیام SubscriptionNotification
با نوع SUBSCRIPTION_RECOVERED
گوش دهید تا در صورت بازیابی اشتراک مطلع شوید و کاربر باید دوباره دسترسی پیدا کند. اگر پس از دریافت این اعلان درخواست اشتراک کنید، قسمت expiryTime
در آینده روی مهر زمانی و قسمت subscriptionState
دوباره روی SUBSCRIPTION_STATE_ACTIVE
تنظیم می شود:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
اگر کاربر روش پرداخت خود را قبل از پایان دوره نگهداری حساب اصلاح نکند، در عوض یک RTDN با نوع SUBSCRIPTION_CANCELED
دریافت میکنید. برای دستورالعملهای مربوط به رسیدگی به لغو، به لغو مراجعه کنید. وقتی اشتراکی را درخواست میکنید که به این روش لغو شده است، قسمت expiryTime
برگردانده شده روی مهر زمانی گذشته تنظیم میشود:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
بلافاصله پس از اطلاع از لغو در حین توقف حساب، یک RTDN با نوع SUBSCRIPTION_EXPIRED
نیز دریافت خواهید کرد، زیرا کاربر حق پرداختی ندارد و اشتراک با لغو لغو شده است. شما می توانید این انقضا را به روشی که معمولاً انجام می دهید مدیریت کنید .
کاربر میتواند با خرید مجدد همان طرح اشتراک یا هر طرح دیگری که از طریق برنامه ارائه میدهید در طول دوره نگهداری حسابش از خرید اصلیاش، دوباره دسترسی پیدا کند. در آن صورت، یک رمز خرید جدید صادر می شود و مقدار جدید به عنوان بخشی از یک رویداد SUBSCRIPTION_PURCHASED
که نشان دهنده این نمونه جدید است، برگردانده می شود.
دسترسی و بازیابی نگهداری حساب
شکل 3 جدول زمانی یک اشتراک را نشان میدهد که به حالت تعلیق حساب وارد میشود و زمانی که کاربر روش پرداخت خود را اصلاح میکند، بازیابی میشود.

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

یادآوری نکات زیر ضروری است:
- قبل از اینکه اشتراک در حالت توقف حساب قرار گیرد، Google Play تلاشهای بیشتری برای شارژ روش پرداخت تا 48 ساعت انجام میدهد. کاربر مزایای اشتراک را در این مدت حفظ می کند. پس از سپری شدن این دوره امتحان مجدد، اشتراک به حالت تعلیق در می آید و کاربر باید دسترسی به مزایای اشتراک را از دست بدهد.
- هنگامی که اشتراک از حالت توقف موقت با فرم پرداخت ناموفق از سر گرفته میشود، اشتراک مستقیماً وارد حساب نگهداری میشود.
- هنگامی که یک اشتراک از توقف حساب بازیابی می شود، تاریخ تمدید مجدد تنظیم می شود.
انقضا
هنگامی که یک اشتراک منقضی شود، کاربر باید دسترسی به اشتراک را از دست بدهد. در این صورت یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_EXPIRED
ارسال می شود. وقتی این اعلان را دریافت کردید، برای دریافت آخرین منبع اشتراک، از Google Play Developer API پرس و جو کنید. پس از اینکه تأیید کردید که subscriptionState
SUBSCRIPTION_STATE_EXPIRED
است، این حق را بردارید و وضعیت خرید را در قسمت پشتیبان خود نامعتبر ثبت کنید. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
لغوها
کاربر میتواند بهطور داوطلبانه اشتراکی را از مرکز اشتراکهای Play لغو کند یا اگر پس از توقف حساب بازیابی نشد، اشتراکش بهطور خودکار لغو شود. برنامهنویسان همچنین میتوانند با purchases.subscriptions.cancel
لغو را آغاز کنند وقتی اشتراک لغو میشود، کاربر تا پایان چرخه صورتحساب فعلی به محتوا دسترسی دارد. وقتی چرخه صورتحساب به پایان می رسد، دسترسی باید لغو شود.
لغو اشتراک بدون قسط و تمدید خودکار یک اعلان SUBSCRIPTION_CANCELED
را راهاندازی میکند. وقتی این اعلان را دریافت میکنید، منبع اشتراکی که از API برنامهنویس Google Play بازگردانده میشود، قسمت subscriptionState
روی SUBSCRIPTION_STATE_CANCELED
تنظیم شده است و قسمت expiryTime
حاوی تاریخی است که کاربر باید دسترسی به اشتراک را از دست بدهد. اگر آن تاریخ در گذشته باشد، کاربر باید فوراً حق خود را از دست بدهد. این ممکن است اتفاق بیفتد، برای مثال، اگر یک کاربر اشتراک خود را در حالی که حسابش را به دلیل رد پرداخت لغو کرده است، لغو کند.
منبع اشتراک برای خرید لغو شده شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
برای اشتراکهای اقساطی، زمانی که پرداختها برای دوره تعهد باقی میماند، یک اعلان SUBSCRIPTION_CANCELLATION_SCHEDULED
پس از لغو توسط کاربر ارسال میشود. لغو در انتظار است و در پایان دوره تعهد جاری اعمال می شود. وقتی این اعلان را دریافت میکنید، منبع اشتراکی که از Google Play Developer API بازگردانده میشود، قسمت subscriptionState روی SUBSCRIPTION_STATE_ACTIVE
تنظیم شده است زیرا اشتراک اقساط تا پایان دوره تعهد همچنان فعال است. با این حال، یک شیء لغو در انتظار خالی وجود دارد. یک اعلان SUBSCRIPTION_CANCELED
و سپس یک SUBSCRIPTION_EXPIRED
در پایان دوره تعهد ارسال میشود.
منبع اشتراک برای خرید اشتراک اقساطی که در انتظار لغو است شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_plan01",
"expiryTime": expiration_time,
"autoRenewingPlan": {
"autoRenewEnabled": true,
"recurringPrice": {
"currencyCode": "USD",
"units": "1",
"nanos": 990000000
},
"installmentDetails": {
"initialCommittedPaymentsCount": 6,
"remainingCommittedPaymentsCount": 5,
"pendingCancellation": {}
...
}
}
}
],
}
میتوانید به قسمت canceledStateContext
در منبع اشتراک نگاه کنید تا بدانید چرا اشتراک لغو شده است (به عنوان مثال، آیا اشتراک توسط کاربر، سیستم یا شما لغو شده است). اگر اشتراک توسط کاربر لغو شده است، می توانید به قسمت userInitiatedCancellation
نگاه کنید تا بدانید چرا کاربر اشتراک را لغو کرده است. این می تواند به اطلاع رسانی استراتژی های ارتباطی کمک کند.
هنگامی که یک اشتراک لغو می شود اما هنوز منقضی نشده است، همچنان از queryPurchasesAsync()
بازگردانده می شود. ممکن است بخواهید پیامی در برنامه خود نشان دهید که به کاربر اطلاع می دهد اشتراکش لغو شده است و تاریخ انقضا را به او می دهد.
ابطالها
یک اشتراک را می توان به دلایل مختلفی باطل کرد، از جمله لغو اشتراک شما با استفاده از purchases.subscriptionsv2.revoke
یا بازپرداخت هزینه خرید. در این شرایط فوراً حق کاربر را لغو کنید. در صورت وقوع یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_REVOKED
ارسال می شود. وقتی این اعلان را دریافت کردید، منبع اشتراکی که از Google Play Developer API بازگردانده شده است، قسمت subscriptionState
روی SUBSCRIPTION_STATE_EXPIRED
تنظیم شده است.
منبع اشتراک برای خرید لغو شده شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
اشتراک های معوق
دلایل مختلفی وجود دارد که چرا ممکن است بخواهید حق یک کاربر را تمدید کنید. برای مثال، ممکن است بخواهید به عنوان یک تبلیغ ویژه به کاربران دسترسی رایگان ارائه دهید، مانند دادن یک هفته رایگان برای خرید یک فیلم یا ارائه دسترسی رایگان به مشتریان به عنوان نشانه حسن نیت. برای پیشبرد تاریخ صورتحساب بعدی برای تمدید خودکار اشتراک، میتوانید از روش purchases.subscriptions.defer
از Play Developer API استفاده کنید. وقتی این کار را انجام می دهید، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_DEFERRED
ارسال می شود. در طول دوره تعویق، کاربر با دسترسی کامل در محتوای شما مشترک می شود اما هزینه ای دریافت نمی شود. تاریخ تمدید اشتراک به روز می شود تا تاریخ جدید را منعکس کند.
برای طرحهای پیشپرداخت، میتوانید از Defer Billing API برای به تعویق انداختن زمان انقضا استفاده کنید.
منبع اشتراک برای یک اشتراک معوق شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
اشتراکهای متوقف شده
میتوانید با فعال کردن کاربران برای توقف موقت اشتراک خود، ریزش داوطلبانه را کاهش دهید. هنگامی که ویژگی مکث را فعال می کنید، کاربران می توانند بسته به دوره تکرار شونده، اشتراک خود را برای مدت زمانی بین یک هفته تا سه ماه متوقف کنند.
تکرار اشتراک | هفتگی | ماهانه | سه ماهه | شش ماهه | سالانه |
---|---|---|---|---|---|
طول مکث موجود * | 1 هفته 2 هفته 3 هفته 4 هفته | 1 ماه 2 ماه 3 ماه | 1 ماه 2 ماه 3 ماه | 1 ماه 2 ماه 3 ماه | N/A |
مکث اشتراک فقط پس از پایان دوره صورتحساب فعلی اعمال میشود. در حالی که اشتراک متوقف شده است، کاربر به اشتراک دسترسی ندارد و هزینه تمدید را پرداخت نمی کند. در پایان دوره توقف، اشتراک از سر گرفته می شود و Google تلاش می کند اشتراک را تمدید کند. در صورت موفقیت آمیز بودن رزومه، اشتراک دوباره فعال می شود. اگر رزومه به دلیل مشکل پرداخت ناموفق باشد، کاربر وضعیت نگهداری حساب را مطابق شکل های 5 و 6 وارد می کند:


همانطور که در شکل 6 نشان داده شده است، کاربر می تواند در هر زمان در طول دوره مکث به صورت دستی اشتراک را از سر بگیرد. هنگامی که کاربر به صورت دستی از سرگیری می کند، تاریخ صورتحساب به تاریخ رزومه دستی تغییر می کند.
وقتی اشتراک کاربر متوقف میشود، کتابخانه صورتحساب Play اشتراک را از طریق روش queryPurchasesAsync()
بر نمیگرداند. اگر اشتراک از سر گرفته شود، متد queryPurchasesAsync()
آن را دوباره برمی گرداند.
به RTDN گوش دهید تا از زمانی که کاربر اشتراک خود را متوقف می کند آگاه شود. این اعلانها همچنین به شما این امکان را میدهند که به کاربران خود در برنامه خود اطلاع دهید که اشتراک خود را متوقف کردهاند و به آن دسترسی ندارند. همچنین باید راهی را برای کاربر فراهم کنید که در هر زمان با استفاده از پیوند عمیق به Google Play، اشتراک خود را به صورت دستی از سر بگیرد.
یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
زمانی ارسال می شود که کاربر شما اشتراک خود را متوقف می کند. در این زمان، کاربر باید تا تاریخ تمدید بعدی به اشتراک خود دسترسی داشته باشد و منبع اشتراک حاوی autoRenewEnabled = true
. مقدار قسمت subscriptionState
در این مرحله SUBSCRIPTION_STATE_ACTIVE
است.
یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PAUSED
با اعمال مکث ارسال می شود. وقتی این اتفاق میافتد، کاربر باید دسترسی به اشتراک خود را از دست بدهد و منبع اشتراک حاوی autoRenewEnabled = true
است و قسمت subscriptionState
روی SUBSCRIPTION_STATE_PAUSED
تنظیم میشود. با بررسی شیء PausedStateContext
می توانید ببینید چه زمانی انتظار می رود اشتراک دوباره تمدید شود.
اگر اشتراک در پایان دوره مکث به طور خودکار از سر گرفته شود یا اگر کاربر تصمیم بگیرد اشتراک را به صورت دستی از سر بگیرد، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_RENEWED
ارسال میشود. این باید همانطور که در Renewals توضیح داده شده است، مدیریت شود.
اگر هنگام تلاش برای از سرگیری اشتراک پس از توقف، پرداختی با مشکل مواجه شد، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_ON_HOLD
ارسال میشود. این باید همانطور که در نگهداری حساب توضیح داده شده است انجام شود.
دوباره اشتراک کنید
برای تمدید خودکار طرح های پایه اشتراک، فروشگاه Google Play ممکن است دکمه اشتراک مجدد را نمایش دهد. این دکمه به کاربران امکان می دهد دوباره به اشتراک خود دسترسی پیدا کنند. ممکن است به دلایل مختلف ظاهر نشود، به عنوان مثال زمانی که یک اشتراک مدت ها پیش منقضی شده است.

اگرچه دکمه همیشه با برچسب Resubscribe است، عملکرد آن به وضعیت اشتراک بستگی دارد.
در حالی که یک اشتراک لغو شده است اما هنوز منقضی نشده است، کاربر همچنان مشترک است و مزایای اشتراک را دریافت می کند. اگر کاربر روی اشتراک مجدد ضربه بزند، لغو عملاً لغو می شود و اشتراک به تمدید ادامه می یابد. این عمل در اسناد و APIهای برنامهنویس Play به عنوان بازیابی شناخته میشود.
پس از انقضای اشتراک تمدید خودکار، می توانید به کاربران اجازه دهید همان طرح پایه اشتراک را خریداری کنند. این اقدام در اسناد و APIهای برنامهنویس Play مشترک مجدد شناخته میشود. می توانید این گزینه را برای هر طرح پایه در Play Console یا با استفاده از API پیکربندی کنید.
قبل از انقضا بازیابی کنید
اگر برنامه شما برای تعیین اینکه آیا کاربر حق اشتراک دارد یا خیر، فقط به روش queryPurchasesAsync()
متکی است، برنامه شما باید به طور خودکار بازیابی ها را انجام دهد زیرا روش queryPurchasesAsync()
همچنان خریدهای لغو شده را قبل از تاریخ انقضا برمی گرداند. اشتراک بازیابی شده همچنان به تمدید خود ادامه می دهد انگار که لغو نشده است.
اگر برنامه شما وضعیت اشتراک را با یک باطن همگام میکند، باید به پیام SubscriptionNotification
با نوع SUBSCRIPTION_RESTARTED
گوش دهید. پس از دریافت این RTDN، برنامه شما می تواند به اعلان پاسخ دهد، ثبت کند که اشتراک اکنون برای تمدید تنظیم شده است و نمایش پیام های بازیابی را در برنامه شما متوقف کند. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
پس از انقضا مجددا عضو شوید
اگر یک طرح پایه تمدید خودکار با استفاده از Google Play Console یا API برای اجازه اشتراک مجدد پیکربندی شده باشد، کاربران می توانند اشتراک منقضی شده را مجدداً در فروشگاه Google Play خریداری کنند.
اینها خریدهای جدید هستند. Google Play یک رمز خرید کاملاً جدید صادر میکند و باطن شما یک RTDN با نوع SUBSCRIPTION_PURCHASED
دریافت میکند. وضعیت خرید برای این نوع خرید خارج از برنامه شامل یک linkedPurchaseToken
مرتبط با خرید اصلی در آن صورت نمی شود، زیرا اشتراک اصلی به طور کامل منقضی شده است. اینها خریدهای جدیدی هستند که باطن شما باید مانند هر خرید دیگری آنها را پردازش و تأیید کند.
ارتقاء، تنزل، و اشتراک مجدد
هنگامی که کاربر قبل از انقضای اشتراک، پس از لغو برنامه شما را ارتقا، تنزل داده یا ثبتنام میکند ، اشتراک قدیمی باطل میشود و اشتراک جدیدی با رمز خرید جدید ایجاد میشود.
علاوه بر این، منبع اشتراکی که از Google Play Developer API بازگردانده میشود، حاوی یک فیلد linkedPurchaseToken
است که خرید قدیمی را نشان میدهد که کاربر از آن ارتقا، تنزل داده یا مجدداً مشترک شده است. میتوانید از نشانه خرید در آن قسمت برای جستجوی اشتراک قدیمی و شناسایی حساب کاربری موجود استفاده کنید تا بتوانید خرید جدید را با همان حساب مرتبط کنید.
قبل از ارائه گزینه های ارتقا، تنزل یا اشتراک مجدد به یک کاربر در برنامه خود، باید اشتراک موجود را تأیید کنید. اگر اشتراک موجود هنوز در انتظار تأیید باشد، هرگونه تغییر یا اشتراک مجدد در طرح مسدود می شود.
اگر کاربر با موفقیت ارتقاء، کاهش یا اشتراک مجدد را خریداری کرد، این خرید جدیدی است که باید آن را تأیید کنید. روش توصیه شده برای انجام این کار استفاده از Google Play Developer API است. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
تغییرات قیمت
راهنمای بهترین شیوه های تغییر قیمت را ببینید تا در مورد تغییر قیمت اشتراک خودکار تمدید و در صورت لزوم به کاربران اطلاع دهید.
هنگامی که تغییرات قیمت برای مشترکین موجود به عنوان انتخاب انتخاب شود اعمال می شود، اگر کاربر برای تأیید یا رد قیمت جدید اقدام کند، یک RTDN دریافت خواهید کرد.
تأیید کاربر را در مورد تغییر قیمت انتخاب کنید
وقتی کاربری افزایش قیمت اشتراک شما را می پذیرد، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
دریافت می کنید. با کاهش قیمت انصراف، یا زمانی که افزایش قیمت اشتراک تمدید می شود، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_RENEWED
دریافت می کنید. با این اعلان مانند هر تمدید دیگری رفتار کنید.
رسیدگی به مواردی که افزایش قیمت انتخابی پذیرفته نمی شود
اگر کاربری قبل از اینکه نیاز به تمدید با قیمت بالاتر داشته باشد، افزایش قیمت انتخابی شما را نپذیرفت، به طور خودکار اشتراک لغو میشود و یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_CANCELED
دریافت میکنید. این رویداد را همانطور که در لغو توضیح داده شده است مدیریت کنید.
کاربران همچنین میتوانند اشتراک خود را برای افزایش قیمت انصراف با همان مکانیسم لغو کنند.
چرخه عمر برنامه های پیش پرداخت را مدیریت کنید
همانند تمدید خودکار اشتراکها، باید پس از هر خرید جدید ، طرحهای پیشپرداخت را تأیید کنید. در مورد طرح های پیش پرداخت، باید هم خرید اولیه و هم هرگونه شارژ را به طور کامل پردازش کنید، زیرا کاربر باید هر بار جریان خرید را طی کند.
با توجه به احتمال کوتاه مدت طرح پیش پرداخت، مهم است که خرید را در اسرع وقت تایید کنید. طرح های پیش پرداخت با مدت زمان یک هفته یا بیشتر باید ظرف 3 روز تایید شوند. طرح های پیش پرداخت با مدت زمان کمتر از یک هفته باید در نیمی از مدت زمان طرح تایید شوند. به عنوان مثال، توسعه دهندگان 1.5 روز فرصت دارند تا خرید یک طرح پیش پرداخت سه روزه را تایید کنند.
هر زمان که اشتراک طرح پیشپرداختی خریداری میشود، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PURCHASED
برای مشتری RTDN شما ارسال میشود. برای بررسی آخرین وضعیت اشتراک طرح پیش پرداخت، با روش purchases.subscriptionsv2.get
تماس بگیرید.
یک نشانه خرید جدید برای خریدهای تکمیلی صادر می شود و شما رمز خرید قبلی را در قسمت linkedPurchaseToken
به عنوان بخشی از وضعیت خرید اشتراک جدید دریافت می کنید. رمز خرید از زمان ثبت نام اشتراک تا 60 روز پس از انقضا معتبر است. پس از این تاریخ، رمز خرید دیگر برای تماس با Google Play Developer API معتبر نیست.
منبع اشتراک برای خرید طرح پیش پرداخت شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "prepaid_plan01",
"expiryTime": expiry_date,
"prepaidPlan": {
"allowExtendAfterTime": timestamp_after_which_topups_are_allowed
}
}
]
}
در قسمت expiryTime
می توانید ببینید که چه زمانی این حق به پایان می رسد. خریدهای اضافی با جمع آوری زمان استحقاق را افزایش می دهد. این بدان معناست که اگر کاربر قبل از پایان حق اصلی خود شارژ کند، زمان جدید به تاریخ انقضای قبلی او اضافه می شود.
ممکن است بخواهید پیامی را در برنامه خود نشان دهید که به کاربر اطلاع میدهد که اشتراکهای پیشپرداختش را میتوان با یک شارژ تمدید کرد. برای اینکه بدانید کاربر چه زمانی میتواند شارژ کند، قسمت allowExtendAfterTime
را در منبع اشتراک بررسی کنید.
طرح های پیش پرداخت به طور خودکار تمدید نمی شوند، بنابراین نمی توان آنها را لغو کرد. اگر کاربری بخواهد یک طرح پیشپرداخت را لغو کند، میتواند اجازه دهد به تاریخ انقضا برسد.
،خرید اشتراک میتواند در طول چرخه عمر خود از چندین حالت مختلف عبور کند که این امر به عوامل بسیاری از جمله رفتار تمدید خودکار، موقعیتهای کاهش پرداخت و اقدامات مدیریت توسعهدهنده بستگی دارد.
چرخه عمر اشتراک های تمدید خودکار را مدیریت کنید
هنگامی که وضعیت اشتراک کاربر تغییر می کند، سرور باطن شما یک پیام SubscriptionNotification
دریافت می کند
برای بهروزرسانی وضعیت موجود در باطن خود، با API purchases.subscriptionsv2.get
با کد خرید موجود در اعلان تماس بگیرید. این نقطه پایانی آخرین وضعیت اشتراک را ارائه می دهد که یک نشانه خرید داده می شود و منبع حقیقت برای مدیریت اشتراک در نظر گرفته می شود.
رمز خرید از زمان ثبت نام اشتراک تا 60 روز پس از انقضا معتبر است. پس از این تاریخ ، توکن خرید دیگر برای استفاده از API توسعه دهنده Google Play معتبر نیست.
خریدهای جدید تمدید مجدد خودکار
هنگامی که یک کاربر اشتراک را خریداری می کند ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PURCHASED
به مشتری RTDN شما ارسال می شود. این که آیا شما این اعلان را دریافت کرده اید یا خرید جدید را از طریق PurchasesUpdatedListener
یا خرید دستی در روش onResume()
برنامه خود ثبت می کنید ، باید خرید جدید را در پس زمینه امن خود پردازش کنید. برای این کار مراحل زیر را دنبال کنید:
- برای دریافت یک منبع اشتراک که حاوی آخرین وضعیت اشتراک است ،
purchases.subscriptionsv2.get
جستجو کنید. - اطمینان حاصل کنید که مقدار میدان
subscriptionState
SUBSCRIPTION_STATE_ACTIVE
است. - خرید را تأیید کنید .
- به کاربر دسترسی به محتوا بدهید. اگر شناسه ها در زمان خرید با استفاده از
setObfuscatedAccountId
وsetObfuscatedProfileId
تنظیم شوند ، می توان حساب کاربری مرتبط با خرید را با شیءExternalAccountIdentifiers
از منبع اشتراک شناسایی کرد.
کتابخانه صورتحساب بازی همچنین شامل روشی برای تصدیق اشتراک ، acknowledgePurchase()
و روشی برای بررسی وضعیت تأیید ، isAcknowledged()
. با این حال ، ما توصیه می کنیم برای امنیت بهتر ، پردازش خرید را در پس زمینه خود انجام دهید.
منبع اشتراک برای خریدهای جدید شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
تمدید اشتراک
برای عدم نصب ، اشتراک های تمدید خودکار ، هنگام تمدید اشتراک ، یک اعلان SUBSCRIPTION_RENEWED
ارسال می شود. برای اشتراک اقساط ، هر بار که اشتراک در تاریخ صورتحساب آن شارژ می شود ، یک اعلان SUBSCRIPTION_RENEWED
ارسال می شود. اطمینان حاصل کنید که کاربر هنوز حق اشتراک دارد و سپس وضعیت اشتراک را با expiryTime
جدید موجود در منبع اشتراک برگشتی از API توسعه دهنده Google Play به روز می کند. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
]
}
نیازی به تأیید تجدید اشتراک نیست.
دوره ارفاقی
اگر مشکلات پرداخت با تمدید اشتراک وجود داشته باشد ، گوگل به کاربر اطلاع می دهد و به طور دوره ای سعی می کند تا مدتی قبل از انقضاء اشتراک ، اشتراک را تمدید کند. این دوره بازیابی می تواند شامل یک دوره فیض باشد که به دنبال آن یک دوره نگهدارنده حساب انجام می شود. در طی یک دوره فضل ، کاربر هنوز هم باید به حق اشتراک خود دسترسی داشته باشد.
روش queryPurchasesAsync()
همچنان به بازگرداندن خریدهایی که در دوره GRACE هستند ، باز می گردد. اگر برنامه شما صرفاً به queryPurchasesAsync
متکی است تا بررسی کند که آیا کاربر حق اشتراک دارد ، برنامه شما باید به طور خودکار دوره های GRACE را انجام دهد ، زیرا این اشتراک ها از طریق کتابخانه صورتحساب بازی فعال هستند.
همگام سازی وضعیت اشتراک با باطن خود به شما امکان می دهد تا از کاهش پرداخت آگاه باشید و زمینه بیشتری را به شما می دهد زیرا سعی می کنید چرند غیر ارادی را کاهش دهید. پیام های SubscriptionNotification
را با نوع SUBSCRIPTION_IN_GRACE_PERIOD
گوش دهید تا هنگام ورود کاربر به یک دوره GRACE اطلاع داده شود. در حالی که کاربر در یک دوره GRACE قرار دارد ، منبع اشتراک شامل autoRenewEnabled = true
. Google Play به صورت پویا مقدار expiryTime
را تا زمانی که دوره گریس منقضی شده باشد ، افزایش می دهد زیرا حق باید تا زمانی که کاربر لغو شود یا دوره گریس برای حداکثر طول آن ادامه داشته باشد ، دوام داشته باشد. مقدار میدان subscriptionState
در این دوره SUBSCRIPTION_STATE_IN_GRACE_PERIOD
است. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
بازی به کاربران اطلاع می دهد که در یک دوره لطف قرار دارند که پرداخت آنها کاهش یافته است و آنها را وادار می کند تا مشکلات روش پرداخت خود را در فروشگاه بازی برطرف کنند. هنگامی که کاربر وارد یک دوره GRACE می شود ، شما همچنین باید کاربر را ترغیب کنید که در صورت عدم ارادت ، روش پرداخت خود را برطرف کند. یک روش ساده برای انجام این کار استفاده از API پیام رسانی درون برنامه است. اگر وقتی کاربر برنامه شما را باز می کند ، با این API تماس می گیرید ، به آنها پیام بازی در یک اسنک موقت نشان داده می شود که به کاربر اطلاع می دهد که پرداخت آنها کاهش یافته است. این پیام همچنین شامل یک پیوند عمیق برای کاربر برای رفع روش پرداخت خود در Google Play است.
به محض اینکه کاربر روش پرداخت خود را برطرف کرد ، اشتراک با تاریخ تجدید اصلی خود تجدید می شود و شما می توانید همانطور که در تمدید توضیح داده شده است ، تمدید را انجام دهید.
اگر کاربر روش پرداخت خود را در دوره GRACE اصلاح نکند ، اشتراک وارد حساب نگهدارنده می شود و حق خود را از دست می دهد.
دسترسی و بازیابی دوره گریس
شکل 2 جدول زمانی برای اشتراک را نشان می دهد که وارد یک دوره فیض می شود و هنگامی که کاربر روش پرداخت خود را اصلاح می کند ، بازیابی می شود. پس از پایان دوره GRACE ، کاربر باید مزایای اشتراک را از دست بدهد و به حساب خود ادامه دهد.

مهم است که نکات زیر را به خاطر بسپارید:
- در طی یک دوره فضل ، کاربر باید دسترسی به مزایای اشتراک را حفظ کند.
- هنگامی که یک اشتراک در یک دوره فضل بهبود می یابد ، تاریخ تجدید تنظیم مجدد نمی شود.
- اگر دوره فیض را افزایش دهید - به عنوان مثال ، از 7 روز به 14 روز - کاربرانی که در یک دوره فضل هستند ، به مزایای اشتراک دسترسی پیدا می کنند.
- اگر دوره فیض را کاهش دهید ، کاربرانی که به اندازه کافی در دوره Grace قدیمی قرار دارند تا از دوره جدید GRACE فراتر بروند ، مزایای اشتراک خود را بلافاصله لغو می کنند. به عنوان مثال ، اگر دوره فضل را از 14 روز به 7 روز کاهش دهید ، کاربرانی که در روزهای 8-14 دوره قدیمی گریس هستند ، مزایای اشتراک خود را بلافاصله لغو می کنند.
- اشتراک در حالت فعال باقی مانده است و تا پایان دوره فضل خاموش ، دوره فضل را دریافت نمی کنید
دوره گریس ساکت
شما می توانید یک دوره فضل 0 روز تعیین کنید ، اما بازی حداقل 1 روز صبر می کند تا از زمان کافی برای پرداخت مجدد پرداخت اطمینان حاصل شود. این دوره Silent Grace یک شبکه ایمنی برای پردازش پرداخت ارائه می دهد. در طی این دوره 24 ساعته ، اشتراک در حالت ACTIVE
باقی مانده است.
بهترین راه برای همگام سازی با تغییرات وضعیت اشتراک ، گوش دادن و واکنش به اعلان های توسعه دهنده زمان واقعی (RTDN) است. به جای زمان انقضا با روش purchases.subscriptionsv2.get()
.
بسته به وضعیت اشتراک پس از دوره 24 ساعته Grace Silent ، باید یکی از اعلان های زیر را دریافت کنید:
-
SUBSCRIPTION_ON_HOLD
(در صورت فعال بودن) -
SUBSCRIPTION_CANCELED
(در صورت لغو) -
SUBSCRIPTION_EXPIRED
(در صورت انقضا) -
SUBSCRIPTION_RENEWED
(در صورت تجدید موفقیت آمیز)
همچنین می توانید پس از دوره 24 ساعته Grace Silent Grace ، در هر نقطه از روش subscriptionV2.get()
در هر نقطه تماس بگیرید تا آخرین وضعیت اشتراک را بدست آورید.
حساب
اگر مشکلات پرداخت با تجدید اشتراک وجود داشته باشد ، پس از پایان هر دوره GRACE ، یک دوره نگه داشتن حساب آغاز می شود. هنگامی که یک اشتراک وارد حساب کاربری می شود ، باید دسترسی به حق اشتراک را مسدود کنید.
در حین نگه داشتن حساب ، شما باید در صورت لزوم هرگونه لغو ، ترمیم یا خرید مجدد اشتراک های خود را ادامه دهید ، زیرا این امکان وجود دارد که کاربر بتواند این تغییرات را در حالی که اشتراک در آن است ، انجام دهد.
RTDNS هنگام ورود کاربر به دوره نگه داشتن حساب به شما اطلاع می دهد ، بنابراین می توانید در اسرع وقت آنها را به آنها اطلاع دهید که چرا دسترسی آنها به اشتراک به حالت تعلیق در آمده است. یک روش ساده برای انجام این کار استفاده از API پیام رسانی درون برنامه است. تماس با این API وقتی کاربر شما باز می شود برنامه پیام را در یک اسنک موقت به کاربر نشان می دهد و به آنها اطلاع می دهد که پرداخت آنها کاهش یافته است. این پیام همچنین شامل یک پیوند عمیق برای کاربر برای رفع روش پرداخت خود در Google Play است.
اگر کاربران شما می توانند به محتوای اشتراک در خارج از برنامه شما دسترسی پیدا کنند ، ممکن است دریابند که دسترسی به سطوح مختلف را از دست داده اند. ممکن است بخواهید یک اعلان فشار یا یک ایمیل به کاربر ارسال کنید تا به آنها اطلاع دهید که اشتراک آنها به دلیل کاهش پرداخت دیگر فعال نیست.
اشتراک با روش queryPurchasesAsync()
در حین نگه داشتن حساب بازگردانده نمی شود ، بنابراین اگر برنامه شما برای نمایش خریدهای موجود به این روش متکی است ، باید به طور پیش فرض از نگه داشتن حساب پشتیبانی کنید.
با اعلان های توسعه دهنده در زمان واقعی ، هنگامی که یک اشتراک وارد حساب می شود ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_ON_HOLD
دریافت می کنید. برای بازیابی اطلاعات اشتراک جدید با روش خرید. purchases.subscriptionsv2.get
از سرور پس زمینه ایمن خود تماس بگیرید. در حین حساب نگه داشتن ، قسمت expiryTime
از منبع اشتراک روی یک جدول زمانی گذشته تنظیم شده است ، و قسمت subscriptionState
به SUBSCRIPTION_STATE_ON_HOLD
تنظیم شده است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
برای بازگرداندن دسترسی ، کاربران باید روش پرداخت خود را برطرف کنند. PLAY به کاربران در مورد کاهش میزان پرداخت خود اطلاع می دهد ، و همچنین باید آنها را ترغیب کنید که روش پرداخت آنها را برطرف کنند.
بعد از اینکه کاربر روش پرداخت خود را اصلاح کرد ، اشتراک به حالت فعال باز می گردد و سپس باید دسترسی به محتوای مشترک را بازیابی کنید. در این حالت ، نشانه خرید همانند قبل از شروع حساب کاربری است زیرا همان خرید در حال بهبود است ، و شما یک RTDN با نوع SUBSCRIPTION_RECOVERED
دریافت می کنید.
برای اشتراک های اقساطی ، کاهش پرداخت و بازپرداخت برای هرگونه تلاش پرداخت فردی می تواند رخ دهد.
پس از بهبودی ، کتابخانه صورتحساب بازی دوباره اشتراک را از طریق روش queryPurchasesAsync()
باز می گرداند. اگر از این روش برای تعیین اینکه آیا کاربر حق اشتراک دارد ، استفاده می کنید ، پس برنامه شما باید به طور خودکار اشتراک بازیابی از نگهدارنده حساب را انجام دهد.
به یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_RECOVERED
گوش دهید تا هنگام بازیابی اشتراک به شما اطلاع داده شود و کاربر باید دسترسی را دوباره بدست آورد. اگر پس از دریافت این اعلان ، از اشتراک خود پرس و جو کنید ، قسمت expiryTime
در آینده روی یک Timestamp تنظیم شده است و قسمت subscriptionState
دوباره به SUBSCRIPTION_STATE_ACTIVE
تنظیم شده است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
اگر کاربر قبل از پایان دوره نگه داشتن حساب ، روش پرداخت خود را اصلاح نکند ، در عوض RTDN را با نوع SUBSCRIPTION_CANCELED
دریافت می کنید. برای راهنمایی در مورد کار با لغو ، به لغو مراجعه کنید. هنگامی که شما برای اشتراک که از این طریق لغو شده است ، پرس و جو می کنید ، قسمت بازگردانده شده expiryTime
به یک جدول زمانی گذشته تنظیم می شود:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
بلافاصله پس از اطلاع از لغو در حین نگه داشتن حساب ، RTDN را با نوع SUBSCRIPTION_EXPIRED
نیز دریافت خواهید کرد زیرا کاربر از حق پرداخت شده خارج است و اشتراک با لغو خفه شده است. شما می توانید این انقضا را به روشی که به طور عادی انجام می دهید ، کنترل کنید .
کاربر می تواند با خرید مجدد همان برنامه اشتراک یا هر برنامه دیگری که از طریق برنامه در طول دوره نگه داشتن حساب خود از خرید اصلی خود ارائه می دهید ، دسترسی را به دست آورد. در این حالت ، یک نشانه خرید جدید صادر می شود و مقدار جدید به عنوان بخشی از یک رویداد SUBSCRIPTION_PURCHASED
که نشان دهنده این نمونه جدید است ، بازگردانده می شود.
حساب و بازیابی حساب را نگه دارید
شکل 3 یک جدول زمانی برای اشتراک را نشان می دهد که وارد حساب می شود و هنگامی که کاربر روش پرداخت خود را اصلاح می کند ، بازیابی می شود.

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

مهم است که نکات زیر را به خاطر بسپارید:
- قبل از اینکه اشتراک به حساب خود وارد شود ، Google Play تلاش های اضافی برای شارژ روش پرداخت تا 48 ساعت انجام می دهد. کاربر در این دوره مزایای اشتراک را حفظ می کند. پس از گذشت این دوره آزمایش مجدد ، اشتراک سپس وارد حساب نگهدارنده می شود و کاربر باید دسترسی به مزایای اشتراک را از دست بدهد.
- هنگامی که اشتراک از یک حالت مکث با فرم پرداخت ناکام از سر گرفته می شود ، این اشتراک مستقیماً در نظر گرفته می شود.
- هنگامی که یک اشتراک از حساب حساب بازپرداخت می شود ، تاریخ تجدید تنظیم مجدد می شود.
انقضا
پس از اتمام اشتراک ، کاربر باید دسترسی به اشتراک را از دست بدهد. یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_EXPIRED
در این مورد ارسال می شود. هنگامی که این اعلان را دریافت کردید ، از API توسعه دهنده Google Play پرس و جو کنید تا آخرین منبع اشتراک را بدست آورید. پس از تأیید اینکه subscriptionState
SUBSCRIPTION_STATE_EXPIRED
است ، حق را حذف کرده و وضعیت خرید را به عنوان نامعتبر در پس زمینه خود ثبت کنید. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
لغوها
یک کاربر می تواند به طور داوطلبانه اشتراک از مرکز اشتراک Play را لغو کند یا در صورت عدم بهبود در حساب ، اشتراک خود را به طور خودکار لغو کند. توسعه دهندگان همچنین می توانند با purchases.subscriptions.cancel
هنگامی که اشتراک لغو شد ، کاربر تا پایان چرخه صورتحساب فعلی دسترسی به محتوا را حفظ کند. با پایان یافتن چرخه صورتحساب ، دسترسی باید ابطال شود.
لغو اشتراک غیر نصب ، اشتراک مجدد خودکار باعث ایجاد یک اعلان SUBSCRIPTION_CANCELED
می شود. هنگامی که این اعلان را دریافت می کنید ، منبع اشتراک برگرفته از API توسعه دهنده Google Play دارای قسمت subscriptionState
است که به SUBSCRIPTION_STATE_CANCELED
تنظیم شده است ، و قسمت expiryTime
حاوی تاریخی است که کاربر باید دسترسی به اشتراک را از دست بدهد. اگر آن تاریخ در گذشته باشد ، کاربر باید بلافاصله حق خود را از دست بدهد. به عنوان مثال ، این ممکن است اتفاق بیفتد ، اگر کاربر به دلیل کاهش پرداخت ، اشتراک را در حین نگه داشتن حساب لغو کند.
منبع اشتراک برای خرید لغو شده شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
برای اشتراک های اقساطی ، یک اعلان SUBSCRIPTION_CANCELLATION_SCHEDULED
با لغو کار کاربر ارسال می شود وقتی که پرداخت ها برای دوره تعهد باقی می مانند. لغو در انتظار است و در پایان دوره تعهد فعلی اجرا می شود. هنگامی که این اعلان را دریافت می کنید ، منبع اشتراک برگرفته از API توسعه دهنده Google Play دارای قسمت اشتراک گذاری است که به SUBSCRIPTION_STATE_ACTIVE
تنظیم شده است زیرا اشتراک اقساط تا پایان دوره تعهد هنوز فعال است. با این حال ، یک شیء در حال انتظار خالی وجود دارد. یک اعلان SUBSCRIPTION_CANCELED
به دنبال یک SUBSCRIPTION_EXPIRED
در پایان دوره تعهد ارسال می شود.
منبع اشتراک برای خرید اشتراک اقساطی که در انتظار لغو است ، شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_plan01",
"expiryTime": expiration_time,
"autoRenewingPlan": {
"autoRenewEnabled": true,
"recurringPrice": {
"currencyCode": "USD",
"units": "1",
"nanos": 990000000
},
"installmentDetails": {
"initialCommittedPaymentsCount": 6,
"remainingCommittedPaymentsCount": 5,
"pendingCancellation": {}
...
}
}
}
],
}
می توانید به قسمت canceledStateContext
در منبع اشتراک نگاه کنید تا بدانید که چرا اشتراک لغو شده است (به عنوان مثال ، آیا اشتراک توسط کاربر ، توسط سیستم یا توسط شما لغو شده است). اگر اشتراک توسط کاربر لغو شد ، می توانید به قسمت userInitiatedCancellation
نگاه کنید تا بدانید که چرا کاربر اشتراک را لغو کرده است. این می تواند به آگاهی از استراتژی های ارتباطی کمک کند.
هنگامی که یک اشتراک لغو می شود اما هنوز منقضی نشده است ، هنوز هم از queryPurchasesAsync()
بازگردانده می شود. ممکن است بخواهید پیامی را در برنامه خود نمایش دهید که به کاربر اطلاع دهد که اشتراک آنها لغو شده و تاریخ انقضا را به آنها می دهد.
ابطالها
به دلایل مختلف می توان اشتراک را لغو کرد ، از جمله باطن شما که با استفاده از purchases.subscriptionsv2.revoke
اشتراک را لغو می کنید. در این شرایط ، حق کاربر را فوراً لغو کنید. یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_REVOKED
هنگام وقوع این اتفاق ارسال می شود. هنگامی که این اعلان را دریافت می کنید ، منبع اشتراک بازگشت از API توسعه دهنده Google Play دارای قسمت subscriptionState
است که به SUBSCRIPTION_STATE_EXPIRED
تنظیم شده است.
منبع اشتراک برای یک خرید ابطال شده شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
اشتراک های معوق
دلایل مختلفی وجود دارد که ممکن است بخواهید حق کاربر را گسترش دهید. به عنوان مثال ، شما ممکن است بخواهید به عنوان یک تبلیغ ویژه ، دسترسی رایگان به کاربران ارائه دهید ، مانند دادن یک هفته رایگان برای خرید یک فیلم یا دسترسی رایگان به مشتریان به عنوان یک ژست حسن نیت. شما می توانید از روش purchases.subscriptions.defer
از API توسعه دهنده Play استفاده کنید تا تاریخ Bililng بعدی را برای یک اشتراک مجدد خودکار تهیه کنید. هنگامی که این کار را انجام می دهید ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_DEFERRED
ارسال می شود. در دوره تعویق ، کاربر با دسترسی کامل در محتوای شما مشترک می شود اما شارژ نمی شود. تاریخ تجدید اشتراک به روز شده است تا تاریخ جدید را منعکس کند.
برای برنامه های پیش پرداخت ، می توانید از API Offer Billing برای تعویق زمان انقضا استفاده کنید.
منبع اشتراک برای یک اشتراک معوق شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
اشتراک مکث
شما می توانید با این امکان که کاربران بتوانند اشتراک خود را مکث کنند ، می توانید خفه کننده داوطلبانه را کاهش دهید. هنگامی که ویژگی مکث را فعال می کنید ، کاربران می توانند بسته به دوره مکرر ، اشتراک خود را برای مدت زمانی بین یک هفته تا سه ماه مکث کنند.
عود اشتراک | هفتگی | ماهانه | سه ماهه | شش ماهه | سالانه |
---|---|---|---|---|---|
طول مکث موجود * | 1 هفته 2 هفته 3 هفته 4 هفته | 1 ماه 2 ماه 3 ماه | 1 ماه 2 ماه 3 ماه | 1 ماه 2 ماه 3 ماه | N/A |
مکث اشتراک فقط پس از پایان دوره صدور صورتحساب فعلی اجرا می شود. در حالی که اشتراک مکث شده است ، کاربر به اشتراک دسترسی ندارد و قیمت تجدید آن را پرداخت نمی کند. در پایان دوره مکث ، اشتراک از سر گرفته می شود و Google سعی در تجدید اشتراک دارد. اگر رزومه موفقیت آمیز باشد ، اشتراک دوباره فعال می شود. اگر رزومه به دلیل مسئله پرداخت از بین نرود ، کاربر همانطور که در شکل 5 و 6 نشان داده شده است وارد حالت نگهدارنده حساب می شود:


یک کاربر همچنین می تواند در هر زمان در طول مدت مکث ، اشتراک را به صورت دستی از سر بگیرد ، همانطور که در شکل 6 نشان داده شده است. وقتی کاربر به صورت دستی از سر گرفته می شود ، تاریخ صورتحساب در تاریخ رزومه دستی تغییر می کند.
هنگامی که اشتراک کاربر متوقف می شود ، کتابخانه صورتحساب بازی اشتراک را از طریق روش queryPurchasesAsync()
بازگرداند. اگر اشتراک از سر گرفته شود ، روش queryPurchasesAsync()
دوباره آن را برمی گرداند.
به RTDN ها گوش دهید تا وقتی کاربر اشتراک خود را مکث می کند ، از آن آگاه باشند. این اعلان ها همچنین به شما امکان می دهد تا به کاربران خود در برنامه خود اطلاع دهید که اشتراک خود را متوقف کرده و به آن دسترسی ندارند. شما همچنین باید راهی را برای کاربر فراهم کنید تا با استفاده از یک لینک عمیق به Google Play ، اشتراک خود را در هر زمان از سر بگیرد.
هنگامی که کاربر شما مکث اشتراک آنها را آغاز می کند ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
ارسال می شود. در این زمان ، کاربر باید تا تاریخ تجدید بعدی به اشتراک خود دسترسی داشته باشد و منبع اشتراک شامل autoRenewEnabled = true
. مقدار قسمت subscriptionState
در این مرحله SUBSCRIPTION_STATE_ACTIVE
است.
هنگامی که مکث وارد می شود ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PAUSED
ارسال می شود. هنگامی که این اتفاق می افتد ، کاربر باید دسترسی به اشتراک خود را از دست بدهد ، و منبع اشتراک حاوی autoRenewEnabled = true
است و قسمت subscriptionState
در SUBSCRIPTION_STATE_PAUSED
تنظیم شده است. می توانید با چک کردن شیء PausedStateContext
که انتظار می رود اشتراک دوباره تجدید شود.
در صورتی که اشتراک به طور خودکار در پایان دوره مکث یا اگر کاربر تصمیم به از سرگیری دستی اشتراک استفاده کرده است ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_RENEWED
ارسال می شود. این باید همانطور که در تجدید توضیح داده شده است ، انجام شود.
در صورت عدم موفقیت در پرداخت در هنگام تلاش برای از سرگیری اشتراک پس از مکث ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_ON_HOLD
ارسال می شود. این باید همانطور که در نگهدارنده حساب توضیح داده شده است ، اداره شود.
دوباره اشتراک کنید
برای برنامه های پایه اشتراک مجدد خودکار ، فروشگاه Google Play ممکن است یک دکمه ارسال مجدد را نشان دهد. این دکمه به کاربران امکان می دهد دسترسی به اشتراک را دوباره بدست آورند. ممکن است به دلایل مختلف ظاهر نشود ، به عنوان مثال وقتی اشتراک مدتها قبل منقضی شد.

اگرچه این دکمه همیشه با عنوان Respections دارای برچسب است ، اما عملکرد آن به وضعیت اشتراک بستگی دارد.
در حالی که اشتراک لغو شده است اما هنوز منقضی نشده است ، کاربر هنوز مشترک است و مزایای اشتراک را دریافت می کند. اگر کاربر دوباره ارسال شود ، لغو به طور موثری خنثی می شود و اشتراک همچنان به تجدید ادامه می یابد. این عمل به عنوان Restore in Play Developer و API ها شناخته می شود.
پس از اتمام اشتراک مجدد خودکار ، می توانید به کاربران اجازه دهید همان برنامه پایه اشتراک را خریداری کنند. این عمل در اسناد و مدارک توسعه دهنده Play و APIs Play شناخته شده است. می توانید این گزینه را برای هر طرح پایه در کنسول Play یا با استفاده از API پیکربندی کنید.
قبل از انقضا بازیابی کنید
اگر برنامه شما صرفاً به روش queryPurchasesAsync()
متکی است تا مشخص کند آیا کاربر حق اشتراک دارد ، پس برنامه شما باید به طور خودکار ترمیم ها را انجام دهد زیرا روش queryPurchasesAsync()
قبل از تاریخ انقضا ، خریدهای لغو شده را باز می گرداند. اشتراک ترمیم شده همچنان تجدید می شود که گویی لغو نشده است.
اگر برنامه شما حالت اشتراک را با یک باطن همگام سازی می کند ، باید یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_RESTARTED
گوش دهید. پس از دریافت این RTDN ، برنامه شما می تواند به اعلان پاسخ دهد ، ضبط کنید که اشتراک اکنون برای تجدید تنظیم شده است و نمایش پیام های مرمت را در برنامه شما متوقف می کند. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
پس از انقضا دوباره ثبت نام کنید
اگر یک برنامه پایه تمدید خودکار با استفاده از کنسول Google Play یا API پیکربندی شده باشد تا مجدداً مجدداً ارسال شود ، کاربران می توانند یک اشتراک منقضی شده را در فروشگاه Google Play دوباره خریداری کنند.
اینها خریدهای جدیدی هستند. Google Play یک نشانه خرید کاملاً جدید را صادر می کند ، و پس زمینه شما RTDN را با نوع SUBSCRIPTION_PURCHASED
دریافت می کند. وضعیت خرید برای این نوع از خرید خارج از برنامه شامل یک linkedPurchaseToken
در ارتباط با خرید اصلی در آن مورد نیست ، زیرا اشتراک اصلی کاملاً منقضی شده است. اینها خریدهای جدیدی هستند که پس زمینه شما باید مانند هر خرید دیگری پردازش و تصدیق کند.
به روزرسانی ، کاهش و ارسال مجدد
هنگامی که یک کاربر پس از ابطال از برنامه شما قبل از اتمام اشتراک ، به روز می کند ، کاهش می یابد یا ثبت نام می کند ، اشتراک قدیمی باطل می شود و اشتراک جدید با یک نشانه خرید جدید ایجاد می شود.
علاوه بر این ، منبع اشتراک بازگشت از API توسعه دهنده Google Play حاوی یک قسمت linkedPurchaseToken
است که نشانگر خرید قدیمی است که کاربر از آن به روز می کند ، کاهش می یابد ، یا دوباره ارسال می شود. شما می توانید از Token Buy در آن قسمت استفاده کنید تا اشتراک قدیمی را جستجو کرده و حساب کاربری موجود را شناسایی کنید تا بتوانید خرید جدید را با همان حساب مرتبط کنید.
قبل از ارائه گزینه های به روزرسانی ، کاهش یا ارسال مجدد گزینه ها به کاربر در برنامه خود ، باید اشتراک موجود را تصدیق کنید. اگر اشتراک موجود هنوز در انتظار تصدیق باشد ، هرگونه تغییر برنامه یا ارسال مجدد مسدود می شود.
اگر کاربر با موفقیت به روزرسانی ، کاهش یا ارسال مجدد را خریداری کند ، این یک خرید جدید است که باید آن را تصدیق کنید. روش توصیه شده برای انجام این کار استفاده از API توسعه دهنده Google Play است. منبع اشتراک شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
تغییرات قیمت
راهنمای بهترین شیوه های تغییر قیمت را برای یادگیری در مورد تغییر قیمت های اشتراک مجدد خودکار و اطلاع رسانی به کاربران در صورت لزوم مشاهده کنید.
هنگامی که تغییرات قیمت برای مشترکان موجود به عنوان Opt-in اعمال می شود ، اگر کاربر برای تأیید یا رد قیمت جدید اقدام کند ، RTDN دریافت خواهید کرد.
تأیید کاربر از تغییر قیمت انتخاب را انجام دهید
هنگامی که کاربر افزایش قیمت اشتراک شما را می پذیرد ، یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
تأیید می کنید. با کاهش قیمت امتناع ، یا هنگامی که قیمت اشتراک افزایش می یابد ، شما یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_RENEWED
را دریافت می کنید. با این اعلان مانند هر تجدید دیگر رفتار کنید.
مواردی را انجام دهید که افزایش قیمت انتخابی پذیرفته نشود
اگر کاربر قبل از نیاز به تمدید با قیمت بالاتر ، افزایش قیمت انتخاب شما را نپذیرفته باشد ، آنها به طور خودکار نامشخص هستند و شما یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_CANCELED
دریافت می کنید. این رویداد را همانطور که در لغو توضیح داده شده است ، اداره کنید.
کاربران همچنین می توانند اشتراک خود را برای افزایش قیمت امتناع به دنبال همان مکانیسم لغو کنند.
چرخه حیات را برای برنامه های پیش پرداخت کنترل کنید
مانند اشتراک های تمدید خودکار ، باید برنامه های پیش پرداخت را پس از هر خرید جدید تصدیق کنید. در مورد برنامه های پیش پرداخت ، شما باید هم خرید اولیه و هم از هر نوع بالا را پردازش کنید ، زیرا کاربر باید هر بار جریان خرید را طی کند.
با توجه به پتانسیل مدت زمان برنامه پیش پرداخت کوتاه ، مهم است که هرچه سریعتر خرید را تصدیق کنید. برنامه های پیش پرداخت با مدت یک هفته یا بیشتر باید ظرف 3 روز تصدیق شود. برنامه های پیش پرداخت با مدت زمان کوتاهتر از یک هفته باید در نیمی از مدت زمان برنامه تصدیق شود. به عنوان مثال ، توسعه دهندگان 1.5 روز فرصت دارند تا از خرید یک برنامه پیش پرداخت سه روزه تصدیق کنند.
یک پیام SubscriptionNotification
با نوع SUBSCRIPTION_PURCHASED
هر زمان که یک اشتراک برنامه پیش پرداخت خریداری شود ، از جمله هر بالا به بالا ، به مشتری RTDN شما ارسال می شود. برای بررسی آخرین وضعیت اشتراک برنامه پیش پرداخت ، با روش خرید. purchases.subscriptionsv2.get
تماس بگیرید.
یک نشانه خرید جدید برای خریدهای برتر صادر می شود ، و شما نشانه خرید قبلی را در قسمت linkedPurchaseToken
به عنوان بخشی از وضعیت خرید اشتراک جدید دریافت می کنید. نشانه خرید از ثبت نام اشتراک تا 60 روز پس از انقضا معتبر است. پس از این تاریخ ، توکن خرید دیگر برای استفاده از API توسعه دهنده Google Play معتبر نیست.
منبع اشتراک برای خرید برنامه پیش پرداخت شبیه به مثال زیر است:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "prepaid_plan01",
"expiryTime": expiry_date,
"prepaidPlan": {
"allowExtendAfterTime": timestamp_after_which_topups_are_allowed
}
}
]
}
می توانید ببینید که حق در حوزه expiryTime
به پایان می رسد. خریدهای بالا با جمع آوری آن ، زمان حق را افزایش می دهد. این بدان معناست که اگر کاربر قبل از پایان حق اصلی خود صعود کند ، زمان جدید در بالای تاریخ انقضا قبلی آنها اضافه می شود.
ممکن است بخواهید پیامی را در برنامه خود نمایش دهید که به کاربر اطلاع دهد که اشتراک های پیش پرداخت آنها را می توان با بالا به بالا گسترش داد. برای دانستن اینکه چه زمانی کاربر قادر به بالادست خواهد بود ، قسمت allowExtendAfterTime
را در منبع اشتراک بررسی کنید.
برنامه های پیش پرداخت به صورت خودکار تمدید نمی شوند ، بنابراین نمی توان آنها را لغو کرد. اگر کاربر بخواهد یک برنامه پیش پرداخت را لغو کند ، می تواند به تاریخ انقضا خود برسد.