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

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

גרסה 8.1.0 של ספריית החיובים ב-Google Play ‏ (06.11.2025)

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

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

  • מינויים מושעים

    נוסף פרמטר חדש לשיטה BillingClient.queryPurchasesAsync() כדי לכלול מינויים מושעים כשמבצעים שאילתה לגבי מינויים. מינויים מושעים עדיין משויכים למשתמש, אבל הם לא פעילים. הסיבה לכך היא שהמשתמש השהה את המינוי או שאמצעי התשלום לחידוש המינוי נדחה.

    אובייקט Purchase שמוחזר ב-listener יחזיר isSuspended() = true לכל המינויים שהושעו. במקרה כזה, לא כדאי להעניק גישה למינוי שנרכש, אלא להפנות את המשתמש אל מרכז המינויים, שבו הוא יכול לנהל את אמצעי התשלום או להשהות את המינוי כדי להפעיל אותו מחדש.

  • עדכונים במינויים:

    • לאובייקט BillingFlowParams.ProductDetailsParams יש עכשיו את השיטה setSubscriptionProductReplacementParams() שבה אפשר לציין פרטי החלפה ברמת המוצר.

    • לאובייקט SubscriptionProductReplacementParams יש שתי שיטות setter:

      • setOldProductId: המוצר הישן שצריך להחליף אותו במוצר בProductDetails הנוכחי.
      • setReplacementMode: זהו מצב ההחלפה ברמת הפריט. הערכים של הפרמטרים זהים לאלה של SubscriptionUpdateParams, אבל המיפוי של הערכים עודכן. הוספנו מצב החלפה חדש KEEP_EXISTING שמאפשר לשמור על תזמון התשלומים הקיים ללא שינוי עבור פריט מסוים.
    • השימוש ב-SubscriptionUpdateParams setSubscriptionReplacementMode יופסק. במקומה צריך להשתמש במדיניות SubscriptionProductReplacementParams.setReplacementMode.

  • העדכון בוצע בתאריך minSdkVersion עד 23.

  • הפעלנו ממשקי API להזמנה מראש של מוצרים בחיוב חד-פעמי

    אפשר עכשיו להשתמש ב-ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() API שמקבל את פרטי ההזמנה מראש.

  • ספריית החיובים ב-Google Play תומכת עכשיו ב-Kotlin בגרסה 2.2.0.

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

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

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

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

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

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

  • שיפרנו את השיטה queryProductDetailsAsync().

    לפני PBL 8.0.0, השיטה queryProductDetailsAsync() לא החזירה מוצרים שלא ניתן היה לאחזר. יכול להיות שהסיבה לכך היא שהמוצר לא נמצא או שאין מבצעים שזמינים למשתמש. בגרסה PBL 8.0.0, מוצרים שלא נשלפו מוחזרים עם קוד סטטוס חדש ברמת המוצר, שמספק מידע על מוצרים שלא נשלפו. שימו לב שבוצע שינוי בחתימה של ProductDetailsResponseListener.onProductDetailsResponse(), ולכן צריך לבצע שינויים באפליקציה. מידע נוסף זמין במאמר בנושא עיבוד התוצאה.

  • חיבור מחדש אוטומטי לשירות.

    הפרמטר החדש BillingClient.Builder.enableAutoServiceReconnection() builder מאפשר למפתחים להפעיל חיבור מחדש אוטומטי לשירות, וכך לפשט את ניהול החיבורים. הפרמטר מטפל בחיבורים מחדש לשירות החיוב של Play באופן אוטומטי, ומבטל את הצורך להתקשר אל startConnection() באופן ידני במקרה של ניתוק מהשירות. מידע נוסף זמין במאמר בנושא חיבור מחדש באופן אוטומטי.

  • קודי תגובה משניים לשיטה launchBillingFlow().

    התשובה BillingResult שמוחזרת מ-launchBillingFlow() תכלול עכשיו שדה של קוד תגובה משני. השדה הזה יאוכלס רק במקרים מסוימים כדי לספק סיבה ספציפית יותר לכישלון. ב-PBL 8.0.0, קוד המשנה PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS מוחזר במקרה שבו הסכום בחשבון של המשתמש נמוך ממחיר הפריט שהוא מנסה לרכוש.

  • הוסרה השיטה queryPurchaseHistory().

    השיטה queryPurchaseHistory() שסומנה בעבר כשיטה שהוצאה משימוש הוסרה עכשיו. במאמר שאילתות לגבי היסטוריית הרכישות מפורט אילו ממשקי API חלופיים אפשר להשתמש במקום זאת.

  • הוסרה השיטה querySkuDetailsAsync().

    השיטה querySkuDetailsAsync(), שסומנה בעבר כפריט שהוצא משימוש, הוסרה עכשיו. במקומה צריך להשתמש ב-queryProductDetailsAsync.

  • הוסרה השיטה BillingClient.Builder.enablePendingPurchases().

    השיטה enablePendingPurchases() ללא פרמטרים, שסומנה בעבר כפריט שהוצא משימוש, הוסרה עכשיו. במקומה צריך להשתמש במדיניות enablePendingPurchases(PendingPurchaseParams params). הערה: הפרמטר enablePendingPurchases() שהוצא משימוש זהה מבחינה פונקציונלית לפרמטר enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).

  • הוסרה שיטת queryPurchasesAsync() שעברה עומס יתר ומקבלת skuType.

    השיטה queryPurchasesAsync(String skuType, PurchasesResponseListener listener) שסומנה בעבר כשיטה שהוצאה משימוש הוסרה עכשיו. אפשרות אחרת היא להשתמש ב-queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener).

