독립형 기기에서 네트워크를 통해 직접 통신

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

네트워크 액세스

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

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

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

정기적인 간격으로 폴링하는 것을 포함하여 비동기식 요청에는 WorkManager를 사용합니다.

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

고대역폭 네트워크 액세스

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"));

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

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

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

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

음악 다운로드

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

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

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

클라우드 메시징

알림을 보내려면 Firebase 클라우드 메시징 (FCM)을 직접 사용하세요.

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

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는 소규모 전송용입니다.

  • 충전하는 동안 요청을 예약합니다.

  • 기기가 유휴 상태일 때 요청을 예약합니다. 특히 기기가 충전 중일 때 우선순위가 낮은 백그라운드 작업 또는 동기화에 유용합니다.

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