Watch App: nó là gì, phát triển cho Apple Watch và Wear OS

Tác giả: IT Sectr Đã đăng: 2026-02-15 Thời gian đọc: 9 phút

Watch App là ứng dụng dành cho thiết bị đeo: Apple Watch chạy watchOS và đồng hồ thông minh trên Wear OS của Google. Không giống như ứng dụng di động, Watch App được tối ưu hóa cho màn hình nhỏ (đường chéo 1.5–2 inch), phiên tương tác ngắn (5–15 giây) và các kịch bản cụ thể — thể dục, thông báo, trả lời nhanh, nhập liệu bằng giọng nói. Việc phát triển được thực hiện bằng SwiftUI cho Apple Watch và Kotlin với Jetpack Compose for Wear OS cho Android. Hãy cùng xem xét các khái niệm chính, kiến trúc, điều hướng và ví dụ mã cho cả hai nền tảng.

Những điểm chính

  • Watch App — ứng dụng cho đồng hồ thông minh với phiên ngắn (5–15 giây) và màn hình giới hạn
  • Apple Watch sử dụng watchOS với SwiftUI và WatchKit, điều hướng phân cấp chặt chẽ
  • Wear OS sử dụng Kotlin với Jetpack Compose for Wear OS, Material You và điều hướng bên
  • Tự chủ — phiên bản LTE của đồng hồ cho phép ứng dụng hoạt động mà không cần kết nối điện thoại thông minh
  • Cảm biến — gia tốc kế, con quay hồi chuyển, máy đo nhịp tim, GPS có sẵn qua API gốc trên cả hai nền tảng

Watch App là gì

Watch App là ứng dụng được thiết kế để hoạt động trên thiết bị đeo: Apple Watch (watchOS) và đồng hồ thông minh trên Wear OS. Sự khác biệt chính so với ứng dụng di động là yếu tố hình thức. Màn hình đồng hồ có đường chéo 1.5–2 inch (so với 6–7 inch của điện thoại thông minh), hạn chế lượng thông tin hiển thị cùng lúc. Tương tác với ứng dụng ngắn — người dùng kiểm tra thời gian, thông báo, nhịp tim hoặc số bước trong 5–15 giây, sau đó hạ tay xuống.

Các kịch bản chính của Watch App: theo dõi thể dục (bước, nhịp tim, calo, giấc ngủ), thông báo (tin nhắn, cuộc gọi, lịch), hành động nhanh (khởi động hẹn giờ, trả lời tin nhắn bằng giọng nói, điều khiển nhạc), bạn đồng hành (điều khiển máy ảnh từ xa, chìa khóa xe, thanh toán NFC). Theo Counterpoint Research (2026), thị trường đồng hồ thông minh toàn cầu vượt quá 150 triệu thiết bị mỗi năm, trong đó Apple Watch chiếm 35%, Wear OS 20%, còn lại là Fitbit, Garmin và các hãng khác.

Hạn chế của Watch App: màn hình nhỏ (tối đa 2 inch), thời lượng pin hạn chế (tối đa 18–24 giờ), không có bàn phím đầy đủ (chỉ nhập liệu bằng giọng nói hoặc đọc chính tả), giới hạn tác vụ nền (watchOS — tối đa 10 phút, Wear OS — tối đa 5 phút), cần đồng bộ với điện thoại cho hầu hết chức năng. Bắt đầu từ watchOS 6 (2019) và Wear OS 3 (2022), ứng dụng có thể hoạt động tự chủ qua mô-đun LTE mà không cần ghép nối với điện thoại.

Apple Watch: watchOS và SwiftUI

watchOS là hệ điều hành của Apple cho đồng hồ thông minh, dựa trên iOS và sử dụng các framework tương tự (Foundation, UIKit phiên bản thích ứng, SwiftUI). Việc phát triển được thực hiện trong Xcode bằng Swift. Framework UI chính là SwiftUI, cung cấp các thành phần dành riêng cho watchOS: TabView với băng chuyền, NavigationStack, Digital Crown qua DigitalCrownModifier, menu nhấn giữ.

Điều hướng trên watchOS được xây dựng trên mô hình phân cấp. Các thành phần chính: ngăn xếp phân cấp (NavigationStack với tự động quay lại), trình bày phương thức (sheet), điều hướng theo trang (qua TabView với .tabViewStyle(.page)), menu ngữ cảnh khi nhấn giữ. Digital Crown cho phép cuộn nội dung và thay đổi giá trị. Cử chỉ: chạm, nhấn giữ, vuốt, Force Touch (đến watchOS 7), xoay Digital Crown.