גרסה 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][billing-result] של קודי תגובה, שזמינים באופן מלא בספריית החיובים ב-Play בגרסה 7.1.1. כדי לבדוק את השילוב באמצעות התכונה הזו, צריך לשדרג לגרסה 7.1.1 של ספריית החיובים ב-Play. קיים באג שישפיע רק על אפליקציות שבהן [הופעלה בדיקה של שינויים בחיוב][enable-billing-overrides-testing] ולא ישפיע על שימוש רגיל. מידע נוסף זמין במאמר בנושא בדיקת קודי התגובה של BillingResult. ‫[billing-result]: /reference/com/android/billingclient/api/BillingResult ‫[enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing

גרסה 7.0.0 של ספריית החיובים ב-Google Play (14 במאי 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 בנובמבר 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 זמינים עכשיו.

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

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

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

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

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

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

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

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

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

  • עדכנו את SERVICE_UNAVAILABLE ואת SERVICE_TIMEOUT.

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

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

  • הוסרה SERVICE_TIMEOUT.

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

  • נוספה רישום פעולות נוסף.

    גרסה 6 של ספריית החיובים ב-Play כוללת רישום נוסף ביומן, שמספק תובנות לגבי השימוש ב-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.05.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.02.2022)

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

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

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

  • הוספנו את BillingClient.showInAppMessages() כדי לעזור בטיפול בדחיות של תשלומים על מינויים. כאן אפשר לקרוא מידע נוסף על שימוש בהודעות בתוך האפליקציה לטיפול בתשלומים שנדחו על מינויים.

השקת גרסה 4.0 של ספריית החיובים ב-Google Play‏ (18.05.2021)

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

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

גרסה 3.0.3 של ספריית החיובים ב-Google Play ‏ (12.03.2021)

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

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

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

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

גרסה 3.0.2 של ספריית החיובים ב-Google Play‏ (24.11.2020)

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

תיקוני באגים

  • תוקן באג בתוסף Kotlin שבו הקורוטינה נכשלת עם השגיאה Already resumed (כבר בוצעה הפעלה מחדש).
  • תוקנו הפניות לא פתורות כשמשתמשים בתוסף Kotlin עם הספרייה kotlinx.coroutines בגרסה 1.4 ומעלה.

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

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

תיקוני באגים

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

השקת ספריית החיובים ב-Google Play 3.0‏ (2020-06-08)

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

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

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

תיקוני באגים

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

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

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

תיקוני באגים

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

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

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

ספריית החיובים ב-Google Play, גרסה 2 ל-Unity

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

מידע נוסף זמין במאמר שימוש בחיוב ב-Google Play עם Unity.

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

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

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

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

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

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

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

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

תיקוני באגים

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

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

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

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

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

תיקוני באגים

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

השקת ספריית החיובים ב-Google Play בגרסה 2.0‏ (2019-05-07)

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

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

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

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

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

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

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

השיטה BillingFlowParams.setSku() הוסרה

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

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

יש תמיכה במטען ייעודי (payload) למפתחים

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

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

בנוסף, ממשק Google Play Developer API כולל מצב 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 וגם מטען ייעודי אופציונלי למפתחים.

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

queryPurchaseHistoryAsync

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

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

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

תיקוני באגים

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

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

תיקוני באגים

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

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

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

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

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

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

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

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

תיקוני באגים

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

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

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

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

  • ספריית החיובים ב-Play מורשית עכשיו במסגרת הסכם הרישיון של ערכת פיתוח התוכנה (SDK) של 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. במצב הזה, המינוי של המשתמש יעודכן בפעם הבאה שהוא יתחדש. מידע נוסף על הגדרת מצב החישוב היחסי זמין במאמר הגדרת מצב החישוב היחסי.

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

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

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

במחלקת ה-Builder, השיטה setSku() הוצאה משימוש.BillingFlowParams במקום זאת, משתמשים במתודה 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 (2018-05-07)

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

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

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

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

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

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

בProrationMode מפורטים פרטים נוספים על סוג החישוב היחסי כשמשדרגים או מורידים את רמת המינוי של משתמש.

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 בכיתה BillingFlowParams

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

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

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

תיקוני באגים

  • יציאה מוקדמת נכונה בשיטות אסינכרוניות כשהשירות מנותק.
  • Builder param objects no longer mutates built objects.
  • בעיה 68087141: launchBillingFlow() מעכשיו מופעלת שיחה חוזרת לתשובות שנכשלו.

השקת גרסה 1.0 של ספריית החיובים ב-Google Play‏ (19.09.2017, הודעה)

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

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

  • הרשאת החיוב מוטמעת במניפסט של הספרייה. אין יותר צורך להוסיף את ההרשאה com.android.vending.BILLING במניפסט של Android.
  • נוסף כלי חדש ליצירת כיתות ל-BillingClient.Builder.
  • הוספנו תבנית builder למחלקה 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

כדי להתחיל את תהליך החיוב של רכישה או מינוי, השיטה 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, במקום מחלקת wrapper קודמת, כדי שיהיה לכם נוח יותר וכדי לשמור על עקביות ב-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)

תיקוני באגים

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

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

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