העברה בדחיפה של תצוגת שעון

ב-Wear OS 6 מוצג API חדש, Watch Face Push, שיוצר הזדמנויות לתרחישי שימוש מתקדמים יותר בפרסום תצוגות שעון.

מתי כדאי להשתמש ב-Watch Face Push

‫Watch Face Push הוא API ב-Wear OS שמאפשר למפתחים להוסיף, לעדכן או להסיר תצוגות שעון ישירות. היא לא נדרשת לפיתוח רגיל של תצוגת שעון.

תצוגות שעון שמשתמשים בהן עם Watch Face Push חייבות להיות כתובות ב-Watch Face Format. התוכן הזה יכול לכלול תצוגות שעון שנוצרו באמצעות Watch Face Designer,‏ Watch Face Studio או כל כלי אחר שמייצר תצוגות שעון ב-Watch Face Format.

אפשר להשתמש ב-Watch Face Push API בכמה דרכים, אבל בטבלה הבאה מפורטים תרחישי השימוש העיקריים:

תרחיש שימוש פתרון מומלץ מורכבות
אני רוצה ליצור תצוגות שעון אישיות ולפרסם אותן. להשתמש ב-Watch Face Format, באופן ישיר או באמצעות כלי כמו Watch Face Designer או Watch Face Studio, ולפרסם אותן ב-Google Play. נמוכה
אני רוצה ליצור אפליקציה לטלפון שתאפשר למשתמשים לבחור תצוגות שעון מתוך אוסף שנבחר בקפידה, או לעצב ולהתאים אישית תצוגות שעון להתקנה ישירות בשעון Wear OS שלהם. יוצרים אפליקציה לשעון ולטלפון באמצעות Watch Face Push API בשעון. גבוהה

מטרה

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

שיקולים

פרטים נוספים על יצירת תצוגות שעון מופיעים במדריך Watch Face Format (פורמט תצוגת שעון): תצוגות שעון שנפרסות באמצעות Watch Face Push הן תצוגות שעון רגילות בפורמט Watch Face.

כשמעצבים את תצוגת השעון, חשוב להתחשב בשיקולים הבאים.

שמות של חבילות

תצוגות שעון שמותקנות באמצעות Watch Face Push צריכות להיות בהתאם למוסכמה הבאה:

<app name>.watchfacepush.<watchface name>

‫… where <app name> is the package name of the app calling the Watch Face Push API.

לדוגמה, לאפליקציה עם שם החבילה com.example.mymarketplace, אלה שמות החבילות התקינים של לוחות השעון:

  • com.example.mymarketplace.watchfacepush.watchface1
  • com.example.mymarketplace.watchfacepush.watchface2
  • com.example.mymarketplace.watchfacepush.another_watchface

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

תכולת החבילה

המערכת אוכפת באופן קפדני את תוכן ה-APK. מבחינה טכנית, אפשר ליצור קובצי APK ב-Watch Face Format שמכילים קובצי מטא-נתונים לא מזיקים וארטיפקטים אחרים, שאולי יתקבלו ב-Google Play אבל לא יעברו את האימות של Watch Face Push (ראו בהמשך).

