알림 브리징 옵션

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

기본적으로 알림은 휴대전화의 앱에서 페어링된 시계로 브리징(공유)됩니다. 시계 앱을 빌드하고 이 앱이 페어링된 휴대전화에도 존재하는 경우, 사용자는 중복 알림을 받을 수 있습니다. 즉, 하나는 휴대전화 앱에서 생성된 알림이고(브리징됨) 다른 하나는 시계 앱에서 생성된 알림입니다. Wear OS에는 알림이 '브리징'되는 방법과 시점을 제어하는 기능이 포함됩니다.

중복 알림 피하기

Firebase 클라우드 메시징과 같은 외부 소스에서 알림을 만드는 경우 모바일 앱과 웨어러블 앱은 각각 시계에 자체 알림을 표시할 수도 있습니다. 이러한 종류의 중복을 방지하려면 웨어러블 앱에서 프로그래매틱 방식으로 브리징을 사용 중지해야 합니다.

1. 모바일 앱에서 브리지 태그(해당하는 경우)를 사용합니다.

웨어러블 앱이 설치된 경우 모바일 앱에서 생성된 알림 중 일부를 시계에 브리징하려면 브리지 태그를 설정합니다.

브리지 태그 설정

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

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

2. 웨어러블 앱에서 브리징 중지

일부 알림에 브리징 사용 안 함

브리징을 동적으로 사용 중지하고 태그에 따라 일부 알림을 허용하도록 선택할 수 있습니다. 예를 들어, foo, bar 또는 baz로 태그가 지정된 알림을 제외한 모든 알림에 브리징을 사용 중지하려면 이 섹션에 표시된 대로 BridgingConfig 객체를 사용하면 됩니다.

BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, false)
        .addExcludedTags(listOf("foo", "bar", "baz"))
        .build()
)

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

참고: 매니페스트에 설정된 브리징 구성은 시계 앱이 설치되는 즉시 적용되므로 모든 알림에 관해 브리징을 사용 중지하는 것은 권장하지 않습니다. 이로 인해 사용자가 알림을 받기 전에 시계 앱을 열고 설정해야 한다면 알림이 손실될 수 있습니다.

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

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

참고: 런타임 시 브리징 구성을 지정하면 Android 매니페스트 파일의 브리징 관련 설정이 재정의됩니다.

3. 닫기 ID를 설정하여 Wear OS와 모바일에서 유사한 알림 동기화

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

그러나 모바일과 시계에서 모두 비슷한 알림이 생성되는 경우 사용자가 두 알림 중 하나를 닫더라도 두 알림이 모두 닫히도록 할 수 있습니다.

NotificationCompat.WearableExtender에서 전역 고유 ID를 설정할 수 있습니다. 따라서 한 알림이 닫히면 페어링된 시계에서 동일한 ID를 가진 다른 알림도 닫힙니다.

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

fun setDismissalId(dismissalId: String): WearableExtender
fun getDismissalId(): String

닫기를 동기화하려면 setDismissalId() 메서드를 사용합니다. setDismissalId() 메서드를 호출할 때 각 알림에 전역 고유 ID를 문자열로서 전달합니다.

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

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

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

참고: Android 휴대전화에서 시계가 페어링된 경우에는 닫기 ID가 작동하지만 iPhone에서 시계가 페어링된 경우에는 닫기 ID가 작동하지 않습니다.

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

다음과 같은 경우에는 알림이 브리징되지 않습니다.

브리징된 알림에 관한 권장사항

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

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

디자인 고려사항

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