נתוני הגרסה של ספריית החיובים ב-Google Play

המסמך הזה מכיל את נתוני הגרסה של ספריית החיוב ב-Google Play.

גרסה 7.1.1 של ספריית החיובים ב-Google Play (03.10.2024)

הגרסה 7.1.1 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

תיקוני באגים

גרסה 7.1.0 של ספריית החיובים ב-Google Play (19.09.2024)

הגרסה 7.1.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

  • שיפור הבטיחות של השרשור שקשור לניהול ולסטטוס החיבור.
  • הוספנו שינויים חלקיים לצורך בדיקה של קודי התגובה BillingResult, שיושקו במלואם בספריית החיובים ב-Play בגרסה 7.1.1. כדי לבדוק את השילוב באמצעות התכונה הזו, תצטרכו לשדרג ל-Play Billing Library בגרסה 7.1.1. יש באג שמשפיע רק על אפליקציות שבהן הבדיקה של שינויי חיוב מופעלת, והוא לא משפיע על שימוש רגיל. למידע נוסף, ראו בדיקת קודי התגובה BillingResult.

גרסה 7.0.0 של ספריית החיובים ב-Google Play (14.05.2024)

הגרסה 7.0.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

גרסה 6.2.1 של ספריית החיובים ב-Google Play (16.04.2024)

הגרסה 6.2.1 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

גרסה 6.2.0 של ספריית החיובים ב-Google Play (06.03.2024)

הגרסה 6.2.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

גרסה 6.1.0 של ספריית החיובים ב-Google Play (14.11.2023)

הגרסה 6.1.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

גרסה 6.0.1 של ספריית החיובים ב-Google Play (22.06.2023)

הגרסה 6.0.1 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

מעדכנים את ספריית החיוב ב-Play כך שתהיה תואמת ל-Android 14.

גרסה 6.0 של ספריית החיובים ב-Google Play (10.05.2023)

הגרסה 6.0.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

  • נוספה משתנה מונה חדש מסוג ReplacementMode כדי להחליף את ProrationMode.

    חשוב לדעת ש-ProrationMode עדיין זמין מסיבות של תאימות לאחור.

  • הסרת מזהה ההזמנה של רכישות PENDING.

    בעבר, מזהה ההזמנה נוצר תמיד, גם אם הרכישה הייתה בהמתנה. החל מגרסה 6.0.0, לא נוצר מזהה הזמנה לרכישות בהמתנה. מזהה ההזמנה של הרכישות האלה יאוכלס אחרי שהרכישה תועבר לסטטוס PURCHASED.

  • הוסרו השיטות queryPurchases ו-launchPriceConfirmationFlow.

    השיטות queryPurchases ו-launchPriceConfirmationFlow, שסומנו בעבר כפריט שהוצא משימוש, הוסרו עכשיו מ-Play Billing Library 6.0.0. מפתחים צריכים להשתמש ב-queryPurchasesAsync במקום ב-queryPurchases. אפשרויות חלופיות ל-launchPriceConfirmationFlow מפורטות במאמר שינויי מחיר.

  • נוסף קוד תגובה חדש לשגיאה ברשת.

    קוד חדש של תגובה לשגיאת רשת, NETWORK_ERROR, נוסף החל מגרסה 6.0.0 של PBL. הקוד הזה מוחזר כשמתרחשת שגיאה בגלל בעיה בחיבור לרשת. השגיאות האלה שקשורות לחיבור לרשת דווחו בעבר כ-SERVICE_UNAVAILABLE.

  • עודכנו SERVICE_UNAVAILABLE ו-SERVICE_TIMEOUT.

    החל מגרסה 6.0.0 של PBL, שגיאות שנובעות מחריגה מזמן הקצוב לעיבוד יחזרו כ-SERVICE_UNAVAILABLE במקום כ-SERVICE_TIMEOUT הנוכחי.

    ההתנהגות לא משתנה בגרסאות קודמות של PBL.

  • הוסר SERVICE_TIMEOUT.

    החל מגרסה 6.0.0 של PBL, הערך SERVICE_TIMEOUT לא יוחזר יותר. גרסאות קודמות של PBL ימשיכו להחזיר את הקוד הזה.

  • נוספה רישום ביומן.

    במהדורה 6 של Play Billing Library יש רישום ביומן נוסף, שמספק תובנות לגבי השימוש ב-API (כמו הצלחה וכישלון) ובעיות בחיבור לשירות. המידע הזה ישמש לשיפור הביצועים של Play Billing Library ולתמיכה טובה יותר בטעויות.

