שימוש בספריית החיובים ב-Google Play עם Unity

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

הגדרת הפלאגין Google Play Billing

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

  1. הפעלת שכבת ההפשטה של Unity IAP.
  2. הורדה וייבוא של הפלאגין.
  3. הגדרת הגדרות ה-build של הפלאגין.
  4. מפעילים את הפלאגין.

הפעלת שכבת ההפשטה של Unity IAP

התוסף Google Play Billing מבוסס על שכבת הפשטה שכלולה ב-Unity IAP, לכן צריך להפעיל את שכבת ההפשטה הזו לפני שמורידים ומייבאים את התוסף. כדי להפעיל את שכבת ההפשטה של Unity IAP:

  1. צריך להשלים את כל השלבים במדריך Unity הבא: הגדרת הפרויקט לשירותי Unity.
  2. צריך לבצע את כל השלבים במדריך Unity הבא: הפעלת שירות ה-IAP של Unity.

הורדה וייבוא של הפלאגין

התוסף נשלח כחבילת Unity בפורמט .unitypackage. כדי להוריד ולייבא את הפלאגין:

  1. מורידים את הגרסה האחרונה של Google Play Plugins for Unity מדף הגרסאות ב-GitHub.
  2. בסרגל התפריטים של Unity, לוחצים על Assets > Import Package > Custom Package (נכסים > ייבוא חבילה > חבילה מותאמת אישית).

  3. מאתרים את המיקום שבו הורד קובץ .unitypackage ובוחרים אותו.

  4. בתיבת הדו-שיח Import Unity Package, משאירים את כל הנכסים מסומנים ולוחצים על Import.

אחרי שהחבילה מיובאת, נוספת לנכסי הפרויקט תיקייה חדשה בשם GooglePlayPlugins (בתיקיית הבסיס של הנכסים). התיקייה הזו מכילה את כל הנכסים של Google Play Billing Library עבור הפלאגין.

קביעת הגדרות של בנייה

מכיוון שהפלאגין מרחיב את Unity IAP, מערכת Unity תיתקל בקונפליקטים ולא תצליח ליצור APK ל-Android, אלא אם יוסרו מה-build כמה תלותיות ישנות וחופפות ב-Unity IAP. התוסף מספק דרך אוטומטית להסרת הספריות שיוצרות קונפליקט מהפרויקט. כדי לפתור את העריכות המתנגשות, פועלים לפי השלבים הבאים:

  1. בסרגל התפריטים של Unity, בוחרים באפשרות Google > Play Billing > Build Settings (Google > חיוב ב-Play > הגדרות בנייה).

  2. בחלון Play Billing Build Settings (הגדרות החיוב ב-Play), לוחצים על Fix (תיקון). כך נפתר העימות והקבצים של Unity IAP שגרמו לעימות מועברים לתיקיית גיבוי. אחרי שלוחצים על תיקון, הכפתור משתנה לשחזור. אפשר ללחוץ עליו כדי לשחזר את הקבצים המקוריים שנוצרו בהם קונפליקטים.

הפעלת הפלאגין

כדי להפעיל את הפלאגין, מחליפים את ההטמעה של Unity IAP ב-Google Play בפלאגין Google Play Billing. לדוגמה, כשמשתמשים ב-Unity IAP Purchaser Script, צריך לשנות את StandardPurchaseModule שמועבר ל-IAP builder כדי להשתמש ב-Google.Play.Billing.GooglePlayStoreModule:

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

אם המשחק שלכם משתמש באותו סקריפט של רוכש בכמה פלטפורמות, כדאי להוסיף בדיקת פלטפורמה כדי לוודא ש-Unity תמשיך להשתמש בפתרון שלה לרכישות מתוך האפליקציה בפלטפורמות אחרות:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

