Codename One เปิดตัว API เดียว รองรับ Widgets, Live Activities และ Dynamic Island
นักพัฒนา Java และ Kotlin สามารถสร้างวิดเจ็ตหน้าจอหลักและ Live Activities ได้แล้วผ่าน PR #5365 และคอมโพเนนต์ com.codename1.surfaces

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- Codename One เพิ่มแพ็กเกจ com.codename1.surfaces เพื่อรองรับวิดเจ็ตหน้าจอหลัก
- รองรับหลากหลายแพลตฟอร์มทั้ง iOS, Android, เดสก์ท็อป และเว็บจากโค้ดเบสเดียว
- ใช้โมเดลข้อมูลและไทม์ไลน์แทนการรันคอมโพเนนต์สดตลอดเวลา
- รุ่นแรกยังไม่รองรับการอัปเดตผ่าน Push ในตัว
การรองรับวิดเจ็ตถือเป็นหนึ่งในคำขออันดับต้นๆ จากผู้ใช้งาน Codename One โดยทีมพัฒนาเคยปฏิเสธแนวคิดนี้มานานหลายปี เนื่องจากวิดเจ็ตจำเป็นต้องเรนเดอร์ภาพได้ในขณะที่อินเทอร์เฟซหลักของแอปพลิเคชันไม่ได้ทำงานอยู่ ซึ่งคอมโพเนนต์ปกติของ Codename One จำเป็นต้องพึ่งพาเรนเดอร์เลอร์, เธรดจ่ายอีเวนต์ และกราฟออบเจ็กต์สด แต่หน้าจอวิดเจ็ตกลับไม่มีสิ่งเหล่านี้เลย
สำหรับผู้ที่ไม่คุ้นเคย Codename One คือเฟรมเวิร์กโอเพนซอร์สสำหรับสร้างแอปพลิเคชันเนทีฟบน iOS, Android, เดสก์ท็อป และเว็บ ด้วยภาษา Java หรือ Kotlin เพียงชุดเดียว โดยชิ้นส่วนที่ขาดหายไปได้ถูกค้นพบหลังทีมงานพัฒนาฟีเจอร์เบื้องหลังให้แอปสามารถรีเฟรชข้อมูลได้โดยไม่ต้องแสดงหน้าจอ UI ซึ่งแก้ปัญหาฝั่งการอัปเดตได้สำเร็จ ส่วนฝั่งการเรนเดอร์ก็เป็นจริงได้เมื่อวิดเจ็ตเปลี่ยนสถานะเป็นข้อมูลแทนที่จะเป็นคอมโพเนนต์สด

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ผ่าน Pull Request #5365 แนวคิดดังกล่าวได้ถูกแปลงมาเป็นแพ็กเกจ com.codename1.surfaces ซึ่งเป็น API ชุดเดียวที่ครอบคลุมทั้งวิดเจ็ตหน้าจอหลัก, Live Activities, Dynamic Island, การแจ้งเตือนต่อเนื่องของ Android และหน้าต่างลอยบนเดสก์ท็อป โดยแอปพลิเคชันจะทำการเผยแพร่เลย์เอาต์ที่ทำการซีเรียลไลซ์ได้พร้อมกับไทม์ไลน์ของแผนผังสถานะ เพื่อให้แพลตฟอร์มนำไปเก็บบันทึกและเรนเดอร์ด้วยเทคโนโลยีพื้นผิวของตัวเอง
การแปลงคอมโพเนนต์ให้กลายเป็นข้อมูลซีเรียลไลซ์ได้ (Serializable layout and timeline) แทนที่จะรันไลฟ์ออบเจ็กต์ เป็นแนวทางสำคัญที่ทำให้เฟรมเวิร์กข้ามแพลตฟอร์มสามารถสื่อสารกับระบบปฏิบัติการมือถือยุคใหม่ได้อย่างมีประสิทธิภาพ เพราะระบบปฏิบัติการอย่าง iOS และ Android ไม่อนุญาตให้กระบวนการภายนอกรันโค้ด UI แบบเรียลไทม์บนหน้าจอโฮมได้ตลอดเวลา
ในแง่ของการทำงาน นักพัฒนาไม่สามารถผูก Java listener เข้ากับวิดเจ็ตได้โดยตรงเนื่องจากอาจไม่มีกระบวนการ Java ให้เรียกใช้งาน แต่จะใช้การกำหนดสตริง Action ID แทน เมื่อผู้ใช้แตะที่วิดเจ็ต ระบบจะเปิดแอปพลิเคชันขึ้นมาพร้อมกับส่งการกระทำดังกล่าวหลังจากสตาร์ทอัปเสร็จสิ้น นอกจากนี้ตัวจำลอง (Simulator) ยังรองรับโมเดลเดียวกันนี้ โดยสามารถเข้าไปที่เมนู Widgets > Widgets Preview เพื่อตรวจสอบวิดเจ็ตแต่ละประเภท ดูไทม์ไลน์ ปรับเปลี่ยนขนาดและรูปแบบ รวมถึงทดลองคลิกแอคชันได้ทันทีโดยไม่ต้องคอมไพล์บิวด์สำหรับอุปกรณ์จริง
สำหรับการใช้งานบน iOS และ Android จะทำการคอมไพล์คอลเลกชันวิดเจ็ตเข้าไปในตัวแอปพลิเคชันเนทีฟ ทำให้ต้องประกาศประเภทของวิดเจ็ตไว้ล่วงหน้าผ่านไฟล์รีซอร์ส surfaces.json ดังตัวอย่าง:
- ลงทะเบียนประเภทวิดเจ็ตด้วยรหัส
delivery_status - กำหนดชื่อแสดงผลเป็น Delivery และคำอธิบาย Track your order
- รองรับขนาด SMALL และ MEDIUM
การอ้างอิงแพ็กเกจ surfaces นี้ถือเป็นตัวคัดกรองการบิวด์ โดยแอปพลิเคชันที่ไม่เคยใช้งานจะไม่ได้รับส่วนขยาย WidgetKit, ตัวรับสัญญาณของ Android, App Group หรือทรัพยากร Surface แต่อย่างใด ส่วนการอัปเดตวิดเจ็ตแบบพุช (Push-driven updates) ยังไม่มีในเวอร์ชันนี้ โดยแอปจะเผยแพร่ไทม์ไลน์ผ่านการดึงข้อมูลเบื้องหลัง และ Live Activities จะยอมรับการอัปเดตที่ขับเคลื่อนโดยแอปพลิเคชันแทน ส่วนการส่งสถานะจากเซิร์ฟเวอร์และ Push Token ของ ActivityKit มีแผนจะพัฒนาเพิ่มเติมบนฟอร์แมตชุดเดียวกันในอนาคต
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น