การพุชหน้าปัด

Wear OS 6 เปิดตัว API ใหม่ชื่อ Watch Face Push ซึ่งจะสร้างโอกาสสำหรับ Use Case การเผยแพร่หน้าปัดที่ซับซ้อนมากขึ้น

ระบุว่าเมื่อใดควรใช้ 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 จะอาจใช้ได้หลายวิธี แต่ตารางต่อไปนี้จะแนะนำ Use Case หลักๆ ให้คุณ

กรณีการใช้งาน วิธีแก้ปัญหาที่แนะนำ ความซับซ้อน
ฉันต้องการสร้างหน้าปัดแต่ละแบบและเผยแพร่ ใช้ Watch Face Format ไม่ว่าจะใช้โดยตรงหรือผ่านเครื่องมือ เช่น Watch Face Designer หรือ Watch Face Studio แล้วเผยแพร่ใน Google Play ต่ำ
ฉันต้องการสร้างแอปโทรศัพท์ที่ให้ผู้ใช้เลือกหน้าปัดจากคอลเล็กชันที่คัดสรรมาแล้ว หรือออกแบบและปรับแต่งหน้าปัดเพื่อติดตั้งลงในนาฬิกา Wear OS โดยตรง สร้างแอปสำหรับทั้งนาฬิกาและโทรศัพท์โดยใช้ Watch Face Push API ในนาฬิกา สูง

วัตถุประสงค์

Use Case ที่เป็นมาตรฐานสำหรับ Watch Face Push API คือการสร้างแอปมาร์เก็ตเพลส จากแอปนี้ ผู้ใช้สามารถเลือกหน้าปัดจากคอลเล็กชันที่คัดสรรแล้วในโทรศัพท์ และควบคุมการติดตั้งหน้าปัดเหล่านี้ลงในนาฬิกาที่เชื่อมต่อได้โดยตรง

ข้อควรพิจารณา

ดูรายละเอียดเกี่ยวกับการสร้างหน้าปัดได้ในคำแนะนำเกี่ยวกับ Watch Face Format หน้าปัดที่ติดตั้งใช้งานโดยใช้ Watch Face Push คือหน้าปัด Watch Face Format ปกติ

โปรดคำนึงถึงข้อควรพิจารณาต่อไปนี้เมื่อสร้างหน้าปัด

ชื่อแพ็กเกจ

หน้าปัดที่ติดตั้งโดยใช้ Watch Face Push ต้องเป็นไปตาม รูปแบบต่อไปนี้

<app name>.watchfacepush.<watchface name>

... โดย <app name> คือชื่อแพ็กเกจของแอปที่เรียกใช้ 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 รูปแบบหน้าปัดนาฬิกาที่มีไฟล์ข้อมูลเมตาที่ไม่เป็นอันตรายและอาร์ติแฟกต์อื่นๆ ซึ่งอาจเป็นที่ยอมรับของ Google Play แต่ไม่ผ่านการตรวจสอบการพุชหน้าปัดนาฬิกา (ดูด้านล่าง)

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"

การตรวจสอบความถูกต้อง

แอป Marketplace มีหน้าที่รับผิดชอบในการยืนยันว่าหน้าปัดแต่ละรายการที่ส่งผ่าน Watch Face Push มีรูปแบบที่ถูกต้องและมีประสิทธิภาพ ซึ่งแตกต่างจากหน้าปัดทั่วไปที่จัดจำหน่ายผ่าน Google Play

การพุชหน้าปัดนาฬิกาจะใช้การตรวจสอบความถูกต้องต่อไปนี้เพื่อยืนยันคุณภาพของ หน้าปัดนาฬิกาแต่ละรายการ

  1. หน้าปัดทั้งหมดที่ติดตั้งหรืออัปเดตผ่าน Watch Face Push API ต้อง ผ่านเครื่องมือตรวจสอบ Watch Face Push
  2. ใช้เฉพาะเครื่องมือตรวจสอบอย่างเป็นทางการเพื่อสร้างโทเค็นการตรวจสอบสำหรับ ใช้กับ API
  3. เครื่องมือตรวจสอบต้องเป็นเวอร์ชันล่าสุดเมื่อคุณเรียกใช้การตรวจสอบ
  4. คุณไม่จำเป็นต้องตรวจสอบ APK ที่ไม่มีการเปลี่ยนแปลงซ้ำ โทเค็นจะไม่มีวันหมดอายุ แม้ว่าเวอร์ชันของเครื่องมือตรวจสอบที่ใช้จะถูกแทนที่แล้วก็ตาม

    ในขณะเดียวกัน เราขอแนะนำให้คุณเรียกใช้การตรวจสอบอีกครั้งเป็นครั้งคราว เนื่องจากเราจะอัปเดตเครื่องมือตรวจสอบเป็นระยะ