אם אתם מפרסמים את המשחק שלכם בחנויות אפליקציות אחרות ל-Android מלבד חנות Google Play, אתם צריכים להחליף את הטמעת ברירת המחדל של Unity IAP רק כשאתם בוחרים בחנות Google Play:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

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

התוסף Google Play Billing מרחיב את שירותי Unity IAP, כך שאפשר להשתמש באותם ממשקי API של Unity כדי לנהל תהליכי עבודה נפוצים של רכישות. חשוב לשים לב שיש שינויים קלים בהתנהגות של ה-API בגלל ההבדלים בין ספריית החיובים ב-Google Play לבין הטמעת ה-IAP הרגילה של Unity בחנויות אפליקציות אחרות. אם אתם חדשים בשימוש בממשקי ה-API של Unity IAP, תוכלו לעיין בקטע 'יצירת סקריפט לרכישה' במדריך Unity IAP כדי לראות דוגמה להטמעה של תהליכי רכישה בסיסיים.

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

הפעלת רכישות בדחייה

‫Google Play תומך ברכישות שנדחות – שנקראות גם עסקאות בהמתנה או רכישות בהמתנה – שבהן משתמשים יכולים ליצור רכישה ולהשלים אותה מאוחר יותר באמצעות מזומן בחנויות.

כדי להפעיל רכישות שנדחות, משתמשים בכלי ליצירת רכישות מתוך אפליקציות כדי לשנות את ההגדרה של המודול באמצעות קריאה לשיטה EnableDeferredPurchase():

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

לאחר מכן, מטמיעים קריאה חוזרת (callback) של רכישות מושהות באמצעות התוספים של חנות Play:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

העברת מספרי חשבונות שעברו ערפול אל Google Play

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

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

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

העברת מזהי פרופילים שעברו ערפול אל Google Play

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

כדי להעביר מזהה פרופיל שעבר טשטוש, משתמשים בכלי ליצירת רכיבי IAP כדי לשנות את ההגדרה של המודול על ידי קריאה לשיטה SetObfuscatedProfileId():

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

אישור שינויים במחיר של מינויים

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

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

שינויים בהתנהגות של Unity API

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

אין תמיכה בנתוני payload של מפתחים

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

אתם יכולים להמשיך להשתמש באותם ממשקים שמוגדרים על ידי הטמעת ה-IAP הסטנדרטית של Unity בחנויות אפליקציות אחרות, כולל IStoreController. כשמתחילים רכישה, עדיין אפשר להשתמש ב-IStoreController ולהפעיל את השיטה InitiatePurchase():

public void InitiatePurchase(Purchasing.Product product, string payload);

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

אין תמיכה ב-SubscriptionManager

‫Unity IAP מספקת את המחלקה SubscriptionManager לניהול מינויים. המחלקות האלה לא נתמכות כי הטמעת ה-IAP הרגילה של Unity במחלקה הזו משתמשת במטען ייעודי (payload) למפתחים. עדיין אפשר ליצור את המחלקה הזו, אבל יכול להיות שתקבלו נתונים לא מהימנים כשמשתמשים באחת משיטות ה-getter של המחלקה.

שינויים קטנים ב-API של UpdateSubscription

התוסף Google Play Billing לא תומך בשימוש בשיטות SubscriptionManager.UpdateSubscription() ו-SubscriptionManager.UpdateSubscriptionInGooglePlayStore() כדי לשדרג או לשנמך את המינויים. אם המשחק קורא לשיטות האלה, נוצרת שגיאת GooglePlayStoreUnsupportedException.

‫Google Play Billing Library מספקת API חלופי שאפשר להשתמש בו במקום בשיטות האלה. כדי לשדרג או לשדרג לאחור מינוי, מפעילים את השיטה UpdateSubscription() באמצעות מצב חישוב יחסי:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

אפשר לעטוף את הקריאה לשיטה הזו בבדיקת פלטפורמה או בבלוק catch כשמתרחש GooglePlayStoreUnsupportedException.

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