גרסה 5.2.1 של ספריית החיובים ב-Google Play (22.06.2023)

הגרסה 5.2.1 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

מעדכנים את ספריית החיוב ב-Play כך שתהיה תואמת ל-Android 14.

גרסה 5.2 של ספריית החיובים ב-Google Play (06.04.2023)

הגרסה 5.2.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

גרסה 5.1 של ספריית החיובים ב-Google Play (31 באוקטובר 2022)

הגרסה 5.1.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

הגרסה הזו כוללת את השינויים הבאים.

סיכום השינויים

גרסה 5.0 של ספריית החיובים ב-Google Play (11 במאי 2022)

הגרסה 5.0.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

הגרסה הזו כוללת את השינויים הבאים.

סיכום השינויים

  • השקנו מודל חדש למינויים, כולל ישויות חדשות שמאפשרות ליצור כמה מבצעים למוצר מינוי אחד. מידע נוסף זמין במדריך להעברת נתונים.
  • הוספנו את BillingClient.queryProductDetailsAsync() כדי להחליף את BillingClient.querySkuDetailsAsync().
  • הוספנו את השיטה setIsOfferPersonalized() לדרישות הגילוי הנאות בנושא תמחור מותאם אישית באיחוד האירופי. מידע נוסף על השימוש בשיטה הזו זמין במאמר ציון מחיר מותאם אישית.
  • הוסר queryPurchases(), שהוצא משימוש בעבר והוחלף ב-queryPurchasesAsync‎ שהוצג בספריית החיובים ב-Google Play בגרסה 4.0.0.
  • הממשק launchPriceChangeFlow הוצא משימוש ויוסר בגרסה עתידית. מידע נוסף על חלופות זמין במאמר הפעלת תהליך אישור של שינוי מחיר.
  • הוסר המאפיין setVrPurchaseFlow(), ששימש בעבר ליצירת מופע של תהליך רכישה. בגרסאות קודמות, השיטה הזו הפניתה את המשתמש להשלים את הרכישה במכשיר Android שלו. אחרי שתסירו את השיטה הזו, המשתמשים ישלימו את הרכישה דרך תהליך הרכישה הרגיל.

גרסה 4.1 של ספריית החיובים ב-Google Play (23 בפברואר 2022)

הגרסה 4.1.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

הגרסה הזו כוללת את השינויים הבאים.

סיכום השינויים

גרסה 4.0 של ספריית החיובים ב-Google Play (18 במאי 2021)

הגרסה 4.0.0 של ספריית החיובים ב-Google Play והתוספים ל-Kotlin זמינות עכשיו.

סיכום השינויים

גרסה 3.0.3 של ספריית החיובים ב-Google Play (12 במרץ 2021)

הגרסה 3.0.3 של ספריית החיובים ב-Google Play, התוסף ל-Kotlin והפלאגין ל-Unity זמינות עכשיו.

תיקוני באגים ב-Java וב-Kotlin

  • תיקון דליפת זיכרון כשמתבצעת קריאה ל-endConnection().
  • תיקון בעיה כשאפליקציות שמשתמשות במצב ההפעלה של משימה יחידה משתמשות בספריית החיובים ב-Google Play. קריאה חוזרת (callback) של onPurchasesUpdated() תופעל כשהמשתמשים ימשיכו להשתמש באפליקציה ממסוף Android, ותיבת הדו-שיח בנושא חיוב הייתה גלויה לפני ההשעיה.

תיקוני באגים ב-Unity

  • עדכון לגרסה 3.0.3 של Java כדי לתקן דליפת זיכרון ולפתור בעיה שמונעת רכישות כשממשיכים להפעיל אפליקציה ממרכז האפליקציות של Android והתיבת הדו-שיח של החיוב הייתה גלויה לפני ההשעיה.

גרסה 3.0.2 של ספריית החיובים ב-Google Play (24 בנובמבר 2020)

הגרסה 3.0.2 של ספריית החיובים ב-Google Play והתוסף ל-Kotlin זמינות עכשיו.