כל קובץ APK של תצוגת שעון חייב להכיל רק את הקבצים או הנתיבים הבאים:

  • /AndroidManifest.xml
  • /resources.arsc
  • /res/**
  • /META-INF/**

בנוסף, קובץ AndroidManifest.xml חייב להכיל רק את התגים הבאים:

  • <manifest>
  • <uses-feature>
  • <uses-sdk>
  • <application>
  • <property>
  • <meta-data>

לבסוף, בחבילה צריך לציין minSdk של לפחות 33, ובתוך התג <application> צריך לציין את המאפיין android:hasCode="false".

אימות

בניגוד לתצוגות שעון רגילות שמופצות דרך Google Play, אפליקציית Marketplace אחראית לוודא שכל תצוגת שעון מסוג Watch Face Push מעוצבת היטב ופועלת בצורה יעילה.

Watch Face Push משתמש בבדיקות האימות הבאות כדי לוודא את האיכות של כל עיצוב לשעון:

  1. כל תצוגות השעון שמותקנות או מתעדכנות באמצעות Watch Face Push API חייבות לעבור את כלי האימות של Watch Face Push.
  2. כדי ליצור אסימוני אימות לשימוש עם ה-API, צריך להשתמש רק בכלי האימות הרשמי.
  3. כשמריצים את האימות, כלי האימות צריך להיות מעודכן.
  4. אין צורך לאמת מחדש קובץ APK שלא השתנה. התוקף של הטוקנים לא פג, גם אם הגרסה של כלי האימות שבה נעשה שימוש הוחלפה בגרסה חדשה.

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

הרצת כלי התיקוף

הכלי לאימות זמין בשלוש צורות:

  • כלי CLI
  • ספרייה לשימוש ב-JVM
  • ספרייה לשימוש ב-Android

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

  1. מקבלים את כלי האימות ממאגר Maven של Google.
  2. מריצים את הכלי באופן הבא:

    java -jar validator-push-cli-1.0.0-alpha10.jar \
        --apk_path=<your watch face>.apk \
        --package_name=<your marketplace package name>
    

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

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

שימוש בכלי התיקוף של הספריה

  1. כוללים את מאגרי Google ו-Jitpack. כדי להשתמש בספריית האימות, צריך להשתמש בשניהם.

    repositories {
        ...
        google()
        maven {
            url = uri("https://jitpack.io")
            content {
                includeGroup("com.github.xgouchet")
            }
        }
    }
    
  2. כוללים את התלות של כלי האימות בפרויקט:

    // For use on JVM
    implementation("com.google.android.wearable.watchface.validator:validator-push:1.0.0-alpha10")
    
    // For use on Android
    implementation("com.google.android.wearable.watchface.validator:validator-push-android:1.0.0-alpha10")
    
    
  3. מריצים את כלי התיקוף:

    val validator = DwfValidatorFactory.create()
    val result = validator.validate(watchFaceFile, appPackageName)
    
    if (result.failures().isEmpty()) {
        val token = result.validationToken()
        println("Validation token: $token")
    
        // Validation success - continue with the token
        // ...
    } else {
        // There were failures, handle them accordingly - validation has failed.
        result.failures().forEach { failure ->
            println("FAILURE: ${failure.name()}: ${failure.failureMessage()}")
            // ...
        }
    }

דוגמה לשימוש בספרייה הזו מופיעה בדוגמה ב-GitHub. כדאי לעיין גם בספריית Portable Asset Compiler Kit (Pack), שימושית ליצירת קובצי APK במכשיר, לשימוש עם כלי האימות מבוסס-Android.

גודל ה-APK

חשוב במיוחד להקפיד על מזעור גודל ה-APK של תצוגות שעון מסוג Watch Face Push, כי סביר להניח שקובץ ה-APK של תצוגת השעון יועבר מאפליקציית הטלפון לאפליקציית שעון חכם באמצעות Bluetooth, שיכול להיות איטי.

העברה של קובץ APK גדול מדי יכולה להימשך זמן רב, וזה פוגע בחוויית המשתמש וגם גורם לבזבוז סוללה.

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

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

חתימה על קובצי APK

כמו בקובץ APK רגיל, אתם צריכים לחתום על כל תצוגות השעון. יוצרים מפתח אחר מהמפתח שבו משתמשים באפליקציה הראשית, ומשתמשים במפתח הזה לכל תצוגות השעון.

ארכיטקטורה

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

  1. אחסון בענן: באפליקציית Marketplace הקנונית, אתם יוצרים ומאחסנים את תצוגות השעון בענן, והן מוכנות לשימוש על ידי המשתמשים. לפני השעון יש את המאפיינים הבאים:
    1. הם בנויים מראש כקובצי APK רגילים בפורמט תצוגת השעון.
    2. כל חבילת APK מכילה רק תצוגת שעון אחת שמבוססת על Watch Face Format.
    3. הם מאומתים באמצעות תהליך האימות של Watch Face Push ונשמרים עם אסימון האימות המשויך.
    4. אפליקציית הטלפון יכולה לאחזר אותם לפי הצורך.
  2. אפליקציית הטלפון: אפליקציית הטלפון היא הדרך העיקרית שבה המשתמשים יוצרים אינטראקציה עם המערכת. הם יכולים:
    1. איך מדפדפים ומחפשים בקטלוג תצוגות השעון
    2. התקנה או החלפה של תצוגת שעון בשעון
  3. אפליקציה לשעון חכם: בדרך כלל לאפליקציה לשעון חכם אין ממשק משתמש משמעותי. האפליקציה משמשת בעיקר כגשר בין אפליקציית הטלפון לבין ממשקי ה-API של העברת נתונים (Push) של לוח השעון, עם הפונקציונליות הבאה:
    1. שימוש ב-Watch Face Push API כדי להתקין, לעדכן או להחליף תצוגות שעון
    2. בקשת ההרשאות הנדרשות והצגת הנחיה למשתמש
    3. הוספת תצוגת שעון שמוגדרת כברירת מחדל
    4. העברת מטמון מינימלי של תצוגות שעון
  4. תקשורת בין הטלפון לשעון: התקשורת בין הטלפון לאפליקציית שעון חכם היא קריטית להצלחת החוויה הכוללת. שימוש בממשקי API של Wear OS Data Layer, שמאפשרים:
    1. זיהוי התקנה: באמצעות היכולות ו-CapabilityClient, אפליקציית הטלפון יכולה לזהות את היעדר אפליקציית שעון חכם, ולהיפך. אחר כך אפשר להפעיל intent לחנות Play כדי להתקין את גורם הצורה החסר.
    2. ניהול מצב: באמצעות DataClient או MessageClient, הטלפון נשאר מסונכרן עם מצב השעון, למשל, סנכרון המצב של תצוגת השעון הפעילה.
    3. העברת קובצי APK: באמצעות ChannelClient או MessageClient, שולחים קובצי APK מהטלפון לשעון
    4. הפעלה מרחוק: באמצעות Messageclient, הטלפון יכול להנחות את השעון לבצע קריאה ל-Watch Face Push API, למשל כדי להתקין תצוגת שעון.

פרטים נוספים זמינים במדריך בנושא Data Layer API.