เรียกใช้เครื่องมือตรวจสอบ

เครื่องมือตรวจสอบมี 3 รูปแบบ ได้แก่

  • เครื่องมือ CLI
  • ไลบรารีสำหรับใช้กับ JVM
  • ไลบรารีสำหรับใช้ใน Android

การใช้โปรแกรมตรวจสอบบรรทัดคำสั่ง

  1. รับเครื่องมือตรวจสอบจากที่เก็บ Maven ของ Google
  2. เรียกใช้เครื่องมือโดยทำดังนี้

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

    หากสำเร็จ เอาต์พุตจะมีโทเค็นการตรวจสอบ ซึ่งคุณต้อง ระบุให้กับ Watch Face Push API เมื่อเพิ่มหรืออัปเดตหน้าปัด

    หากเกิดข้อผิดพลาด เอาต์พุตจะมีรายละเอียดเกี่ยวกับเช็คที่ล้มเหลว

การใช้งานเครื่องมือตรวจสอบไลบรารี

  1. รวมที่เก็บของ Google และ Jitpack โดยคุณต้องระบุทั้ง 2 รายการเพื่อใช้ไลบรารีเครื่องมือตรวจสอบ

    repositories {
        ...
        google()
        maven {
            url = uri("https://jitpack.io")
            content {
                includeGroup("com.github.xgouchet")
            }
        }
    }
    
  2. รวมทรัพยากร Dependency ของเครื่องมือตรวจสอบในโปรเจ็กต์

    // For use on JVM
    implementation("com.google.android.wearable.watchface.validator:validator-push:1.0.0-alpha07")
    
    // For use on Android
    implementation("com.google.android.wearable.watchface.validator:validator-push-android:1.0.0-alpha07")
    
    
  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

โปรดระมัดระวังเป็นพิเศษกับหน้าปัดนาฬิกาแบบพุชของ Watch Face เพื่อลดขนาด APK เนื่องจาก มีแนวโน้มที่จะมีการส่ง APK หน้าปัดนาฬิกาจากแอปโทรศัพท์ไปยังแอปนาฬิกา ผ่านบลูทูธ ซึ่งอาจช้า

APK ที่มีขนาดใหญ่เกินไปอาจใช้เวลานานในการส่ง ซึ่งทั้งส่งผลให้ ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดีและทำให้แบตเตอรี่หมดเร็ว

  • ใช้ไลบรารีที่เหมาะสม เช่น pngquant เพื่อให้ ขนาดไฟล์รูปภาพมีขนาดเล็กที่สุด
    • รวมการตั้งค่านี้ไว้ในกระบวนการสร้างคอลเล็กชันหน้าปัด
    • ตรวจสอบว่าขนาดของรูปภาพเหมาะสมกับขนาดที่คุณใช้หรือไม่
    • ครอบตัดรูปภาพอย่างเหมาะสมเพื่อนำพื้นหลังโดยรอบออก
  • ลดขนาดไฟล์แบบอักษร
    • เช่น หากคุณใช้แบบอักษรหนึ่งๆ เพื่อแสดงเวลาเท่านั้น ในรูปแบบ HH:MM คุณสามารถใช้เครื่องมืออย่างเช่น pyftsubset เพื่อจำกัดไฟล์แบบอักษรให้มีเฉพาะกลีฟที่จำเป็นเท่านั้น ซึ่งจะช่วย ลดขนาดไฟล์แบบอักษรและ APK ที่ได้ลงอย่างมาก ดูรายละเอียดเกี่ยวกับการลดขนาดไฟล์แบบอักษรในกรณีอื่นๆ ได้ที่บล็อกโพสต์นี้

