알림 브리징 옵션

기본적으로 시스템은 휴대전화 앱의 알림을 브리징(공유)하여 페어링된 시계로 보냅니다. 시계 앱을 빌드하고 앱이 페어링된 휴대전화에도 있으면 사용자는 중복 알림을 수신할 수도 있습니다. 하나는 휴대전화 앱에서 생성되고 브리징된 알림이고 하나는 시계 앱에서 생성된 알림입니다. Wear OS에는 알림이 브리징되는 방법과 시점을 제어하는 기능이 포함되어 있습니다.

중복 알림 피하기

Firebase 클라우드 메시징과 같은 외부 소스에서 알림을 만드는 경우 휴대전화 앱과 시계 앱은 각각 시계에 자체 알림을 표시할 수 있습니다. 중복을 방지하려면 시계 앱에서 프로그래매틱 방식으로 브리징을 사용 중지하세요.

브리지 태그 사용

시계 앱이 설치된 경우 휴대전화 앱에서 생성된 알림 중 일부를 시계에 브리징하려면 브리지 태그를 설정합니다.

다음 코드 샘플과 같이 setBridgeTag(String) 메서드를 사용하여 알림에 브리지 태그를 설정합니다.

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setBridgeTag("tagOne")
    )
    .build()

브리징 사용 중지

일부 알림 또는 모든 알림에 관해 브리징을 사용 중지할 수 있습니다. 브리징을 선택적으로 사용 중지하는 것이 좋습니다.

일부 알림에만 브리징 사용 중지

브리징을 동적으로 사용 중지하고 선택적으로 태그에 따라 일부 알림을 허용할 수 있습니다. 예를 들어 tagOne, tagTwo, 또는 tagThree로 태그가 지정된 알림을 제외한 모든 알림에 관해 브리징을 사용 중지하려면 다음 예와 같이 BridgingConfig 객체를 사용합니다.

// In this example, bridging is only enabled for tagOne, tagTwo and tagThree.
BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, isBridgingEnabled = false)
        .addExcludedTags(listOf("tagOne", "tagTwo", "tagThree"))
        .build()
)

모든 알림에 브리징 사용 중지 (권장하지 않음)

휴대전화 앱의 모든 알림을 브리징하지 않으려면 다음 예와 같이 시계 앱의 매니페스트 파일에 있는 <meta-data> 항목을 사용합니다.

<!-- Beware, this can have unintended consequences before the user is signed-in -->
<meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />

닫기 ID를 설정하여 유사한 알림 동기화

브리징 모드 기능으로 브리징을 방지하면 알림의 닫기가 사용자의 기기 전체에서 동기화되지 않습니다.

하지만 휴대전화와 시계 모두에서 유사한 알림이 생성되는 경우 사용자가 둘 중 하나를 닫을 때 두 알림이 모두 닫히도록 하는 것이 좋습니다.

In the NotificationCompat.WearableExtender, you can set a global unique ID so that when a user dismisses a notification, other notifications with the same ID on paired watches are also dismissed.

NotificationCompat.WearableExtender 클래스에는 다음 예와 같이 닫기 ID를 사용할 수 있는 메서드가 있습니다.

사용자가 알림을 닫으면 동일한 닫기 ID가 있는 다른 모든 알림도 시계 및 휴대전화에서 닫힙니다. 닫기 ID를 검색하려면 getDismissalId()를 사용하세요.

다음 예에서는 전역 고유 ID가 새 알림에 관해 지정되므로 닫기가 동기화됩니다.

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setDismissalId("abc123")
    )
    .build()

로컬 전용 알림

중복 알림을 방지하려면 setLocalOnly()를 사용하여 알림을 휴대전화에 로컬로 만들 수도 있습니다.

하지만 이 메서드는 알림이 알림을 만든 기기에 표시되어야 하는 경우에만 사용하세요. 여기에는 Wear OS 기기뿐만 아니라 다른 웨어러블 기기 및 기타 연결된 기기도 포함됩니다. 앱이 시계에 설치되어 있지 않더라도 로컬 전용 알림은 브리징되지 않습니다.

알림을 모두 만드는 Wear OS 및 휴대전화 앱을 빌드할 때는 중복 알림을 방지하기 위해 이 접근 방식을 사용하지 마세요. 대신 브리징 옵션을 사용하세요.

예를 들어 사용자가 휴대전화에서 파일을 다운로드하고 알림에 다운로드가 완료되었다고 표시되는 경우 로컬 전용 알림을 사용합니다.

알림이 브리징되지 않는 경우

시스템은 다음 유형의 알림을 브리징하지 않습니다.

브리징된 알림의 구현 고려사항

웨어러블 기기에서 브리징된 알림을 푸시하거나 삭제하는 데 시간이 걸립니다. 알림을 디자인할 때 이 지연 시간으로 인해 예기치 않은 동작이 발생하지 않도록 해야 합니다. 다음 가이드라인을 따르면 브리징된 알림이 비동기 알림과 호환됩니다.

  • 휴대전화에서 알림을 취소하면 시계에서 상응하는 알림을 취소하는 데 시간이 걸릴 수 있습니다. 그동안 사용자는 해당 알림에서 대기 중인 인텐트 중 하나를 보낼 수 있습니다. 따라서 취소된 알림에서 대기 중인 인텐트를 앱에서 계속 수신합니다. 알림을 취소할 때 이러한 알림의 대기 중인 인텐트 수신자를 유효한 상태로 유지하세요.
  • 한 번에 전체 알림 스택을 취소하고 다시 트리거하지 않습니다. 실제로 수정된 알림만 수정 또는 삭제하세요. 이렇게 하면 웨어러블 기기를 업데이트할 때 지연 시간을 피할 수 있고 배터리 수명에 미치는 앱의 영향을 줄일 수 있습니다.

설계 고려사항

Wear OS 알림에는 고유한 디자인 가이드라인이 있습니다. 자세한 내용은 Wear OS 디자인 가이드라인을 참고하세요.