טירגוט לפי מכשיר למודולים מותנים

מהו טירגוט לפי מכשיר במודולים מותנים?

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

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

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

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

במסמך הזה מוסבר איך להוסיף טירגוט לפי מכשיר בהצגה מותנית באמצעות הפלאגין Android Gradle.

יצירת מודול של תכונות מותנות עם טירגוט לפי מכשיר

הוספת מודול של תכונה לאפליקציה

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

כדי להשתמש ב-DT למסירה מותנית, צריך להשתמש bundletool גרסה 1.7.0 ואילך. לשם כך צריך לציין במפורש את גרסת Bundletool עבור פלאגין Android Gradle. אפשר לעשות זאת ברמה הבסיסית (root) build.gradle קטע buildscript של קובץ:

buildscript {
  dependencies {
    classpath "com.android.tools.build:bundletool:1.7.0"
    ...
  }
  ...
}

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

לאחר השלמת פיתוח התכונה, תוכלו להגדיר מסירה לתנאים על סמך טירגוט לפי מכשיר בAndroidManifest.xml של התכונה. צריך לציין תנאי של קבוצת מכשירים בתוך dist:conditions מתוך רכיב dist:module. יש מידע כללי על התנאים כאן. למכשיר קיימים תנאים חדשים שבהם אפשר לציין את כל הקבוצות יש לשלוח את התכונה הזו אל:

<dist:device-groups>
  <dist:device-group dist:name="..." />
  <dist:device-group dist:name="..." />
  ...
</dist:device-groups>

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

<manifest ...>
  ...
  <dist:module dist:title="...">
    <dist:delivery>
      <dist:install-time>
        <dist:conditions>
          <dist:device-groups>
            <dist:device-group dist:name="my_group_1"/>
          </dist:device-groups>
          ...
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
  </dist:module>
  ...
</manifest>

בתכונה שמטרגטת גם את _my_group1 וגם את _my_group2, הפונקציה AndroidManifest.xml נראה כך:

<manifest ...>
  ...
  <dist:module dist:title="...">
    <dist:delivery>
      <dist:install-time>
        <dist:conditions>
          <dist:device-groups>
            <dist:device-group dist:name="my_group_1"/>
            <dist:device-group dist:name="my_group_2"/>
          </dist:device-groups>
          ...
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
  </dist:module>
  ...
</manifest>

לאחר מכן, תוכלו ליצור את קובץ ה-Android App Bundle (AAB).

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

לפני שממשיכים, מומלץ לבדוק באופן מקומי את ה-App Bundle כדי מוודאים שהכול מוגדר כמו שצריך. באמצעות bundletool שאתם מפתחים באופן מקומי לבדוק את האפליקציה ולציין במפורש את קבוצת המכשירים הנכונה. קודם כול אפשר להשתמש ב-build-apks כדי ליצור קבוצה של קובצי .APK ולאחר מכן לפרוס את האפליקציה במכשיר מחובר באמצעות install-apks שלך ניתן גם לציין אילו קבוצות ברצונך להתקין באמצעות device-groups לסמן. מידע נוסף על השיטה הזו לבדיקה מקומית כאן. שימו לב הדף הזה עדיין לא עודכן לפורמט DT ולכן חסר בו סימון device-groups.

bundletool build-apks --bundle=/path/to/app.aab --output=/path/to/app.apks --local-testingbundletool install-apks --apks=/path/to/app.apks --device-groups=my_group_1,my_group_2

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

bundletool get-device-spec --output=/path/to/device-spec.json --device-groups=my_group_1,my_group_2bundletool 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. הגדרה של לקוח גישה ל-API

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

שימוש ב-Device Targeting Configuration API

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

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

בקשת HTTP POST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs
פרמטרים של נתיב לא רלוונטי
גוף הבקשה הגדרות הטירגוט לפי מכשיר
גוף התשובה הגדרות הטירגוט לפי מכשיר
אובייקט של הגדרת טירגוט לפי מכשיר
{
  device_groups: [
    {
      name: string,
      device_selectors: [
        {
          device_ram : {
            min_bytes: integer
            max_bytes: integer
          },
          included_device_ids: [
            {
              build_brand: string,
              build_device: string
            }
          ],
          excluded_device_ids: [
            {
              build_brand: string,
              build_device: string
            }
          ],
          required_system_features: [
            {
              name: string
            }
          ],
          forbidden_system_features: [
            {
              name: string
            }
          ]
        }
      ]
    }
  ]
}