Các framework chính của watchOS: HealthKit (truy cập dữ liệu sức khỏe — nhịp tim, bước, giấc ngủ, ECG), CoreMotion (gia tốc kế, con quay hồi chuyển), WatchConnectivity (trao đổi dữ liệu với iPhone), ClockKit (phức hợp trên mặt đồng hồ), BackgroundTasks (cập nhật nền tối đa 10 phút), ARKit (hiệu ứng FaceTime trên Series 9+). Watch App có thể là ứng dụng đầy đủ (ứng dụng riêng trong dock) hoặc phần mở rộng (đồng thời với phiên bản iOS).

Wear OS: Kotlin và Compose

Wear OS là nền tảng của Google cho đồng hồ thông minh, dựa trên Android. Phát triển hiện đại được thực hiện bằng Kotlin với Jetpack Compose for Wear OS — một tập hợp các thành phần được tối ưu hóa cho màn hình tròn: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper. Không giống như Compose trên di động, Wear OS sử dụng các bộ sửa đổi riêng: scrollable để cuộn dọc, swipable để vuốt, RotaryInput để điều khiển núm vặn.

Điều hướng trên Wear OS sử dụng bảng điều khiển bên (SwipeToDismiss) và màn hình thẻ. Các thành phần chính: SwipeDismissableNavHost (điều hướng với vuốt lui), định vị màn hình (ScalingLazyColumn cho danh sách), băng chuyền ngang (Carousel), mặt đồng hồ (WatchFace qua WatchFaceService). Google khuyên dùng vuốt bên để quay lại và cuộn dọc cho danh sách. Nút nguồn trên đồng hồ mở danh sách ứng dụng gần đây.

Sức khỏe và cảm biến trên Wear OS: Health Services API (bước, nhịp tim, calo, giấc ngủ, SpO2 qua nhà cung cấp dữ liệu), SensorManager (gia tốc kế, con quay hồi chuyển, phong vũ biểu, từ kế), Location Services (GPS qua FusedLocationProvider). Wear OS 5+ hỗ trợ theo dõi chạy bộ, đi bộ, đạp xe và bơi lội với tự động phát hiện loại hoạt động. Dữ liệu được đồng bộ với Google Fit qua Health Connect.

Ví dụ mã: Swift cho Apple Watch

Hãy xem ứng dụng theo dõi nhịp tim cho Apple Watch sử dụng SwiftUI và HealthKit.

swift
import SwiftUI
import HealthKit

// Mô hình dữ liệu nhịp tim
struct HeartRateData: Identifiable {
    let id = UUID()
    let bpm: Double
    let date: Date
}

// ViewModel cho HealthKit
@Observable
final class HealthViewModel {
    private let healthStore = HKHealthStore()
    var currentHeartRate: Double = 0
    var isAuthorized: Bool = false

    func requestAuthorization() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let types = Set([heartRateType])
        healthStore.requestAuthorization(toShare: nil, read: types) { success, _ in
            Task { @MainActor in
                self.isAuthorized = success
                if success { self.startHeartRateQuery() }
            }
        }
    }

    func startHeartRateQuery() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let query = HKObserverQuery(
            sampleType: heartRateType, predicate: nil
        ) { [weak self] _, _, _ in
            self?.fetchLatestHeartRate()
        }
        healthStore.execute(query)
    }

    private func fetchLatestHeartRate() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
        let query = HKSampleQuery(
            sampleType: heartRateType, predicate: nil,
            limit: 1, sortDescriptors: [sort]
        ) { _, samples, _ in
            guard let sample = samples?.first as? HKQuantitySample else { return }
            let bpm = sample.quantity.doubleValue(for: HKUnit.count().unitDivided(by: .minute()))
            Task { @MainActor in
                self.currentHeartRate = bpm
            }
        }
        healthStore.execute(query)
    }
}

// Màn hình chính
struct HeartRateView: View {
    @State private var viewModel = HealthViewModel()

    var body: some View {
        VStack {
            Image(systemName: "heart.fill")
                .foregroundColor(.red)
                .font(.largeTitle)

            Text("\(Int(viewModel.currentHeartRate))")
                .font(.system(size: 60, weight: .bold, design: .rounded))
                .foregroundColor(.red)

            Text("BPM")
                .font(.caption)
                .foregroundColor(.secondary)
        }
        .padding()
        .onAppear(perform: viewModel.requestAuthorization)
    }
}

Các điểm chính: HKHealthStore yêu cầu truy cập dữ liệu HealthKit; HKObserverQuery thông báo về thay đổi nhịp tim theo thời gian thực; HKSampleQuery lấy giá trị mới nhất. Watch App tự động cập nhật giao diện khi currentHeartRate thay đổi nhờ @Observable. HealthKit xử lý dữ liệu cục bộ trên thiết bị — không cần yêu cầu máy chủ.