โปรดดูคำแนะนำเพิ่มเติมเกี่ยวกับ การรักษาสถานะ APK ให้มีขนาดเล็กที่สุดในคำแนะนำในการเพิ่มประสิทธิภาพการใช้หน่วยความจำ

การลงนาม APK

คุณต้องลงนามในหน้าปัดทั้งหมดเช่นเดียวกับ APK ปกติ สร้างคีย์อื่น จากคีย์ที่คุณใช้กับแอปหลัก แล้วใช้คีย์อื่นสำหรับ หน้าปัดทั้งหมด

สถาปัตยกรรม

พิจารณาองค์ประกอบหลัก 4 อย่างของระบบ

  1. พื้นที่เก็บข้อมูลบนระบบคลาวด์: ในแอป Marketplace ที่เป็นทางการ คุณจะสร้างและ จัดเก็บหน้าปัดในระบบคลาวด์เพื่อให้ผู้ใช้พร้อมใช้งาน หน้าปัดมีคุณสมบัติดังนี้
    1. โดยจะสร้างไว้ล่วงหน้าเป็น APK ของ Watch Face Format ปกติ
    2. APK แต่ละรายการมีหน้าปัดที่อิงตาม Watch Face Format เพียงหน้าเดียว
    3. โดยจะได้รับการตรวจสอบด้วยกระบวนการตรวจสอบการพุชหน้าปัดนาฬิกาและจัดเก็บพร้อมโทเค็นการตรวจสอบที่เกี่ยวข้อง
    4. แอปโทรศัพท์จะดึงข้อมูลเหล่านี้ได้ตามต้องการ
  2. แอปโทรศัพท์: แอปโทรศัพท์เป็นวิธีหลักที่ผู้ใช้โต้ตอบกับระบบของคุณ ซึ่งจะช่วยให้ผู้ใช้ทำสิ่งต่อไปนี้ได้
    1. เลือกดูและค้นหาแคตตาล็อกหน้าปัด
    2. ติดตั้งหรือแทนที่หน้าปัดบนนาฬิกา
  3. แอปนาฬิกา: โดยทั่วไปแล้วแอปนาฬิกาอาจไม่มีอินเทอร์เฟซผู้ใช้ที่สำคัญ โดยหลักๆ แล้วจะเป็นตัวเชื่อมระหว่างแอปโทรศัพท์กับ Watch Face Push API ซึ่งมีฟังก์ชันการทำงานดังนี้
    1. การใช้ Watch Face Push API เพื่อติดตั้ง/อัปเดต หรือแทนที่หน้าปัด
    2. การขอสิทธิ์ที่จำเป็นและการแจ้งให้ผู้ใช้ทราบ
    3. การระบุหน้าปัดเริ่มต้น
    4. การจัดแคชหน้าปัดให้น้อยที่สุด
  4. การสื่อสารระหว่างโทรศัพท์กับนาฬิกา: การสื่อสารระหว่างแอปโทรศัพท์กับแอปนาฬิกา เป็นสิ่งสำคัญต่อความสำเร็จของประสบการณ์การใช้งานโดยรวม ใช้ Wear OS Data Layer API ซึ่งอนุญาตให้ทำสิ่งต่อไปนี้
    1. การตรวจหาการติดตั้ง: การใช้ความสามารถและ CapabilityClient แอปโทรศัพท์จะตรวจหาการไม่มีแอปนาฬิกาและในทางกลับกันได้ จากนั้นคุณจะ เปิดใช้ Intent ไปยัง Play Store เพื่อติดตั้งรูปแบบของอุปกรณ์ที่ขาดหายไปได้
    2. การจัดการสถานะ: การใช้ DataClient หรือ MessageClient จะช่วยให้โทรศัพท์ซิงค์กับ สถานะของนาฬิกาได้ เช่น การซิงค์สถานะของ หน้าปัดที่ใช้งานอยู่
    3. การส่ง APK: ใช้ ChannelClient หรือ MessageClient เพื่อส่ง APK จากโทรศัพท์ไปยังนาฬิกา
    4. การเรียกใช้จากระยะไกล: เมื่อใช้ Messageclient โทรศัพท์ จะสั่งให้นาฬิกาเรียกใช้ Watch Face Push API ได้ เช่น เพื่อ ติดตั้งหน้าปัด

ดูรายละเอียดเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับ Data Layer API