טירגוט נכסים לפי מדינה

מהו טירגוט נכסים לפי מדינה?

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

בדומה להעברת נכסים ב-Play, טירגוט לפי מדינה תומך ב-Android 4.1 (רמת API) 16) ומעלה. עם זאת, במכשירים שבהם פועלת גרסת Android 4.4 (רמת API 19) ומטה, המדינה שמוגדרת כברירת מחדל נשלחת ללא קשר למיקום המשתמש.

התהליך למפתחים

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

  1. שילוב של טירגוט לפי מדינה (וכתוצאה מכך, Play Asset Delivery) בתוך המשחק
    • משלבים Play Asset Delivery במשחק (אם עוד לא עשיתם זאת) כבר עשית זאת)
    • מחלקים את הנכסים לחבילות נכסים
    • עליכם לארוז את הקוד והנכסים שלכם יחד כדי ליצור את פריט מידע שנוצר בקובץ Android App Bundle שיעלה ל-Play.
  2. יצירת הגדרה של טירגוט לפי מכשיר כדי שמערכת Play תדע איך לשלוח את הנכסים שלכם למכשירים של המשתמשים.
    • להגדיר את Google Play Developer API (אם עדיין לא השלמתם אותו), שבו תשתמש כדי לשלוח את הגדרות הטירגוט ל-Play.
    • מבצעים את השלבים ליצירת הגדרת הטירגוט.
  3. צריך להעלות את קובץ ה-AAB ל-Play ולבדוק אם הכול תקין הוגדר כראוי

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

אם מייצאים את המשחק ל-Gradle ואז מסיימים את ה-build שם, מומלץ לפעול לפי ההוראות הבאות (לדוגמה: משחקי Unity יוצאו אל Gradle)).

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

שילוב של Play Asset Delivery במשחק (אם עדיין לא השלמתם אותו)

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

גרדל

במשחקים שנוצרו באמצעות Gradle, צריך לפעול לפי ההוראות הבאות עבור פיתוח חבילות נכסים באמצעות Gradle ואז פועלים לפי ההוראות לשילוב האחזור של חבילת הנכסים בתוך המשחק:

יצירת ספריות ספציפיות לפי מדינה

אם משתמשים ב-Gradle

עכשיו תפצלו את הנכסים בין קבוצות המדינות (עד 20) אגדיר מאוחר יותר. כדי ליצור את הספריות המטורגטות, משתמשים בפקודה הקיימות ספריות של חבילות נכסים שנוצרו בשלב האחרון, ולאחר תיקון התיקייה המתאימה (כפי שמתואר בהמשך) עם #countries_latam, #countries_na, וכו' כשמשתמשים בחבילות הנכסים במשחק, לא צריך לעשות כתובות תיקיות לפי Postfix (במילים אחרות, התיקון מפרסום) בתהליך ה-build).

אחרי השלב הקודם, זה עשוי להיראות כך:

...
.../level1/src/main/assets/character-textures#countries_latam/
.../level1/src/main/assets/character-textures#countries_na/
.../level1/src/main/assets/character-textures/
...

כאשר ניגשים לקבצים שבתוך התיקייה, אפשר פשוט להשתמש נתיב ללא תיקון פוסט, (בדוגמה זו, אתייחס level1/assets/character-textures/ ללא סיומות (postfix)).

פיתוח קובץ Android App Bundle

גרדל

בקובץ build.gradle של הפרויקט, מגדירים את יחסי התלות הגרסאות הבאות (או גרסאות מתקדמות יותר) עבור הפלאגין של Android Gradle וגם bundletool:

buildscript {
  dependencies {
    classpath 'com.android.tools.build:gradle:8.1.0-alpha01'
    classpath "com.android.tools.build:bundletool:1.14.0"
    ...
  }
  ...
}

צריך גם לעדכן את גרסת ה-Gradle לגרסה 8.0 ואילך. אפשר לעדכן את האפשרות הזו בgradle/wrapper/gradle-wrapper.properties בתוך הפרויקט.

distributionUrl=https://services.gradle.org/distributions/gradle-8.0-rc-1-all.zip

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

dependencies {
  implementation 'com.google.android.play:asset-delivery:2.0.1'
  ...
}

בקובץ build.gradle של המודול הראשי של האפליקציה, מפעילים את חלוקת הטירגוט לפי מדינה:

android {
  bundle {
    countrySet {
      enableSplit true
    }
    ...
  }
  ...
}

לבסוף, אפשר ליצור קובץ Android App Bundle (AAB).

כלי Bundletool

