מינוי עם תוספים

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

שיקולים

כדאי לשים לב לנקודות הבאות כשמשתמשים בתכונה 'מינויים עם חבילות שירות':

  • אפשר להירשם למינוי עם חבילות רק למינויים בסיסיים שמתחדשים אוטומטית.

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

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

  • התכונה הזו לא זמינה באזורים של הודו (IN) ושל קוריאה הדרומית (KR).

שילוב עם ספריית החיוב ב-Play

בקטע הזה מוסבר איך לשלב את התכונה 'מינוי עם חבילות תוכן' עם Play Billing Library‏ (PBL). ההנחה היא שאתם מכירים את שלבי השילוב הראשוניים של PBL, כמו הוספת התלות ב-PBL לאפליקציה, אתחול של BillingClient וחיבור ל-Google Play. הקטע הזה מתמקד בהיבטים של שילוב PBL שספציפיים למינוי עם חבילות ערוצים.

הפעלת תהליך רכישה

כדי להפעיל תהליך רכישה של מינוי עם תוספים:

  1. כדי לאחזר את כל הפריטים במינוי, משתמשים ב-method‏ BillingClient.queryProductDetailsAsync.

  2. מגדירים את האובייקט ProductDetailsParams לכל פריט.

    הפריט שמיוצג על ידי האובייקט ProductDetailsParams מציין גם את ProductDetails שמציין את פריט המינוי, וגם את offerToken שבוחר מינוי ספציפי base plan או offer.

  3. מציינים את פרטי הפריט בשיטה BillingFlowParams.Builder.setProductDetailsParamsList. בכיתה BillingFlowParams מצוינים הפרטים של תהליך הרכישה.

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

    Java

       BillingClient billingClient = ;
    
        // ProductDetails obtained from queryProductDetailsAsync().
        ProductDetailsParams productDetails1 = ...;
        ProductDetailsParams productDetails2 = ...;
        ArrayList productDetailsList = new ArrayList<>();
        productDetailsList.add(productDetails1);
        productDetailsList.add(productDetails2);
    
        BillingFlowParams billingFlowParams =
            BillingFlowParams.newBuilder()
               .setProductDetailsParamsList(productDetailsList)
               .build();
        billingClient.launchBillingFlow(billingFlowParams);

הכללים החלים על הפריטים ברכישה

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

עיבוד רכישות

העיבוד של מינוי עם חבילות שירות זהה לעיבוד של רכישות של פריט יחיד, כפי שמתואר במאמר שילוב ספריית החיובים ב-Google Play באפליקציה. ההבדל היחיד הוא שהמשתמש יכול לקבל כמה הרשאות ברכישה אחת. רכישה של מינוי עם חבילות שירות מחזירה כמה פריטים שאפשר לאחזר באמצעות Purchase.getProducts() בספריית החיוב של Google Play, ואז את רשימת lineItems ב-purchases.subscriptionsv2.get ב-Google Play Developer API.

שינוי מינויים עם חבילות

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

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

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

בדוגמה הבאה מוסבר איך לקרוא ל-API launchBillingFlow כשמשנים רכישה קיימת של מינוי עם חבילות:

Java

BillingClient billingClient = ;

int replacementMode =;

// ProductDetails obtained from queryProductDetailsAsync().
ProductDetailsParams productDetails1 = ...;
ProductDetailsParams productDetails2 = ...;
ProductDetailsParams productDetails3 = ...;

ArrayList newProductDetailsList = new ArrayList<>();
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails1);

BillingFlowParams billingFlowParams =
    BillingFlowParams.newBuilder()
        .setSubscriptionUpdateParams(
          SubscriptionUpdateParams.newBuilder()
              .setOldPurchaseToken(purchaseTokenOfExistingSubscription)
              // No need to set if change does not affect the base item.
             .setSubscriptionReplacementMode(replacementMode)
             .build())
        .setProductDetailsParamsList(productDetailsList)
        .build();

billingClient.launchBillingFlow(billingFlowParams);

תרחישים של שינוי המינוי

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

פריטים קיימים פריטים ששונו האם צריך להגדיר את מצב ההחלפה? התנהגות
A (פריט בסיס), B A (פריט בסיס) לא הפריט ב' מתוזמן להסרה נדחית.
A A (פריט בסיס), B לא פריט ב' יתווסף באופן מיידי עם חיוב יחסי.
A (פריט בסיס), B א' (פריט בסיס), ג' לא
  • התוכן ב-B מתוזמן להסרה נדחית.
  • הלקוח C יתווסף באופן מיידי עם חיוב יחסי.