תיקוני באגים

  • תוקן באג בתוסף Kotlin שבו פונקציית ה-coroutine נכשלת עם השגיאה 'Already resumed'.
  • תוקנו הפניות לא פתורות כשמשתמשים בהרחבה של Kotlin עם ספריית kotlinx.coroutines בגרסה 1.4 ואילך.

גרסה 3.0.1 של ספריית החיובים ב-Google Play (30 בספטמבר 2020)

הגרסה 3.0.1 של ספריית החיובים ב-Google Play והתוסף ל-Kotlin זמינות עכשיו.

תיקוני באגים

  • תוקנה באג שגרם לכך שאם האפליקציה הופסקה ושוחזרה במהלך תהליך החיוב, יכול להיות שלא תתבצע קריאה ל-PurchasesUpdatedListener עם תוצאת הרכישה.

גרסה 3.0 של ספריית החיובים ב-Google Play (8 ביוני 2020)

הגרסה 3.0.0 של ספריית החיובים ב-Google Play, התוסף ל-Kotlin והפלאגין ל-Unity זמינות עכשיו.

סיכום השינויים

  • הסרת התמיכה במק"טים של פרסים.
  • הפרמטרים ChildDirected ו-UnderAgeOfConsent הוסרו.
  • הוסרו שיטות של עומסי עבודה למפתחים שהוצאו משימוש.
  • הוסרו השיטות הוצאו משימוש BillingFlowParams.setAccountId() ו-BillingFlowParams.setDeveloperId().
  • הוסרו השיטות הוצאו משימוש BillingFlowParams.setOldSkus(String oldSku) ו-BillingFlowParams.addOldSku(String oldSku).
  • נוספו הערות לגבי יכולת השימוש באפס.

תיקוני באגים

  • הפונקציה SkuDetails.getIntroductoryPriceCycles() מחזירה עכשיו את הערך int במקום String.
  • תוקן באג שבו תהליך החיוב התייחס לפרמטרים נוספים גם אם לא הוגדרו פרמטרים נוספים.

גרסה 2.2.1 של ספריית החיובים ב-Google Play (20.05.2020)

גרסה 2.2.1 של ספריית החיובים ב-Google Play זמינה עכשיו.

תיקוני באגים

  • עדכנו את גרסת ברירת המחדל של ספריית החיוב ב-Google Play ל-Java, שבה תלוי התוסף ל-Kotlin.

השקת גרסה 2.2.0 של ספריית החיובים ב-Google Play ותמיכה ב-Unity (23 במרץ 2020)

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

Google Play Billing Billing Library 2 for Unity

בנוסף לגרסאות הנוכחיות של Java ו-Kotlin של ספריית החיובים ב-Google Play 2, השקנו גרסה של הספרייה לשימוש ב-Unity. מפתחי משחקים שמשתמשים ב-Unity In-App Purchase API יכולים לשדרג עכשיו כדי ליהנות מכל התכונות של Google Play Billing Library 2, וכדי להקל על השדרוגים הבאים לגרסאות עתידיות של Google Play Billing Library.

למידע נוסף, קראו את המאמר שימוש בחיוב ב-Google Play עם Unity.

סיכום השינויים

גרסה 2.1.0 של ספריית החיובים ב-Google Play וגרסה 2.1.0 של התוסף ל-Kotlin (10 בדצמבר 2019)

גרסה 2.1.0 של ספריית החיובים ב-Google Play והתוסף החדש ל-Kotlin זמינים עכשיו. התוסף של Play Billing Library ל-Kotlin מספק חלופות רגילות ל-API לשימוש ב-Kotlin, עם תכונות מתקדמות יותר של null-safety ו-coroutines. דוגמאות לקוד זמינות במאמר שימוש בספריית החיובים ב-Google Play.

הגרסה הזו כוללת את השינויים הבאים.

סיכום השינויים

  • ב-BillingFlowParams, הוחלפה המאפיין setOldSku(String oldSku) במאפיין setOldSku(String oldSku, String purchaseToken) כדי להבהיר מתי אותו מק"ט שייך לכמה חשבונות במכשיר.

גרסה 2.0.3 של ספריית החיובים ב-Google Play (5 באוגוסט 2019)

גרסה 2.0.3 של ספריית החיובים ב-Google Play זמינה עכשיו.

תיקוני באגים

  • תוקן באג שבו querySkuDetailsAsync() נכשל לפעמים עם הקוד DEVELOPER_ERROR במקום להחזיר תוצאה מוצלחת.

