Wear OS에서 네트워크 액세스 및 동기화

Wear OS by Google을 사용하면 시계가 Android 또는 iOS 휴대전화에 액세스하지 않고도 네트워크와 직접 통신할 수 있습니다. Data Layer API를 사용하여 Wear OS 앱을 네트워크에 연결하지 마세요. 대신 이 가이드의 가이드라인과 단계를 따르세요.

네트워크 액세스

Wear OS 앱은 네트워크 요청을 할 수 있습니다. 시계가 휴대전화와 블루투스로 연결되어 있으면 시계의 네트워크 트래픽은 일반적으로 휴대전화를 통해 프록시 처리됩니다.

휴대전화를 사용할 수 없는 경우 시계 하드웨어에 따라 Wi-Fi 및 셀룰러 네트워크가 사용됩니다. Wear OS 플랫폼은 네트워크 간의 전환을 처리합니다.

HTTP, TCP, UDP와 같은 프로토콜을 사용할 수 있습니다. 그러나 android.webkit API( CookieManager 클래스 포함)는 사용할 수 없습니다. 요청 및 응답에서 헤더를 읽고 써서 쿠키를 사용할 수 있습니다.

또한 일정한 간격으로 폴링하는 것을 비롯하여 비동기식 요청에 WorkManager API를 사용하는 것이 좋습니다.

특정 네트워크 유형에 연결해야 하는 경우 네트워크 상태 읽기를 참고하세요.

고대역폭 네트워크 액세스

Wear OS 플랫폼은 최상의 전반적인 사용자 환경을 제공하기 위해 네트워크 연결을 관리합니다. 이 플랫폼은 두 가지 요구사항의 균형을 유지함으로써 기본적인 활성 네트워크를 선택합니다.

  • 긴 배터리 수명
  • 네트워크 대역폭

배터리 보존이 더 중요한 경우, 활성 네트워크에는 대용량 파일 전송이나 미디어 스트리밍과 같은 네트워크 작업을 위한 대역폭이 충분하지 않을 수 있습니다.

이 섹션에서는 ConnectivityManager 클래스를 사용하여 앱에 필요한 네트워크 대역폭이 있는지 확인할 수 있는 방법을 안내합니다. 네트워크 리소스의 세밀한 제어에 관한 일반적인 정보는 네트워크 사용 관리를 참고하세요.

Wi-Fi 연결 요청

대용량 파일 전송이나 미디어 스트리밍과 같이 고대역폭 네트워크 액세스가 필요한 사용 사례의 경우 Wi-Fi와 같은 고대역폭 전송을 통한 연결을 요청합니다. 예를 들면 다음과 같습니다.

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

배터리를 보존하기 위해 시계의 Wi-Fi 또는 무선 라디오가 꺼져 있을 수 있으므로 네트워크 확보가 즉시 이루어지지 않을 수 있습니다. 시계를 네트워크에 연결할 수 없으면 NetworkCallback 인스턴스의 onAvailable() 메서드가 호출되지 않습니다.

onAvailable()이 호출되면 기기는 NetworkCallback이 해제될 때까지 Wi-Fi 네트워크 연결을 유지하려고 합니다. 배터리 수명을 보존하려면 다음 예와 같이 더 이상 Wi-Fi 네트워크가 필요하지 않을 때 콜백을 해제합니다.

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

Wi-Fi 설정 활동 시작

Wi-Fi 네트워크를 요청할 때 시스템은 저장된 네트워크가 구성되고 범위 내에 있는 경우 이에 연결하려고 시도합니다. 저장된 Wi-Fi 네트워크를 사용할 수 없으면 NetworkCallback 인스턴스의 onAvailable() 콜백 메서드가 호출되지 않습니다.

Handler를 사용하여 네트워크 요청 시간을 제한하는 경우 시간 제한이 발생할 때 사용자에게 Wi-Fi 네트워크를 추가하라고 안내할 수 있습니다. 다음 인텐트를 사용하여 Wi-Fi 네트워크를 추가하는 활동으로 사용자를 직접 안내합니다.

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

설정 활동을 시작하려면 앱에 다음 권한이 있어야 합니다. android.permission.CHANGE_WIFI_STATE

사용자 인터페이스 고려 사항

고대역폭 작업을 위해 앱을 새로운 Wi-Fi 네트워크에 연결해야 하는 경우, Wi-Fi 설정을 시작하기 전에 연결 사유를 사용자에게 명확히 밝혀야 합니다. 고대역폭 네트워크가 필요할 때만 사용자에게 새 Wi-Fi 네트워크를 추가하도록 요청하고, 고대역폭 네트워크가 필요 없는 앱 기능에 사용자가 액세스하는 것을 차단하지 마세요.

그림 1은 음악 앱을 보여줍니다. 이 앱은 사용자가 저대역폭 네트워크에서 음악을 탐색하도록 허용하며, 사용자가 음악을 다운로드하거나 스트리밍하려는 경우에만 새로운 Wi-Fi 네트워크를 추가하도록 사용자에게 요청합니다.

음악 다운로드

그림 1. 음악을 다운로드하기 위한 음악 앱 흐름

전원 및 데이터 사용 고려사항

배터리 수명을 보존하고 모바일 데이터 사용량을 최소화하려면 Wear OS 기기에서 블루투스 또는 Wi-Fi 연결을 다시 설정할 때까지 분석 보고 또는 로그 수집과 같은 필수적이지 않은 네트워킹 작업을 연기하세요.

클라우드 메시징

알림을 전송하기 위해 앱은 Firebase 클라우드 메시징(FCM)을 직접 사용할 수 있습니다.

네트워크 액세스 또는 FCM용 API 중에서 Wear OS와 관련된 것은 없습니다. 네트워크에 연결클라우드 메시징에 관한 기존 문서를 참고하세요.

FCM은 잠자기 기능과 잘 작동하며, 시계에 알림을 보낼 때 사용하면 좋습니다.

Wear OS 앱이 실행될 때 기기의 등록 토큰을 수집하여 FCM의 메시지를 제공하세요. 그런 다음 서버가 FCM REST 엔드포인트로 메시지를 보낼 때 목적지의 일부로 토큰을 포함하세요. FCM은 토큰에 의해 식별된 기기로 메시지를 전송합니다.

FCM 메시지는 JSON(JavaScript Object Notation) 형식이며 다음 페이로드 중 하나 또는 둘 다를 포함할 수 있습니다.

  • 알림 페이로드: 시계에서 알림 페이로드를 수신하면 알림 스트림에서 사용자에게 직접 데이터가 표시됩니다. 사용자가 알림을 탭하면 앱이 실행됩니다.
  • 데이터 페이로드: 페이로드에는 맞춤 키 또는 값 쌍의 집합이 있습니다. 페이로드는 Wear OS 앱에 데이터로 전달됩니다.

페이로드에 관한 자세한 내용과 예는 FCM 메시지 정보를 참고하세요.

기본적으로 알림은 전화 앱에서 시계로 브리징됩니다. 독립형 Wear OS 앱과 그에 상응하는 전화 앱이 있는 경우 중복된 알림이 발생할 수 있습니다. 예를 들어, 휴대전화와 시계에서 모두 수신된 단일 FCM 알림이 두 기기에 별도로 표시될 수 있습니다. 브리지 API를 사용하여 이를 방지할 수 있습니다.

백그라운드 서비스 사용

백그라운드 작업이 올바르게 실행되려면 잠자기 및 앱 대기를 고려해야 합니다.

화면이 꺼지거나 오랜 시간 대기 모드에 머물게 되면 일부 잠자기가 발생할 수 있고 특정 기간에 백그라운드 작업이 지연될 수 있습니다. 나중에 기기가 장시간 정지되어 있으면 일반 잠자기가 발생합니다. 앱이 잠자기 안전 코드 실행을 등록할 수 있도록 하는 WorkManager API를 사용하여 요청을 예약하세요.

제약 조건을 사용하여 예약

제약 조건을 사용하여 배터리 수명을 보존하는 방식으로 요청을 구성할 수 있습니다. 다음 제약 조건 중 하나 이상을 선택하여 요청에 포함하세요.

  • 네트워킹이 필요한 요청을 예약합니다. NetworkTypeCONNECTED인지 UNMETERED인지 지정합니다. UNMETERED는 대규모 데이터 전송용이고 CONNECTED는 소규모 전송용입니다.
  • 충전하는 동안 요청을 예약합니다.
  • 기기가 유휴 상태일 때 요청을 예약합니다. 특히 기기가 충전 중일 때 우선순위가 낮은 백그라운드 작업 또는 동기화에 유용합니다.

블루투스 LE와 같은 일부 저대역폭 네트워크는 데이터 전송량 제한이 있는 것으로 간주됩니다.

자세한 내용은 WorkManager의 제약 조건이 주기적 작업에 미치는 영향 가이드를 참고하세요.