למוצרים לרכישה חד-פעמית יש מחזור חיים פשוט יותר מאשר למוצרים למינוי, אבל עדיין יש כמה מצבים ואירועי מעבר שהקצה העורפי צריך לטפל בהם בצורה נכונה.
רכישות חדשות של מוצרים בחיוב חד-פעמי
אחרי שהמשתמש משלים את רצף פעולות החיוב, האפליקציה יכולה לראות מידע על הרכישה החדשה באחת מהדרכים הבאות:
- מגדירים את
Real-time developer notificationsומפעילים אתGet all notifications for subscriptions and one-time productsכדי לקבל עדכונים על סטטוס הרכישות. - כדי לקבל עדכונים אוטומטיים על רכישות, צריך להטמיע את הממשק
PurchasesUpdatedListenerמ-BillingClient. - מבצעים קריאה ל-method
BillingClient.queryPurchasesAsync().
אחרי שמקבלים את הרכישה החדשה, משתמשים בשיטה getPurchaseState או בשיטה purchases.productsv2.getproductpurchasev2 in Play Developer API
כדי לקבוע את סטטוס התשלום של הרכישה החדשה.
התראות בזמן אמת למפתחים
כשמשתמש רוכש מוצר בחיוב חד-פעמי או מבטל את הרכישה, מערכת Google Play שולחת הודעה מסוג OneTimeProductNotification.
כדי לעדכן את סטטוס הרכישה בשרת העורפי, צריך להשתמש בטוקן הרכישה שמופיע באובייקט OneTimeProductNotification כדי לקרוא לשיטה purchases.productsv2.getproductpurchasev2. השיטה הזו מספקת את הסטטוס העדכני של הרכישה והשימוש בה, בהינתן טוקן רכישה.
כשמממשים הזמנה מראש ומצב הרכישה שלה משתנה ל-PURCHASED, נשלח RTDN ללקוח. אחרי שמקבלים את ה-RTDN, מעבדים את הרכישה של ההזמנה מראש כמו שמתואר במאמר בנושא עיבוד רכישות של מוצרים בחיוב חד-פעמי בק-אנד.
אתם צריכים לטפל בהודעות RTDN שקשורות לעסקאות בקצה העורפי המאובטח שלכם.
טיפול בעסקאות שהושלמו
כשמשתמש משלים רכישה של מוצר בחיוב חד-פעמי, Google Play שולחת הודעה מסוג ONE_TIME_PRODUCT_PURCHASED.OneTimeProductNotification
כשמקבלים את ה-RTDN הזה, מעבדים את הרכישה כמו שמתואר במאמר בנושא עיבוד רכישות של מוצר בחיוב חד-פעמי בקצה העורפי.
טיפול בעסקאות שבוטלו
כשמבטלים רכישה חד-פעמית של מוצר, מערכת Google Play שולחת הודעה מסוג ONE_TIME_PRODUCT_CANCELED עם הערך OneTimeProductNotification אם הגדרתם קבלת התראות בזמן אמת למפתחים. לדוגמה, זה יכול לקרות אם המשתמש לא משלים את התשלום בפרק הזמן הנדרש, או אם הרכישה בוטלה על ידי המפתח או לבקשת הלקוח. כשהשרת העורפי מקבל את ההתראה הזו, הוא קורא לשיטה purchases.productsv2.getproductpurchasev2 כדי לקבל את סטטוס הרכישה העדכני, ואז מעדכן את השרת העורפי בהתאם, כולל הרשאות המשתמש.
אם יתקבל החזר כספי על רכישת מוצר בחיוב חד-פעמי בסטטוס Purchased, תקבלו על כך הודעה באמצעות Voided Purchases API.
עיבוד רכישות של מוצרים בחיוב חד-פעמי בקצה העורפי
בין אם זיהיתם רכישה חדשה באמצעות ONE_TIME_PRODUCT_PURCHASED
RTDN
או שקיבלתם על כך הודעה באפליקציה באמצעות PurchasesUpdatedListener או אחזור ידני של רכישות בשיטה onResume() של האפליקציה, אתם צריכים לעבד את הרכישה החדשה. כדי לשפר את האבטחה, מומלץ לטפל בעיבוד הרכישות בקצה העורפי.
כדי לעבד רכישה חד-פעמית חדשה:
- שולחים שאילתה לנקודת הקצה
purchases.productsv2.getproductpurchasev2כדי לקבל את הסטטוס העדכני של רכישת מוצר בחיוב חד-פעמי. כדי לשלוח קריאה לרכיב ה-method הזה עבור רכישה, אתם צריכים את המזהה המתאיםpurchaseTokenמהאפליקציה או מ-ONE_TIME_PRODUCT_PURCHASEDRTDN. - מתקשרים אל
getPurchaseState()ומוודאים שמצב הרכישה הואPURCHASED. - מאמתים את הרכישה.
- נותנים למשתמש גישה לתוכן. אפשר לזהות את חשבון המשתמש שמשויך לרכישה באמצעות השדה
obfuscatedExternalAccountIdמתוךpurchases.productsv2.getproductpurchasev2, אם הוגדר באמצעותsetObfuscatedAccountId()בזמן ביצוע הרכישה.- ברכישות של מוצרים לא מתכלים, צריך לאשר את מסירת התוכן באמצעות קריאה לשיטה
purchases.products.acknowledge. כדי לוודא שהרכישה לא אושרה בעבר, בודקים את השדהacknowledgementState. - אם המוצר הוא מתכלה, צריך לסמן את הפריט כפריט שנצרך באמצעות הקריאה לשיטה
purchases.products.consume, כדי שהמשתמש יוכל לקנות את הפריט שוב אחרי שהוא צרך אותו. בשיטה הזו יש גם אישור על הרכישה.
- ברכישות של מוצרים לא מתכלים, צריך לאשר את מסירת התוכן באמצעות קריאה לשיטה
בספריית החיובים ב-Play יש גם methods לאישור רכישה ולצריכה שמאפשרות לכם לעבד רכישות מהאפליקציה, אבל אם יש לכם בק-אנד, מומלץ לטפל בעיבוד שלו כדי להטמיע את התכונה בצורה מאובטחת יותר.