למוצרים לרכישה חד-פעמית יש מחזור חיים פשוט יותר מאשר למוצרים למינוי, אבל עדיין יש כמה מצבים ואירועי מעבר שהקצה העורפי צריך לטפל בהם בצורה נכונה.
רכישות חדשות של מוצרים בחיוב חד-פעמי
אחרי שהמשתמש משלים את רצף פעולות החיוב, האפליקציה יכולה לראות מידע על הרכישה החדשה באחת מהדרכים הבאות:
- מגדירים את
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
כדי לקבוע את סטטוס התשלום של הרכישה החדשה.
התראות בזמן אמת למפתחים
כשמשתמש רוכש מוצר בחיוב חד-פעמי או מבטל את הרכישה, מערכת Google Play שולחת הודעה מסוג OneTimeProductNotification.
כדי לעדכן את מצב הרכישה בקצה העורפי, צריך להשתמש בטוקן הרכישה שסופק באובייקט OneTimeProductNotification כדי לשלוח קריאה ל-method purchases.productsv2.getproductpurchasev2. השיטה הזו מספקת את סטטוס הרכישה והצריכה העדכני ביותר בהתאם לטוקן הרכישה.
כשהזמנה מראש מתממשת ומצב הרכישה שלה משתנה ל-PURCHASED, נשלחת הודעת RTDN ללקוח. אחרי שמקבלים את ה-RTDN, מעבדים את הרכישה של ההזמנה מראש כמו שמתואר במאמר בנושא עיבוד רכישות של מוצרים בחיוב חד-פעמי בק-אנד.
אתם צריכים לטפל בהתראות RTDN שקשורות לעסקאות בקצה העורפי המאובטח שלכם.
טיפול בעסקאות שהושלמו
כשמשתמש משלים רכישה של מוצר בחיוב חד-פעמי, מערכת Google Play שולחת הודעהOneTimeProductNotification מסוג ONE_TIME_PRODUCT_PURCHASED.
כשמקבלים את ה-RTDN הזה, מעבדים את הרכישה כמו שמתואר בקטע עיבוד רכישות של מוצרים בחיוב חד-פעמי בקצה העורפי.
טיפול בעסקאות שבוטלו
כשמבטלים רכישה של מוצר בחיוב חד-פעמי, מערכת Google Play שולחת הודעה מסוג OneTimeProductNotification עם הערך ONE_TIME_PRODUCT_CANCELED אם הגדרתם קבלת התראות בזמן אמת למפתחים. לדוגמה, זה יכול לקרות אם המשתמש לא משלים את התשלום בתוך מסגרת הזמן הנדרשת, או אם הרכישה מבוטלת על ידי המפתח או לבקשת הלקוח. כשהשרת העורפי מקבל את ההתראה הזו, הוא קורא לשיטה purchases.productsv2.getproductpurchasev2 כדי לקבל את סטטוס הרכישה העדכני, ואז מעדכן את השרת העורפי בהתאם, כולל הרשאות המשתמש.
אם מתבצע החזר כספי על רכישה של מוצר בחיוב חד-פעמי במצב Purchased, תקבלו על כך הודעה גם באמצעות Voided Purchases API.
עיבוד רכישות של מוצרים בחיוב חד-פעמי בשרת העורפי
לא משנה אם זיהיתם רכישה חדשה באמצעות ONE_TIME_PRODUCT_PURCHASED
RTDN
או שקיבלתם עדכון בתוך האפליקציה דרך
PurchasesUpdatedListener או אחזור ידני של
רכישות ב-method onResume() של האפליקציה, אתם צריכים לעבד
את הרכישה החדשה. כדי לשפר את האבטחה, מומלץ לטפל בעיבוד הרכישות בקצה העורפי.
כדי לבצע רכישה חד-פעמית חדשה:
- שולחים שאילתה לנקודת הקצה
purchases.productsv2.getproductpurchasev2כדי לקבל את הסטטוס העדכני של רכישת מוצר בחיוב חד-פעמי. כדי לשלוח קריאה ל-method הזה לרכישה, אתם צריכים את ה-purchaseTokenהמתאים מהאפליקציה או מה-RTDN שלONE_TIME_PRODUCT_PURCHASED. - מתקשרים אל
getPurchaseState()ומוודאים שמצב הרכישה הואPURCHASED. - מאמתים את הרכישה.
- נותנים למשתמש גישה לתוכן. אפשר לזהות את חשבון המשתמש שמשויך לרכישה באמצעות השדה
obfuscatedExternalAccountIdמ-purchases.productsv2.getproductpurchasev2, אם הוגדר שדה כזה באמצעותsetObfuscatedAccountId()כשהרכישה בוצעה.- לרכישות של מוצרים מתכלים, צריך לאשר את מסירת התוכן באמצעות קריאה לשיטה
purchases.products.acknowledge. כדי לוודא שהרכישה לא אושרה בעבר, בודקים את השדהacknowledgementState. - אם המוצר הוא מתכלה, צריך לסמן את הפריט כפריט שנצרך באמצעות הקריאה לשיטה
purchases.products.consume, כדי שהמשתמש יוכל לקנות את הפריט שוב אחרי שהוא צרך אותו. השיטה הזו גם מאשרת את הרכישה.
- לרכישות של מוצרים מתכלים, צריך לאשר את מסירת התוכן באמצעות קריאה לשיטה
בספריית החיובים ב-Play יש גם methods לאישור רכישות ולצריכת רכישות שמאפשרות לכם לעבד רכישות מהאפליקציה, אבל אנחנו ממליצים לכם לעבד רכישות בשרת העורפי (backend) אם יש לכם כזה, כדי להטמיע את התהליך בצורה מאובטחת יותר.