A (פריט בסיס), B B (פריט בסיס) לא התוכן A מתוזמן להסרה נדחית.
A (פריט בסיס), B C (פריט בסיס) כן
A (פריט בסיס), B C (פריט בסיס), B כן ההחלפה של A -> C תלויה ב-setSubscriptionReplacementMode.
A (פריט בסיס), B C (פריט בסיס), D כן
  • ההחלפה של A -> C תלויה ב-setSubscriptionReplacementMode.
  • התוכן ב-B מתוזמן להסרה נדחית.
  • D יתווסף באופן מיידי עם חיוב יחסי.

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

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

שינויי מחיר למנויים קיימים

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

סיום של קבוצת תמחור קודמת בעלת מאפיינים משותפים

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

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

    דוגמה:

    • נניח שמדובר במינוי עם חבילות שירות נוספות (פריטים א' ו-ב'), שמתחדש ב-7 בכל חודש.
    • מחיר הפריט א' עובר תהליך העברה מ-7 $ל-10$, והעלייה במחיר צפויה להיכנס לתוקף ב-7 ביולי.
    • ב-2 ביוני מתחילה העברת מחיר חדשה מ-5 $ל-6 $עבור פריט ב'. מאחר שהאפשרות להבעת הסכמה לעליית מחיר מתחילה 37 ימים אחרי ההעברה, העלייה במחיר של פריט ב' תתבצע לכל המוקדם ב-7 באוגוסט.

    בתרחיש הזה, עד שהמשתמש מאשר את שינוי המחיר של פריט א' (עד שהוא נמצא בסטטוס CONFIRMED), שינוי המחיר של פריט ב' לא מתועד ברכישת המינוי הזו, ו-SubscriptionPurchaseV2 לא מחזיר פרטי שינוי מחיר של פריט ב'. אחרי שהמשתמש מאשר את שינוי המחיר של פריט א', שינוי המחיר של פריט ב' מתחיל. המשתמש מקבל את העלאת המחיר בכפוף להסכמה של פריט ב' רק אחרי שהוא מאשר את העלאת המחיר בכפוף להסכמה של פריט א'.

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

ביטול מינוי עם חבילות

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

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

ביטול מינויים עם חבילות והחזר כספי עליהם

ריכזנו כאן כמה מההנחיות לביטול מינויים והחזרים כספיים:

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

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

  • אפשר להתקשר למספר purchases.subscriptionsv2.revoke כדי לבטל באופן מיידי את הגישה לכל הפריטים במינוי. בעזרת ה-API הזה תוכלו:

    • לבטל את הגישה לכל הפריטים ולספק החזר כספי פרוריאלי.

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

    • לבטל את הגישה לכל הפריטים ולספק FullRefund.

    • לבטל את הגישה לפריט ספציפי עם החזר כספי מלא על הפריט.

ביטול פריט ספציפי במינוי עם חבילות

כדי לבטל פריטים ספציפיים במינוי עם תוספים, בלי לבטל את הרכישה כולה, צריך להפעיל את purchases.subscriptionsv2.revoke עם השדה ItemBasedRefund מוגדר ב-RevocationContext. אפשר להגדיר את productId של הפריט שרוצים לבטל ולקבל עליו החזר כספי בשדה ItemBasedRefund.

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

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

שיקולים

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

תפוגת התוקף של פריט במהלך דחיית תשלום

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

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

בחירת תקופת השחזור

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

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

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

תקופת חסד

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

השעיית חשבון

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

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

דוגמה:

  • למשתמש יש מינוי My Base Plan שמתחדש ב-1 בכל חודש. ב-15 באוגוסט הוא מוסיף Add on plan בעלות של 10 $לחודש עם תקופת ניסיון בחינם של שבעה ימים. לא הוגדרה תקופת חסד לאף אחד מהפריטים, ושניהם מוגדרים עם תקופת השהיית חשבון של 30 יום.

  • ב-22 באוגוסט, המשתמש חויב ב-2.90$ (10*9/31) לחיוב יחסי עד 31 באוגוסט, אבל התוקף של אמצעי התשלום של המשתמש פג לפני כן, והמינוי עבר לסטטוס 'התשלום נדחה' ב-22 באוגוסט.

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

בדוגמה הקודמת, מינוי נכנס להחזקה בחשבון ב-22 באוגוסט.

  • אם החשבון יוחזר ב-25 באוגוסט, לפני תאריך החידוש הרחב יותר ב-1 בספטמבר, המשתמש יקבל שוב גישה גם ל-My Base Plan וגם ל-Add on plan באותו יום. תאריך החיוב הבא השתנה ל-4 בספטמבר.

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

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

דיווח פיננסי ותיאום

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

בלוחות הבקרה ב-Play Console:

  • נתוני הסטטיסטיקה של ההכנסות שמוצגים בקטע דיווח פיננסי במסוף מפורטים לפי פריטים.

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