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

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

הגדרת הפלאגין לחיוב ב-Google Play

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

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

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

התוסף לחיוב ב-Google Play מבוסס על שכבת הפשטה שכלולה ב-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. בתיבת הדו-שיח ייבוא חבילת Unity, משאירים את כל הנכסים מסומנים ולוחצים על ייבוא.

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

קביעת הגדרות build

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

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

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

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

כדי להפעיל את הפלאגין, מחליפים את ההטמעה של Unity IAP ב-Google Play בפלאגין חיוב ב-Google Play. לדוגמה, כשמשתמשים ב-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 מרחיב את שירותי ה-IAP של Unity, כך שאפשר להשתמש באותם ממשקי API של Unity כדי לנהל תהליכי עבודה נפוצים של רכישות. חשוב לזכור שיש שינויים קלים בהתנהגות ה-API בגלל ההבדלים בין ספריית החיובים ב-Google Play לבין הטמעת ה-IAP הרגילה של Unity בחנויות אפליקציות אחרות. אם אתם חדשים ב-Unity IAP APIs, תוכלו לעיין בקטע 'יצירת סקריפט רכישה' במדריך 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, רוב ממשקי ה-API מתנהגים כמו הטמעה סטנדרטית של IAP ב-Unity עבור חנויות אפליקציות אחרות. עם זאת, יש מקרים שבהם ממשקי ה-API יפעלו בצורה שונה. בקטע הזה מתוארים ההבדלים בהתנהגות.

מטען ייעודי (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 לא תומך בשימוש בשיטות SubscriptionManager.UpdateSubscription() ו-SubscriptionManager.UpdateSubscriptionInGooglePlayStore() כדי לשדרג או לשנמך את המינויים. אם המשחק שלכם קורא לשיטות האלה, מוצג GooglePlayStoreUnsupportedException.

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

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

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

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