בניית החבילה באמצעות Bundletool, וגם בשלב שבו מבצעים התאמה אישית של ה-AAB, יש להוסיף את הטקסט הבא לקובץ BundleConfig.pb שלך.

{
  ...
  "optimizations": {
    "splitsConfig": {
      "splitDimension": [
      ...
      {
        "value": "COUNTRY_SET",
        "negate": false,
        "suffixStripping": {
          "enabled": true,
        }
      }],
    }
  }
}

בדיקות מקומיות

לפני שממשיכים, מומלץ לבדוק באופן מקומי את ה-App Bundle כדי מוודאים שהכול מוגדר כמו שצריך. באמצעות bundletool (1.14.0 ואילך), את/ה לפתח את האפליקציה ולבדוק אותה באופן מקומי, ולציין במפורש את המדינה הנכונה. תאריך השימוש הראשון build-apks כדי ליצור קבוצה של .apks קבצים, ולאחר מכן לפרוס את האפליקציה במכשיר מחובר באמצעות install-apks. ניתן גם לציין איזו קבוצת מדינות ברצונך להתקין דרך סימון country-set. מידע נוסף על השיטה הזו לבדיקה מקומית כאן (שימו לב הדף הזה עדיין לא עודכן לטירגוט לפי מדינה ולכן הוא חסר הדגל country-set).

bundletool build-apks --bundle=/path/to/app.aab --output=/path/to/app.apks --local-testing
bundletool install-apks --apks=/path/to/app.apks --country-set=latam

לחלופין: אפשר גם להשתמש extract-apks כדי לחלץ קבוצת חבילות APK למכשיר ספציפי. באמצעות get-device-spec יחד עם ציון המדינה של מכשיר זה, לא תפעל בשילוב עם הדגל --local-testing, כלומר להיות מסוגלים לבדוק חבילות נכסים במעקב מהיר או על פי דרישה.

bundletool get-device-spec --output=/path/to/device-spec.json --country-set=latam
bundletool extract-apks --apks=/path/to/existing_APK_set.apks --output-dir=/path/to/device_specific_APK_set.apks --device-spec=/path/to/device-spec.json

יצירת תצורה של טירגוט לפי מכשיר באמצעות Google Play Developer API

תחילת העבודה עם ממשק ה-API של Google Play למפתחים (אם עדיין לא השלמתם אותו)

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

  1. יוצרים (במידת הצורך) את פרויקט ה-API ומקשרים אותו ל-Google Play Console.
  2. Set up API Access Client (הגדרת לקוח גישה ל-API).

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

שימוש ב-Device Targeting Configuration API

אפשר להשתמש בקריאה הבאה ל-API כדי ליצור את התצורה של הטירגוט לפי מכשיר:

יצירת הגדרת טירגוט לפי מכשיר

בקשת HTTP POST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs
פרמטרים של נתיב לא רלוונטי
גוף הבקשה הגדרות הטירגוט לפי מכשיר
גוף התשובה הגדרות הטירגוט לפי מכשיר
אובייקט של הגדרת טירגוט לפי מכשיר
{
  "user_country_sets": [
    {
      "name": "latam",
      "country_codes": [
        "AR",
        "BR",
        ...
      ]
    },
    {
      "name": "sea",
      "country_codes": [
        "VN",
        "TW",
        ...
      ]
    }
  ]
}

שדות:

  • device_confid_id (מספר שלם): המזהה התואם למכשיר הזה. להגדרת טירגוט.
  • user_country_sets (אובייקט): הגדרות קבוצת מדינות
    • name (מחרוזת): השם של קבוצת המדינה (מזהה מחרוזת שהגדרתם).
    • country_codes (string): מדינות ששייכות לקבוצת המדינה הזו (בפורמט: ISO 3166-1 alpha-2).

אפשר לפעול לפי ההוראות הבאות כדי אימות הגדרות הטירגוט לפי מכשיר לפני להעלות אותו ל-Google Play.

קבלת הגדרת טירגוט לפי מכשיר לפי מזהה

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

בקשת HTTP GET https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs/{deviceTierConfigId}
פרמטרים של נתיב לא רלוונטי
גוף הבקשה לא רלוונטי
גוף התשובה הגדרות הטירגוט לפי מכשיר

קבלת רשימה של הגדרות טירגוט לפי מכשיר

ניתן לקבל את 10 התצורות האחרונות של טירגוט לפי מכשיר בעקבות הקריאה הבאה (או לציין באופן אופטימלי קבוצה של 10 באמצעות פרמטר השאילתה page_token):

