چرخه عمر خرید یکبار مصرف

محصولات یک‌بار مصرف چرخه عمر ساده‌تری نسبت به محصولات اشتراکی دارند، اما هنوز چندین وضعیت و رویداد انتقال وجود دارد که بک‌اند شما باید بتواند به درستی آنها را مدیریت کند.

وضعیت‌های چرخه عمر و رویدادهای انتقال برای خریدهای یکبار مصرف.
شکل 1 وضعیت‌های چرخه عمر و رویدادهای انتقال برای خریدهای یکباره.

خریدهای جدید یکبار مصرف محصولات

پس از اینکه کاربر جریان صورتحساب را تکمیل کرد، برنامه شما می‌تواند اطلاعات مربوط به خرید جدید را به یکی از روش‌های زیر مشاهده کند:

  • Real-time developer notifications تنظیم کنید و گزینه‌ی Get all notifications for subscriptions and one-time products را فعال کنید تا به‌روزرسانی‌هایی در مورد وضعیت خریدها دریافت کنید.
  • رابط PurchasesUpdatedListener از BillingClient را برای دریافت خودکار به‌روزرسانی‌های خرید پیاده‌سازی کنید.
  • متد BillingClient.queryPurchasesAsync() را فراخوانی کنید.

پس از دریافت خرید جدید، از متد getPurchaseState یا purchases.productsv2.getproductpurchasev2 in Play Developer API استفاده کنید.

برای تعیین وضعیت پرداخت خرید جدید.

اعلان‌های توسعه‌دهنده در لحظه

وقتی کاربری محصولی را که فقط یک بار مصرف است، خریداری می‌کند یا خرید آن را لغو می‌کند، گوگل پلی یک پیام OneTimeProductNotification ارسال می‌کند. برای به‌روزرسانی وضعیت خرید backend خود، از توکن خرید ارائه شده در شیء OneTimeProductNotification برای فراخوانی متد purchases.productsv2.getproductpurchasev2 استفاده کنید. این متد آخرین وضعیت خرید و مصرف را با توجه به یک توکن خرید ارائه می‌دهد.

وقتی یک پیش‌سفارش تکمیل می‌شود و وضعیت خرید آن به خریداری‌شده تغییر می‌کند، یک RTDN برای مشتری شما ارسال می‌شود. پس از دریافت RTDN، خرید پیش‌سفارش را طبق توضیحات «پردازش خریدهای یکباره محصول» در بخش مدیریت خود پردازش کنید.

شما باید RTDN های مربوط به تراکنش را در backend امن خود مدیریت کنید.

رسیدگی به تراکنش‌های تکمیل‌شده

وقتی کاربری خرید یک محصول یکبار مصرف را تکمیل می‌کند، گوگل پلی یک پیام OneTimeProductNotification با نوع ONE_TIME_PRODUCT_PURCHASED ارسال می‌کند. وقتی این RTDN را دریافت کردید، خرید را طبق توضیحات «پردازش خریدهای یکبار مصرف محصول» در بک‌اند خود پردازش کنید.

رسیدگی به تراکنش‌های لغو شده

وقتی خرید یک محصول یک‌باره لغو می‌شود، اگر پیکربندی دریافت اعلان‌های توسعه‌دهنده را برای دریافت اعلان‌های بلادرنگ تنظیم کرده باشید، گوگل پلی یک پیام OneTimeProductNotification با نوع ONE_TIME_PRODUCT_CANCELED ارسال می‌کند. برای مثال، این اتفاق می‌تواند در صورتی رخ دهد که کاربر پرداخت را در بازه زمانی مورد نیاز تکمیل نکند، یا اگر خرید توسط توسعه‌دهنده یا به درخواست مشتری لغو شود. وقتی سرور backend شما این اعلان را دریافت کرد، متد purchases.productsv2.getproductpurchasev2 را برای دریافت آخرین وضعیت خرید فراخوانی کنید، سپس backend خود را بر اساس آن، از جمله حقوق کاربر، به‌روزرسانی کنید.

اگر وجه یک محصول خریداری شده در حالت Purchased که فقط یک بار خریداری شده باشد، بازپرداخت شود، با استفاده از API خریدهای باطل شده (Voided Purchases API) به شما اطلاع داده خواهد شد.

خریدهای یکباره محصول را در بخش مدیریت خود پردازش کنید

چه با استفاده از ONE_TIME_PRODUCT_PURCHASED RTDN خرید جدیدی را شناسایی کرده باشید و چه از طریق PurchasesUpdatedListener یا دریافت دستی خریدها در متد onResume() برنامه خود، به صورت درون برنامه‌ای از آن مطلع شده باشید، باید خرید جدید را پردازش کنید. برای امنیت بهتر، توصیه می‌کنیم پردازش خرید را در backend خود انجام دهید.

برای پردازش یک خرید جدید یکبار مصرف، این مراحل را دنبال کنید:

  1. برای دریافت آخرین وضعیت خرید محصول یکبار مصرف، از نقطه پایانی purchases.productsv2.getproductpurchasev2 کوئری بگیرید. برای فراخوانی این متد برای خرید، به purchaseToken مربوطه از برنامه خود یا از ONE_TIME_PRODUCT_PURCHASED RTDN نیاز دارید.
  2. تابع getPurchaseState() را فراخوانی کنید و مطمئن شوید که وضعیت خرید، PURCHASED است.
  3. خرید را تأیید کنید .
  4. به کاربر دسترسی به محتوا را بدهید. حساب کاربری مرتبط با خرید را می‌توان با فیلد obfuscatedExternalAccountId از purchases.productsv2.getproductpurchasev2 شناسایی کرد، اگر هنگام خرید با استفاده از setObfuscatedAccountId() تنظیم شده باشد.
    1. برای خرید محصولات غیر مصرفی، با فراخوانی متد purchases.products.acknowledge ، تحویل محتوا را تأیید کنید. با بررسی فیلد acknowledgementState مطمئن شوید که خرید قبلاً تأیید نشده است.
    2. اگر محصول مصرفی است، با فراخوانی متد purchases.products.consume ، آن را به عنوان مصرف‌شده علامت‌گذاری کنید تا کاربر بتواند پس از مصرف، دوباره آن کالا را خریداری کند. این متد همچنین خرید را تأیید می‌کند.

همچنین متدهای تأیید خرید و مصرف در کتابخانه صورتحساب Play وجود دارد که به شما امکان می‌دهد خریدها را از برنامه خود پردازش کنید، اما توصیه می‌کنیم اگر بک‌اند دارید، برای پیاده‌سازی ایمن‌تر، پردازش را در بک‌اند خود انجام دهید.