שדות:

  • device_tier_config_id (מספר שלם): המזהה שתואם למכשיר הזה הגדרות טירגוט
  • device_groups (אובייקט): הגדרות קבוצה

    • name (מחרוזת): השם של קבוצת המכשירים (מזהה מחרוזת שהגדרתם)
    • device_selectors (אובייקט): דרישות המכשיר למכשיר כדי: שייכים לקבוצה הזו.
    • device_ram (אובייקט): דרישות לגבי זיכרון RAM של המכשיר
      • min_bytes (מספר שלם): זיכרון RAM מינימלי שנדרש (בבייטים)
      • max_bytes (מספר שלם): נפח זיכרון RAM מקסימלי נדרש (בבייטים)
    • included_device_ids (אובייקט): דגמי מכשירים להכללה בבורר הזה (עד 10,000 מזהי מכשירים לכל קבוצה). מכשיר A כדי להתאים לבורר, הם צריכים להיות ברשימה הזו. זהו צורך אבל אין מספיק תנאי כדי להתאים לבורר המלא (ראו הערה בהמשך מוסבר על שילוב דרישות בבורר).
      • build_brand (מחרוזת): יצרן המכשיר
      • build_device (מחרוזת): קוד של דגם המכשיר.
    • excluded_device_ids (אובייקט): דגמי מכשירים להחרגה בבורר הזה (עד 10,000 מזהי מכשירים לכל קבוצה). מכשיר A מהרשימה הזו לא תתאים לבורר, גם אם הוא תואם לכל ודרישות נוספות בבורר.
      • build_brand (מחרוזת): יצרן המכשיר
      • build_device (מחרוזת): קוד של דגם המכשיר.
    • required_system_features (אובייקט): תכונות שמכשיר צריך להיכלל בבורר הזה (עד 100 תכונות לכל קבוצה). מכשיר צריך לכלול את כל תכונות המערכת כדי להתאים לבורר. זהו צורך אך לא מספיק תנאי כדי להתאים לבורר המלא (ראו הערה למטה לגבי שילוב ומילות המפתח בבורר).

      הפניית תכונות של המערכת

      • name (מחרוזת): תכונה של מערכת
    • forbidden_system_features (אובייקט): תכונות שמכשיר אינו חייב להיכלל על ידי בורר זה (עד 100 תכונות לכל קבוצה). אם במכשיר יש אחת מתכונות המערכת הוא לא תואם לבורר, גם אם הוא תואם לכל שאר בבורר.

      הפניית תכונות של המערכת

      • name (מחרוזת): תכונה של מערכת

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

  • בדיקה של מכשירים ספציפיים באמצעות קטלוג המכשירים, היצרן וקוד הדגם במיקומים, כפי שמוצג בדוגמה הבאה (בטלפון מדגם Google Pixel 4a, היצרן הוא Google וקוד הדגם הוא 'דג שמש')

    דף pixel 4a בקטלוג המכשירים

    דף pixel 4a בקטלוג המכשירים

  • הורדת קובץ CSV של מכשירים נתמכים באמצעות היצרן Model Code (קוד המודל) בשדות build_brand ו-build_device, בהתאמה.

לדוגמה, הקבוצה הבאה תואמת לכל המכשירים שיש בהם יותר מ-4GB של RAM, מלבד Pixel 5 (google Redfin) ו-Pixel 3 (Google Blueline, שכולל פחות מ-4GB של זיכרון RAM).

device_groups: [
  {
    name: "my_group_1",
    device_selectors: [
      {
        device_ram: {
          min_bytes: 4294967296
        },
        excluded_device_ids: [
          {
            build_brand: "google",
            build_device: "redfin"
          }
        ]
      },
      {
        included_device_ids: [
          {
            build_brand: "google",
            build_device: "blueline"
          }
        ]
      }
    ]
  }
]

אפשר לקרוא את זה בתור:

[ (RAM > 4GB) AND NOT (google redfin) ] OR [ (google blueline) ]

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

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

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

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

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

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

בקשת HTTP GEThttps://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, אפשר להעריך אילו קבוצות יתאים למכשיר מסוים. צריך לחבר את מכשיר היעד לתחנת העבודה ולהשתמש בדגל --connected-device. או שאתם מרכיבים קובץ JSON עם מאפייני המכשיר באופן ידני ולספק אותו דרך דגל --device-properties.

bundletool evaluate-device-targeting-config --config=mydtc.json --connected-device
bundletool evaluate-device-targeting-config --config=mydtc.json --device-properties=deviceproperties.json

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

{
  "ram": 2057072640,
  "device_id": {
    "build_brand":"google",
    "build_device":"redfin"
  },
  "system_features": [
    {
      "name":"android.hardware.bluetooth"
    },
    {
      "name":"android.hardware.camera"
    }
  ]
}

מתבצעת העלאה של קובץ 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 כשקוראים לפונקציה 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.

עזר

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

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

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

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

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST -H "Content-Type: application/json" -d "{ device_groups: [ { name: "my_group_1", device_selectors: [ { device_ram: { min_bytes: 4294967296 }, excluded_device_ids: [ { build_brand: "google", build_device: "redfin" } ] }, { included_device_ids: [ { build_brand: "google", build_device: "blueline" } ] } ] } ] }" 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. ציון הגדרת הטירגוט לפי מכשיר (deviceTierConfigId) כשאילתה פרמטר - אם הקריאה בוצעה בהצלחה, יופיע קוד גרסה, 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="{deviceTierConfigId}

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

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPUT -H "Content-Type: application/json" -d "{ releases: [{status: '{status}', versionCodes: ['{versionCode}'] }]}" 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