גרסה 2.0.2 של ספריית החיובים ב-Google Play (8 ביולי 2019)

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

גרסה 2.0.1 של ספריית החיובים ב-Google Play (6 ביוני 2019)

גרסה 2.0.1 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

תיקוני באגים

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

גרסה 2.0 של ספריית החיובים ב-Google Play (7 במאי 2019)

גרסה 2.0 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

יש לאשר רכישות תוך שלושה ימים

ב-Google Play יש תמיכה ברכישת מוצרים מתוך האפליקציה (In-app) או מחוץ לאפליקציה (Out-of-app). כדי שמערכת Google Play תוכל להבטיח חוויית רכישה עקבית, ללא קשר למקום שבו המשתמש רוכש את המוצר, עליכם לאשר את כל הרכישות שהתקבלו דרך ספריית החיובים ב-Google Play בהקדם האפשרי אחרי שמעניקים למשתמש הרשאה. אם לא תאשרו רכישה תוך שלושה ימים, המשתמש יקבל החזר כספי באופן אוטומטי והרכישה ב-Google Play תבוטל. בעסקאות בהמתנה (חדשות בגרסה 2.0), חלון הזמן של שלושת הימים מתחיל כשהרכישה עוברת למצב PURCHASED, והוא לא רלוונטי כשהרכישה נמצאת במצב PENDING.

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

האובייקט Purchase כולל עכשיו את השיטה isAcknowledged() שמציינת אם הרכישה אושרה. בנוסף, Google Play Developer API כולל ערכי בווליאני של אישור גם עבור Purchases.products וגם עבור Purchases.subscriptions. לפני שמאשרים רכישה, חשוב להשתמש בשיטות האלה כדי לקבוע אם הרכישה כבר אושרה.

אפשר לאשר רכישה באחת מהדרכים הבאות:

  • במוצרים לשימוש חד-פעמי, משתמשים ב-consumeAsync() שנמצא ב-API של הלקוח.
  • למוצרים שלא נצרכו, משתמשים ב-acknowledgePurchase() שנמצא ב-API של הלקוח.
  • שיטת acknowledge() חדשה זמינה גם ב-Server API.

BillingFlowParams.setSku() הוסר

השיטה BillingFlowParams#setSku(), שהוצאה משימוש בעבר, הוסרה מהגרסה הזו. לפני שמייצרים מוצרים בתהליך הרכישה, עכשיו צריך להפעיל את BillingClient.querySkuDetailsAsync() ולהעביר את האובייקט SkuDetails שנוצר אל BillingFlowParams.Builder.setSkuDetails().

דוגמאות לקוד זמינות במאמר שימוש בספריית החיובים ב-Google Play.

יש תמיכה ב-payload של מפתחים

בגרסה 2.0 של ספריית החיוב של Google Play נוספה תמיכה במטען עומס למפתח – מחרוזות שרירותיות שאפשר לצרף לרכישות. אפשר לצרף פרמטר של עומס עבודה למפתח לרכישה, אבל רק אחרי שהרכישה אושרה או נצרכה. המצב הזה שונה מטען נתונים של מפתח ב-AIDL, שבו אפשר לציין את טען הנתונים בזמן ההפעלה של תהליך הרכישה. עכשיו אפשר להתחיל רכישות מחוץ לאפליקציה, ולכן השינוי הזה מבטיח שתמיד תהיה לכם אפשרות להוסיף עומס שימושי לרכישות.

כדי לגשת לעומס המועמס בספרייה החדשה, אובייקטים מסוג Purchase כוללים עכשיו את השיטה getDeveloperPayload().

מבצעים עקביים

כשמציעים מק"ט בהנחה, Google Play מחזיר עכשיו את המחיר המקורי של המק"ט כדי שתוכלו להראות למשתמשים שהם מקבלים הנחה.

SkuDetails מכיל שתי שיטות חדשות לאחזור המחיר המקורי של המק"ט:

  • getOriginalPriceAmountMicros() – מחזירה את המחיר המקורי ללא הפורמט של המק"ט לפני ההנחה.
  • getOriginalPrice() – הפונקציה מחזירה את המחיר המקורי עם עיצוב מטבע נוסף.

עסקאות ממתינות

בגרסה 2.0 של ספריית החיוב ב-Google Play, חובה לתמוך ברכישות שבהן נדרשת פעולה נוספת לפני הענקת ההרשאה. לדוגמה, משתמש יכול לבחור לרכוש את המוצר שלכם מתוך האפליקציה בחנות פיזית באמצעות כסף מזומן. המשמעות היא שהעסקה הושלמה מחוץ לאפליקציה. בתרחיש כזה, צריך להעניק את ההרשאה רק אחרי שהמשתמש השלים את העסקה.

כדי להפעיל רכישות בהמתנה, צריך להפעיל את האפליקציה ולקרוא ל-enablePendingPurchases().

משתמשים ב-Purchase.getPurchaseState() כדי לקבוע אם סטטוס הרכישה הוא PURCHASED או PENDING. חשוב לזכור שצריך להקצות הרשאה רק כשהסטטוס הוא PURCHASED. כדי לבדוק אם יש עדכוני סטטוס של Purchase:

  1. כשמפעילים את האפליקציה, צריך להפעיל את הפונקציה BillingClient.queryPurchases() כדי לאחזר את רשימת המוצרים שעדיין לא נוצלו שמשויכים למשתמש.
  2. קוראים ל-Purchase.getPurchaseState() בכל אובייקט Purchase מוחזר.
  3. מטמיעים את השיטה onPurchasesUpdated() כדי להגיב לשינויים באובייקטים מסוג Purchase.

בנוסף, ממשק API של Google Play למפתחים כולל מצב PENDING עבור Purchases.products. אין תמיכה בעסקאות בהמתנה למינוי.

בגרסה הזו הוספנו גם סוג חדש של התראות למפתחים בזמן אמת, OneTimeProductNotification. סוג ההתראה הזה מכיל הודעה אחת שהערך שלה הוא ONE_TIME_PRODUCT_PURCHASED או ONE_TIME_PRODUCT_CANCELED. סוג ההתראה הזה נשלח רק לגבי רכישות שמשויכות לאמצעי תשלום עם אישור ותשלום מאוחרים, כמו תשלום במזומן.

כשמאשרים רכישות בהמתנה, חשוב לאשר רק כשסטטוס הרכישה הוא PURCHASED ולא PENDING.

שינויים ב-API

גרסה 2.0 של ספריית החיובים ב-Google Play כוללת כמה שינויים ב-API שנועדו לתמוך בתכונות חדשות ולהבהיר את הפונקציונליות הקיימת.

consumeAsync

הפונקציה consumeAsync() מקבלת עכשיו אובייקט ConsumeParams במקום purchaseToken. ConsumeParams מכיל את purchaseToken וגם מטען ייעודי (payload) אופציונלי למפתחים.

הגרסה הקודמת של consumeAsync() הוסרה במהדורה הזו.

queryPurchaseHistoryAsync

כדי למזער את הבלבול, הפונקציה queryPurchaseHistoryAsync() מחזירה עכשיו אובייקט PurchaseHistoryRecord במקום אובייקט Purchase. אובייקט PurchaseHistoryRecord זהה לאובייקט Purchase, מלבד העובדה שהוא משקף רק את הערכים שמוחזרים על ידי queryPurchaseHistoryAsync() ולא מכיל את השדות autoRenewing,‏ orderId ו-packageName. שימו לב שלא השתנה דבר בנתונים שמוחזרים – queryPurchaseHistoryAsync() מחזיר את אותם נתונים כמו קודם.

ערכי ההחזרה של BillingResult

ממשקי API שהחזירו בעבר ערך שלם מסוג BillingResponse מחזירים עכשיו אובייקט מסוג BillingResult. המשתנה BillingResult מכיל את המספר השלם BillingResponse וגם מחרוזת ניפוי באגים שאפשר להשתמש בה כדי לאבחן שגיאות. מחרוזת ניפוי הבאגים משתמשת ב-locale‏ en-US והיא לא מיועדת להצגה למשתמשי קצה.

תיקוני באגים

גרסה 1.2.2 של ספריית החיובים ב-Google Play (7 במרץ 2019)

גרסה 1.2.2 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

תיקוני באגים

  • תוקנה בעיה בחלוקת השיחות לשרשורים שהופיעה בגרסה 1.2.1. קריאות ברקע לא חוסמות יותר את ה-thread הראשי.

