מחזור החיים של רכישה חד-פעמית

למוצרים לרכישה חד-פעמית יש מחזור חיים פשוט יותר מאשר למוצרים למינוי, אבל עדיין יש כמה מצבים ואירועי מעבר שהקצה העורפי צריך לטפל בהם בצורה נכונה.

מצבים במחזור החיים ואירועי מעבר של רכישות חד-פעמיות.
איור 1 מצבים במחזור החיים ואירועי מעבר לרכישות חד-פעמיות.

רכישות חדשות של מוצרים בחיוב חד-פעמי

אחרי שהמשתמש משלים את רצף פעולות החיוב, האפליקציה יכולה לראות מידע על הרכישה החדשה באחת מהדרכים הבאות:

אחרי שמקבלים את הרכישה החדשה, משתמשים בשיטה 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() של האפליקציה, אתם צריכים לעבד את הרכישה החדשה. כדי לשפר את האבטחה, מומלץ לטפל בעיבוד הרכישות בקצה העורפי.

כדי לבצע רכישה חד-פעמית חדשה:

  1. שולחים שאילתה לנקודת הקצה purchases.productsv2.getproductpurchasev2 כדי לקבל את הסטטוס העדכני של רכישת מוצר בחיוב חד-פעמי. כדי לשלוח קריאה ל-method הזה לרכישה, אתם צריכים את ה-purchaseToken המתאים מהאפליקציה או מה-RTDN של ONE_TIME_PRODUCT_PURCHASED.
  2. מתקשרים אל getPurchaseState() ומוודאים שמצב הרכישה הוא PURCHASED.
  3. מאמתים את הרכישה.
  4. נותנים למשתמש גישה לתוכן. אפשר לזהות את חשבון המשתמש שמשויך לרכישה באמצעות השדה obfuscatedExternalAccountId מ-purchases.productsv2.getproductpurchasev2, אם הוגדר שדה כזה באמצעות setObfuscatedAccountId() כשהרכישה בוצעה.
    1. לרכישות של מוצרים מתכלים, צריך לאשר את מסירת התוכן באמצעות קריאה לשיטה purchases.products.acknowledge. כדי לוודא שהרכישה לא אושרה בעבר, בודקים את השדה acknowledgementState.
    2. אם המוצר הוא מתכלה, צריך לסמן את הפריט כפריט שנצרך באמצעות הקריאה לשיטה purchases.products.consume, כדי שהמשתמש יוכל לקנות את הפריט שוב אחרי שהוא צרך אותו. השיטה הזו גם מאשרת את הרכישה.

בספריית החיובים ב-Play יש גם methods לאישור רכישות ולצריכת רכישות שמאפשרות לכם לעבד רכישות מהאפליקציה, אבל אנחנו ממליצים לכם לעבד רכישות בשרת העורפי (backend) אם יש לכם כזה, כדי להטמיע את התהליך בצורה מאובטחת יותר.