בקשת HTTP GET https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs
פרמטרים של נתיב לא רלוונטי
פרמטרים של שאילתה page_token (אופציונלי) – משמש לציון קבוצה ספציפית של 10 המרות דיגיטליות. האפשרות הזו שימושית אם יצרתם יותר מ-10 המרות מסוג DTC, והיית רוצה לראות אותן לפני ה-10 האחרונים.
גוף הבקשה לא רלוונטי
גוף התשובה רשימת הגדרות טירגוט לפי מכשיר

page_token

אימות הגדרות הטירגוט לפי מכשיר

bundletool כולל שתי פקודות שעוזרות לך לאמת את הגדרת הטירגוט פועלת כמצופה לפני שמעלים אותה ל-Play.

בעזרת bundletool print-device-targeting-config, אפשר לאמת שה-JSON נכון מבחינה תחבירית.

bundletool print-device-targeting-config --config=mydtc.json

בעזרת bundletool evaluate-device-targeting-config אפשר להעריך קבוצת המדינות תתאים למכשיר ספציפי. אפשר לספק למשתמש מדינה באמצעות הדגל --country-code.

bundletool evaluate-device-targeting-config --config=mydtc.json --connected-device --country-code=AR

מתבצעת העלאה של קובץ Android App Bundle ל-Google Play

דרך API

אפשר להשתמש ב-Google Play Developer API כדי להעלות את קובץ Android App Bundle ל-Google Play ולקשר הגדרה ספציפית של טירגוט לפי מכשיר את ה-build שלך.

יש סקירה כללית על שיטות העריכה, וגם דוגמאות מעמיקות יותר להשקה לטראקים השונים ב-Google Play Console (בקישור האחרון מומלץ להשתמש ממשקי API ידידותיים ל-AAB במקום API ידידותי ל-APK, שמפורטות בדף). כדי לציין את הגדרת הטירגוט למכשיר עבור של ה-build, עליך להוסיף את מזהה ההגדרה אל deviceTierConfigId של שאילתה ה-method edits.bundle.upload, כמו:

https://androidpublisher.googleapis.com/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles?deviceTierConfigId="{deviceTierConfigId}

מ-Google Play Console

כאן אפשר למצוא את ההוראות כדי להעלות את קובץ Android App Bundle. ההגדרה האחרונה של ה-DTC תהיה הוחל על קובץ ה-App Bundle.

מתבצע אימות של הנכסים הנכונים

פועלים בשיטה הבאה כדי לוודא שנאספים רק הנכסים הנכונים למכשיר

adb shell pm path {packageName}

אתם אמורים לראות משהו כמו:

package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_asset.apk
package:{...}/split_main_asset.config.countries_latam.apk

עזר

התחלה מהירה באמצעות Curl

הנה דוגמה (באמצעות curl של כלי שורת הפקודה) של יצירת הגדרה חדשה של טירגוט לפי מכשיר, וכן באמצעות ממשק ה-API של העריכות כדי ליצור עריכה חדשה, להעלות AAB חדש (לשייך אותו עם הגדרות טירגוט ספציפיות למכשיר), קובעים את תצורת המסלול/ההפצה את העריכה. (וכך הופכים את השינוי לגלוי לכולם). עליך להקפיד להתקין את המיקום של:

  • המפתח שתואם ללקוח ה-API שלכם
  • שם החבילה של האפליקציה

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

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST -H "Content-Type: application/json" -d "{ "user_country_sets": [ { "name": "latam", "country_codes": [ "AR", "BR" ] }, { "name": "sea", "country_codes": [ "VN", "TW" ] } ] }" https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs

התחלת עריכה – תקבלו מזהה ומועד תפוגה עבור העריכה. שמירת המזהה של בשיחות הבאות.

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits

מעלים את ה-AAB. ציון הגדרת הטירגוט למכשיר כפרמטר של שאילתה - אם הקריאה יופיע קוד גרסה, sha1 ו-sha256 של ה-build. שמירה את קוד הגרסה של השיחה הבאה.

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" --data-binary @$HOME/{aabFile} -H "Content-Type: application/octet-stream" -XPOST https://androidpublisher.googleapis.com/upload/androidpublisher/v3/applications/{packageName}/edits/{editID}/bundles?deviceTierConfigId="{deviceTargetingConfigID}"

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

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPUT -H "Content-Type: application/json" -d "{ releases: [{status: '{status}'</code>, <code><strong>versionCodes</strong></code>: <code>['{versionCode}']</code> <code><strong>}]}</strong></code>" <code>https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits/{editID}/tracks/{track}

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

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits/{editID}:commit