שינויים אחרים

  • עדיין מומלץ להשתמש בשרשור הראשי, אבל עכשיו אפשר ליצור מופע של ספריית החיוב ב-Google Play משרשור רקע.
  • תהליך היצירה הועבר באופן מלא לשרשור הרקע כדי לצמצם את הסיכוי ליצירת שגיאות ANR.

גרסת 1.2.1 של ספריית החיוב ב-Play (04 במרץ 2019)

גרסה 1.2.1 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

שינויים עיקריים

שינויים אחרים

  • הוספנו קונסטרוקטורים ציבוריים ל-PurchasesResult ול-SkuDetailsResult כדי להקל על הבדיקות.
  • אובייקטים מסוג SkuDetails יכולים להשתמש בשיטה חדשה, getOriginalJson().
  • כל הקריאות לשירותי AIDL מטופלות עכשיו על ידי שרשראות ברקע.

תיקוני באגים

  • מודעות למעקב אחרי קריאות חזרה (callbacks) עם ערך null לא מועברות יותר לממשקי API ציבוריים.

גרסה 1.2 של ספריית החיוב ב-Google Play (18 באוקטובר 2018)

גרסה 1.2 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

סיכום השינויים

  • ספריית החיובים ב-Google Play זמינה עכשיו ברישיון במסגרת הסכם הרישיון של ערכת הפיתוח לתוכנות ל-Android.
  • הוספנו את ה-API ‏launchPriceChangeConfirmationFlow, שמבקש מהמשתמשים לבדוק שינוי בהמתנה במחיר המינוי.
  • הוספנו תמיכה במצב חדש של חלוקת העלויות, DEFERRED, כשמשדרגים או משדרגים לאחור את המינוי של משתמש.
  • בכיתה BillingFlowParams, מחליפים את setSku() ב-setSkuDetails().
  • תיקוני באגים קלים ואופטימיזציה של קוד.

אישור שינוי המחיר

עכשיו אפשר לשנות את המחיר של מינוי ב-Google Play Console ולבקש מהמשתמשים לבדוק את המחיר החדש ולאשר אותו כשהם נכנסים לאפליקציה.

כדי להשתמש ב-API הזה, יוצרים אובייקט PriceChangeFlowParams באמצעות skuDetails של מוצר המינוי, ואז קוראים ל-launchPriceChangeConfirmationFlow(). מטמיעים את PriceChangeConfirmationListener כדי לטפל בתוצאה בסיום תהליך האישור של שינוי המחיר, כפי שמתואר בקטע הקוד הבא:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

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

מצב חדש לחלוקת העלויות

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

שיטה חדשה להגדרת פרטי מק"ט

בכיתה BillingFlowParams, השיטה setSku() הוצאה משימוש. השינוי הזה נועד לבצע אופטימיזציה של תהליך החיוב ב-Google Play.

כשאתם יוצרים מופע חדש של BillingFlowParams בלקוח לחיוב בתוך האפליקציה, מומלץ לעבוד ישירות עם אובייקט ה-JSON באמצעות setSkuDetails(), כפי שמתואר בקטע הקוד הבא:

השיטה setSku() הוצאה משימוש בכיתה BillingFlowParams Builder. במקום זאת, צריך להשתמש בשיטה setSkuDetails(), כפי שמתואר בקטע הקוד הבא. האובייקט שמוענק לאובייקט setSkuDetails() מגיע מהשיטה querySkuDetailsAsync().

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

גרסת 1.1 של ספריית החיוב ב-Play (07 במאי 2018)

גרסה 1.1 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

סיכום השינויים

  • נוספה תמיכה באפשרות לציין מצב חלוקת התשלומים ב-BillingFlowParams כשמשדרגים או משדרגים לאחור מינוי קיים.
  • הדגל הבוליאני replaceSkusProration ב-BillingFlowParams כבר לא נתמך. במקום זאת, אתם צריכים להשתמש ב-replaceSkusProrationMode.
  • launchBillingFlow() הקוד הזה מפעיל קריאה חוזרת במקרה של תשובות שנכשלו.

שינויים בהתנהגות

גרסה 1.1 של ספריית החיובים ב-Google Play כוללת את השינויים הבאים בהתנהגות.

מפתחים יכולים להגדיר את replaceSkusProrationMode בכיתה BillingFlowParams

ProrationMode מספק פרטים נוספים על סוג הקצאת החלק היחסי (proration) כשמשדרגים או משדרגים לאחור את המינוי של משתמש.

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

בשלב זה, Google Play תומך במצבי הקצאת הזמן הבאים:

IMMEDIATE_WITH_TIME_PRORATION ההחלפה תיכנס לתוקף באופן מיידי, וזמן התפוגה החדש יחושב לפי היחס של הזמן שנותר בתוקף, והמשתמש יזוכה או יחויב בהתאם. זו התנהגות ברירת המחדל הנוכחית.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE ההחלפה תיכנס לתוקף באופן מיידי, ומחזור החיובים לא ישתנה. תחויבו במחיר של התקופה שנותר.

הערה: האפשרות הזו זמינה רק לשדרוג של מינוי.

IMMEDIATE_WITHOUT_PRORATION ההחלפה תיכנס לתוקף באופן מיידי, והמחיר החדש יחויב בפעם הבאה שהתשלום יחוזר. מחזור החיובים לא ישתנה.

אין יותר תמיכה ב-replaceSkusProration ב-class‏ BillingFlowParams

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

launchBillingFlow() מפעיל עכשיו קריאה חוזרת במקרה של תשובות שנכשלו

ספריית החיוב תמיד תפעיל את הפונקציה החוזרת (callback) PurhcasesUpdatedListener ותחזיר BillingResponse באופן אסינכרוני. גם הערך המוחזר הסינכרוני של BillingResponse נשמר.

תיקוני באגים

  • יציאה מוקדמת בצורה תקינה בשיטות אסינכרניות כשהשירות מנותק.
  • Builder אובייקטים של פרמטרים כבר לא משנים אובייקטים שנוצרו.
  • בעיה 68087141: launchBillingFlow() מפעילה עכשיו שיחה חוזרת במקרה של תגובות שנכשלו.

השקת גרסה 1.0 של ספריית החיובים ב-Google Play (19 בספטמבר 2017, הודעה)

גרסה 1.0 של ספריית החיובים ב-Google Play זמינה עכשיו. הגרסה הזו כוללת את השינויים הבאים.

שינויים חשובים

  • הרשאת חיוב מוטמעת בתוך המניפסט של הספרייה. כבר אין צורך להוסיף את ההרשאה com.android.vending.BILLING בתוך המניפסט של Android.
  • הכלי החדש ליצירת נכסים נוסף לכיתה BillingClient.Builder.
  • הוספנו תבנית build לכיתה SkuDetailsParams, לשימוש בשיטות לשליחת שאילתות לגבי מק"טים.
  • כמה שיטות API עודכנו כדי לשמור על עקביות (אותם שמות ואותן סדרי ארגונו של ארגומנטים להחזרה).

שינויים בהתנהגות

גרסה 1.0 של ספריית החיובים ב-Google Play מכילה את השינויים הבאים בהתנהגות.

הכיתה BillingClient.Builder

BillingClient.Builder הוא מאותחל עכשיו באמצעות התבנית newBuilder:

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

השיטה launchBillingFlow נקראת עכשיו באמצעות הכיתה BillingFlowParams

כדי להתחיל את תהליך החיוב על רכישה או מינוי, ה-method‏ launchBillingFlow() מקבל מכונה של BillingFlowParams שמבוצעת בה איניציאליזציה של פרמטרים ספציפיים לבקשה:

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

דרך חדשה לשליחת שאילתות לגבי מוצרים זמינים

הארגומנטים של השיטות queryPurchaseHistoryAsync() ו-querySkuDetailsAsync() עברו אריזה בדפוס Builder:

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

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

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

הסדר של הפרמטרים השתנה בשיטה onConsumeResponse()

סדר הארגומנטים של onConsumeResponse מממשק ConsumeResponseListener השתנה כדי לשמור על עקביות ב-API שלנו:

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

אובייקט PurchaseResult לא ארוז

PurchaseResult הוסר מהאריזה כדי לשמור על עקביות בממשקי ה-API שלנו:

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

תיקוני באגים

גרסה 1 של תצוגה מקדימה למפתחים (12 ביוני 2017, הכרזה)

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

הספרייה כוללת כמה תכונות וכיתות שימושיות שיעזרו לכם לשלב את האפליקציות ל-Android עם Google Play Billing API. הספרייה מספקת גם שכבת הפשטה מעל השירות של Android Interface Definition Language‏ (AIDL), שמאפשרת למפתחים להגדיר בקלות את הממשק בין האפליקציה לבין Google Play Billing API.