Ví dụ mã: Kotlin cho Wear OS

Ứng dụng tương tự cho Wear OS bằng Kotlin với Jetpack Compose và Health Services API.

kotlin
// MainActivity.kt
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.wear.compose.material.*
import androidx.wear.compose.foundation.arc.BasicArcParams
import com.google.android.horologist.health.HealthService

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            WearAppTheme {
                HeartRateScreen()
            }
        }
    }
}

@Composable
fun HeartRateScreen() {
    var heartRate by remember { mutableIntStateOf(0) }
    var isConnected by remember { mutableStateOf(false) }

    LaunchedEffect(Unit) {
        // HealthService — API truy cập cảm biến
        val healthService = HealthService()
        healthService.connect().onSuccess {
            isConnected = true
        }
    }

    Scaffold(
        timeText = { TimeText() },
        vignette = { Vignette(vignettePosition = VignettePosition.TopAndBottom) }
    ) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .scrollable(state = ScrollState),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {
            Icon(
                imageVector = Icons.Filled.Favorite,
                contentDescription = "Nhịp tim",
                modifier = Modifier.size(40.dp),
                tint = MaterialTheme.colors.error
            )

            Text(
                text = heartRate.toString(),
                style = MaterialTheme.typography.display1
            )
            Text(
                text = "BPM",
                style = MaterialTheme.typography.caption2
            )
        }
    }
}

Các thành phần chính của Wear OS: Scaffold với TimeText và Vignette cho bố cục tiêu chuẩn; bộ sửa đổi .scrollable() cho tương thích màn hình tròn; HealthService (Horologist) để truy cập cảm biến nhịp tim. Jetpack Compose for Wear OS tự động thích ứng giao diện cho màn hình tròn và vuông — nhà phát triển không cần xử lý các yếu tố hình thức khác nhau một cách thủ công.

Câu hỏi thường gặp

Watch App khác gì so với ứng dụng di động?

Watch App có màn hình giới hạn (đường chéo 1.5–2 inch), chạy bằng pin dung lượng nhỏ và sử dụng điều khiển bằng cử chỉ. Tương tác ngắn — 5–15 giây, ứng dụng phải cô đọng nhất có thể và hiển thị 1–2 chỉ số chính.

Ngôn ngữ nào được sử dụng cho Watch App?

Cho Apple Watch — Swift với các framework SwiftUI và WatchKit. Cho Wear OS — Kotlin với Jetpack Compose for Wear OS. Cả hai nền tảng đều hỗ trợ cách tiếp cận khai báo để xây dựng giao diện.

Watch App có thể hoạt động không cần iPhone không?

Có, bắt đầu từ Apple Watch Series 3 với LTE và watchOS 6+, ứng dụng có thể hoạt động tự chủ qua App Store trên đồng hồ. Wear OS cũng hỗ trợ phiên bản LTE với hoạt động độc lập qua Google Play trên đồng hồ.

Những hạn chế của Watch App là gì?

Hạn chế chính: kích thước màn hình (tối đa 2 inch), thời lượng pin hạn chế (tối đa 18 giờ), không có trình duyệt hoặc bàn phím đầy đủ, giới hạn tác vụ nền (watchOS — tối đa 10 phút, Wear OS — tối đa 5 phút).

Làm thế nào để truy cập cảm biến trên đồng hồ?

Trên Apple Watch sử dụng HealthKit (HKHealthStore, HKSampleQuery) cho nhịp tim, bước, giấc ngủ và CoreMotion cho gia tốc kế. Trên Wear OS — Health Services API (qua Horologist) cho các chỉ số sức khỏe và SensorManager cho dữ liệu cảm biến thô.

Tổng kết

  • Watch App — ứng dụng cho đồng hồ thông minh với phiên 5–15 giây và màn hình tối đa 2 inch
  • Apple Watch sử dụng watchOS với SwiftUI, NavigationStack, Digital Crown và HealthKit để truy cập cảm biến
  • Wear OS sử dụng Kotlin với Jetpack Compose for Wear OS, Scaffold, ScalingLazyColumn và Health Services API
  • Tự chủ — mô-đun LTE cho phép ứng dụng hoạt động không cần kết nối điện thoại thông minh trên cả hai nền tảng
  • HealthKit trên watchOS và Health Services trên Wear OS cung cấp quyền truy cập nhịp tim, bước, giấc ngủ và SpO2
  • Hạn chế — màn hình nhỏ, pin 18–24 giờ, giới hạn tác vụ nền, không có bàn phím
  • Kịch bản chính — theo dõi thể dục, thông báo, trả lời nhanh, điều khiển từ xa, thanh toán NFC

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm