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

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

ספריית החיובים ב-Google Play: גרסה 9.1.0 ‏ (18.06.2026)

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

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

ספריית החיובים ב-Google Play: גרסה 9.0.0 ‏ (19.05.2026)

גרסה 9.0.0 של ספריית החיובים ב-Google Play ושל התוספים של Kotlin זמינה עכשיו. אם אתם רוצים לעבור מגרסאות קודמות של PBL, עיינו במדריך להעברת נתונים (מיגרציה) של PBL 9.

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

  • קודי שגיאה מעודכנים לפעילות חסומה בחנות Play: קודי השגיאה של אפליקציות חסומות בחנות Play עודכנו. במקרים שבהם אפליקציית חנות Play חסומה על ידי המערכת (לדוגמה, במצב מתאים לילדים בהתאמה אישית של OEM), קוד התגובה השתנה מ-ERROR ל-BILLING_UNAVAILABLE. בנוסף, במקרים כאלה, BillingResult מספק עכשיו הודעת ניפוי באגים: חנות Play חסומה.

  • עדכון לגבי מאפיין המציין אם ערך יכול להיות ריק (nullability) במערכת החיוב של המפתח: השיטה DeveloperProvidedBillingDetails.getLinkUri() עודכנה ל-@Nullable. השינוי הזה תומך בתרחישים שבהם ה-URI של הקישור הישיר לתשלומים חיצוניים לא זמין בשלב בחירת התשלום.

    כדי לטפל בשינוי הזה בצורה בטוחה, ודאו שקוד השילוב מטפל גם בערכים של null וגם בערכים של מחרוזת ריקה ("") מה-method‏ DeveloperProvidedBillingDetails.getLinkUri() לפני הניתוח או ההפעלה של כוונות הדפדפן.

  • הערך של targetSdkVersion עודכן ל-35.

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

ספריית החיובים ב-Google Play: גרסה 8.3.0 ‏ (23.12.2025)

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

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

ספריית החיובים ב-Google Play: גרסה 8.2.1 ‏ (15.12.2025)

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

תיקוני באגים

ספריית החיובים ב-Google Play: גרסה 8.2.0 ‏ (09.12.2025)

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

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

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

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

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

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

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

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

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

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

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

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

  • הערך של minSdkVersion עודכן ל-23.

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

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

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

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

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

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

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

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

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

  • שיפור של השיטה queryProductDetailsAsync().

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

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

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

  • קודי תגובות משנה ל-method‏ launchBillingFlow().

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

    • ‫PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS – מוחזר כשהסכום שיש למשתמש קטן ממחיר הפריט שהוא מנסה לרכוש.
    • ‫USER_INELIGIBLE – מוחזר כשהמשתמש לא עומד בדרישות הסף שהוגדרו למבצע על מינוי.
    • ‫NO_APPLICABLE_SUB_RESPONSE_CODE – ערך ברירת המחדל, שמוחזר כשאין קוד תגובת משנה רלוונטי אחר.
  • השיטה queryPurchaseHistory() הוסרה.

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

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

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

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

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

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

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

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

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

תיקוני באגים

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • נוסף ערך enum חדש, ReplacementMode, שמחליף את ProrationMode.

    שימו לב שהאפשרות ProrationMode עדיין זמינה מטעמי תאימות לדורות קודמים.

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

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

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

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

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

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

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

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

ספריית החיובים ב-Google Play: גרסה 5.1 ‏ (31.10.2022)

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

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

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

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

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

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

ספריית החיובים ב-Google Play: גרסה 4.0 ‏ (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

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

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

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

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

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

תיקוני באגים

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

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

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

תיקוני באגים

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

ספריית החיובים ב-Google Play: גרסה 3.0 ‏ (08.06.2020)

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

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

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

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

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

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

ספריית החיובים ב-Google Play: גרסה 2.1.0 ותוסף Kotlin: גרסה 2.1.0 (10.12.2019)

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

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

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

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

ספריית החיובים ב-Google Play: גרסה 2.0.3 ‏ (05.08.2019)

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

תיקוני באגים

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

ספריית החיובים ב-Google Play: גרסה 2.0.2 ‏ (08.07.2019)

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

ספריית החיובים ב-Google Play: גרסה 2.0.1 ‏ (06.06.2019)

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

תיקוני באגים

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

ספריית החיובים ב-Google Play: גרסה 2.0 ‏ (07.05.2019)

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

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

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

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

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

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

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

הפונקציה BillingFlowParams.setSku()‎ הוסרה

ה-method‏ 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 מכיל שתי שיטות חדשות לאחזור המחיר המקורי של המק"ט:

עסקאות בהמתנה

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

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

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

  1. כשמפעילים את האפליקציה, צריך להפעיל את BillingClient.queryPurchases() כדי לאחזר את רשימת המוצרים שהמשתמש לא צרך.
  2. מפעילים את Purchase.getPurchaseState() בכל אובייקט Purchase שמוחזר.
  3. מטמיעים את ה-method 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 וגם מחרוזת ניפוי באגים שאפשר להשתמש בה כדי לאבחן שגיאות. מחרוזת ניפוי הבאגים משתמשת בלוקאל en-US והיא לא מיועדת להצגה למשתמשי קצה.

תיקוני באגים

ספריית החיובים ב-Google Play: גרסה 1.2.2 ‏ (07.03.2019)

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

תיקוני באגים

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

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

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

ספריית החיובים ב-Play: גרסה 1.2.1 ‏ (04.03.2019)

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

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

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

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

תיקוני באגים

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

ספריית החיובים ב-Google Play: גרסה 1.2 ‏ (18.10.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, ה-method‏ setSku() הוצאה משימוש. השינוי הזה נועד לבצע אופטימיזציה של רצף פעולות החיוב ב-Google Play.

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

במחלקה BillingFlowParams Builder, השיטה setSku() הוצאה משימוש. במקום זאת, צריך להשתמש ב-method‏ setSkuDetails(), כמו שמוצג בקטע הקוד הבא. האובייקט שמועבר לאובייקט setSkuDetails() מגיע מה-method‏ 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();
}

ספריית החיובים ב-Play: גרסה 1.1 ‏ (07.05.2018)

גרסה 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) לתגובות שנכשלו

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

תיקוני באגים

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

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

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

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

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

תיקוני באגים

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

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

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