Opcje mostków dla powiadomień

Domyślnie powiadomienia są połączone (czyli udostępniane) z aplikacji na telefonie do wszystkich sparowanych zegarków. Jeśli utworzysz aplikację na zegarek, a Twoja aplikacja jest też dostępna na sparowanym telefonie, użytkownicy mogą otrzymywać podwójne powiadomienia – te generowane i połączone przez aplikację na telefon, a drugie przez aplikację na zegarek. Wear OS zawiera funkcje umożliwiające kontrolowanie sposobu i czasu łączenia powiadomień.

Unikanie powielania powiadomień

Gdy tworzysz powiadomienia ze źródła zewnętrznego, np. z Komunikacji w chmurze Firebase, aplikacja mobilna i aplikacja do noszenia mogą wyświetlać na zegarku własne powiadomienia. Aby uniknąć tego typu duplikatu, automatycznie wyłącz połączenie w swojej aplikacji na urządzenia do noszenia.

Używanie tagów mostków

Jeśli chcesz połączyć niektóre powiadomienia utworzone w aplikacji mobilnej z zegarkiem, gdy zainstalowana jest aplikacja do noszenia, ustaw tagi mostków.

Ustaw tag mostka w powiadomieniu, korzystając z metody setBridgeTag(String), jak w tym przykładowym kodzie:

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

Wyłącz połączenie

Łączenie można wyłączyć dla niektórych lub wszystkich powiadomień. Zalecamy selektywne wyłączenie łączenia.

Wyłącz połączenie w niektórych powiadomieniach

Możesz dynamicznie wyłączyć połączenie pośrednie i opcjonalnie zezwolić na wyświetlanie niektórych powiadomień na podstawie ich tagów. Aby na przykład wyłączyć połączenie dla wszystkich powiadomień z wyjątkiem tych oznaczonych jako tagOne, tagTwo lub tagThree, użyj obiektu BridgingConfig w sposób pokazany poniżej:

BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, false)
        .addExcludedTags(listOf("tagOne", "tagTwo", "tagThree"))
        .build()
)

Wyłącz połączenie w przypadku wszystkich powiadomień (niezalecane)

Uwaga: nie zalecamy wyłączania łączenia w przypadku wszystkich powiadomień, ponieważ konfiguracja połączenia określona w pliku manifestu zaczyna obowiązywać od razu po zainstalowaniu aplikacji na zegarek. Może to spowodować utratę powiadomień, jeśli użytkownik będzie musiał otworzyć i skonfigurować aplikację na zegarek, zanim będzie mógł je otrzymać.

Aby zapobiec łączeniu wszystkich powiadomień z aplikacji na telefon, użyj wpisu <meta-data> w pliku manifestu aplikacji na zegarek, jak w tym przykładzie:

<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>

Uwaga: określenie konfiguracji łączenia w czasie działania zastępuje ustawienie dotyczące łączenia w pliku manifestu Androida.

Ustaw identyfikator odrzucenia, aby synchronizować podobne powiadomienia

Jeśli uniemożliwisz łączenie za pomocą funkcji trybu łączenia, odrzucenia powiadomień nie będą synchronizowane na urządzeniach użytkownika.

Jeśli jednak podobne powiadomienia są tworzone zarówno na urządzeniu mobilnym, jak i na zegarku, chcesz, aby obydwa powiadomienia zamykały się, gdy użytkownik zamknie jedno z nich.

W NotificationCompat.WearableExtender możesz ustawić globalny unikalny identyfikator, tak aby po odrzuceniu powiadomienia inne powiadomienia o tym samym identyfikatorze na sparowanych zegarkach również były zamykane.

Klasa NotificationCompat.WearableExtender zawiera metody umożliwiające używanie identyfikatorów odrzuceń, jak w tym przykładzie:

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

Aby zsynchronizować odrzucenie, użyj metody setDismissalId(). W przypadku każdego powiadomienia przekaż unikalny identyfikator globalnie jako ciąg znaków podczas wywoływania metody setDismissalId().

Po odrzuceniu powiadomienia wszystkie pozostałe powiadomienia z tym samym identyfikatorem odrzucenia zostaną odrzucone na zegarku i telefonie. Aby pobrać identyfikator odrzucenia, użyj kodu getDismissalId()

W przykładzie poniżej dla nowego powiadomienia jest określony unikalny identyfikator globalnie, więc odrzucenia są synchronizowane:

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

Uwaga: identyfikatory odrzucenia działają, jeśli zegarek jest sparowany z telefonem z Androidem, ale nie jeśli zegarek jest sparowany z iPhonem.

Gdy powiadomienia nie są połączone

Te typy powiadomień nie są połączone:

Sprawdzone metody dotyczące połączonych powiadomień

Przekazywanie połączonych powiadomień z urządzenia do noszenia lub usuwanie ich z niego może trochę potrwać. Podczas projektowania powiadomień pamiętaj, aby uniknąć nieoczekiwanych zachowań spowodowanych tym opóźnieniem. Te wytyczne pomogą Ci zadbać o to, by połączone powiadomienia działały z powiadomieniami asynchronicznymi:

  • Jeśli anulujesz powiadomienie na telefonie, anulowanie odpowiadającego mu powiadomienia na zegarku może trochę potrwać. W tym czasie użytkownik może wysłać jedną z oczekujących intencji dla tego powiadomienia. Dlatego nadal otrzymuj w aplikacji intencje oczekujące z powiadomień, które zostały anulowane. Anulując powiadomienia, zachowaj ważność oczekujących odbiorców tych powiadomień.
  • Nie anuluj i nie aktywuj ponownie całego stosu powiadomień jednocześnie. Zmień lub usuń tylko te powiadomienia, które zostały rzeczywiście zmodyfikowane. Pozwala to uniknąć opóźnień przy aktualizacji urządzenia do noszenia i zmniejsza czas pracy aplikacji na baterii.

Uwagi dotyczące projektu

Powiadomienia na Wear OS mają własne wytyczne dotyczące wyglądu. Więcej informacji znajdziesz w wytycznych dotyczących projektowania aplikacji na Wear OS.