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

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

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

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

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

אחרי קבלת הרכישה החדשה, תוכלו להשתמש בשיטה getPurchaseState או בשיטה purchases.products.get in Play Developer API כדי לבדוק את סטטוס התשלום של הרכישה החדשה.

הודעות בזמן אמת למפתחים

כשמשתמש רוכש או מבטל רכישה של מוצר חד-פעמי, מערכת Google Play שולחת הודעה מסוג OneTimeProductNotification. כדי לעדכן את מצב הרכישה בקצה העורפי, משתמשים באסימון הרכישה שסופק באובייקט OneTimeProductNotification כדי לקרוא לשיטה purchases.products.get. השיטה הזו מספקת את סטטוס הרכישה והצריכה העדכני ביותר על סמך אסימון רכישה.

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

עליכם לטפל ב-RTNDs שקשורים לעסקאות בקצה העורפי המאובטח.

טיפול בעסקאות שהושלמו

כשמשתמש משלים רכישה של מוצר חד-פעמי, מערכת Google Play שולחת הודעת OneTimeProductNotification עם הסוג ONE_TIME_PRODUCT_PURCHASED. כשאתם מקבלים את ה-RTN הזה, אתם צריכים לעבד את הרכישה כפי שמתואר במאמר עיבוד רכישות חד-פעמיות של מוצרים בקצה העורפי.

טיפול בעסקאות שבוטלו

אם הגדרתם לקבל התראות למפתחים בזמן אמת, כשרכישה של מוצר חד-פעמי מבוטלת, Google Play שולחת הודעת OneTimeProductNotification מסוג ONE_TIME_PRODUCT_CANCELED. לדוגמה, מצב כזה יכול לקרות אם המשתמש לא משלים את התשלום במסגרת הזמן הנדרשת, או אם הרכישה בוטלה על ידי המפתח או על ידי הלקוח. כשההודעה הזו תגיע לשרת הקצה העורפי, צריך להפעיל את השיטה purchases.products.get כדי לקבל את סטטוס הרכישה העדכני, ואז לעדכן את הקצה העורפי בהתאם, כולל את הרשאות המשתמשים.

אם מתבצע החזר כספי על רכישה של מוצר חד-פעמי בסטטוס Purchased, תקבלו על כך הודעה גם דרך Voided Purchases API.

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

אם זיהית רכישה חדשה באמצעות התראת RTDN‏ ONE_TIME_PRODUCT_PURCHASED, או אם קיבלת הודעה על כך באפליקציה דרך PurchasesUpdatedListener או אחזור ידני של רכישות בשיטה onResume() של האפליקציה, עליך לעבד את הרכישה החדשה. מומלץ לטפל בעיבוד הרכישות בקצה העורפי כדי לשפר את האבטחה.

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

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

בספריית החיוב של Play יש גם שיטות לאישור רכישות ולשימוש בהן, שמאפשרות לכם לעבד רכישות מהאפליקציה, אבל מומלץ לטפל בעיבוד בקצה העורפי אם יש לכם כזה, כדי להבטיח הטמעה מאובטחת יותר.