Domyślnie system przekazuje, czyli udostępnia, powiadomienia z aplikacji na telefonie na wszystkie sparowane zegarki. Jeśli utworzysz aplikację na zegarek, która jest też dostępna na sparowanym telefonie, użytkownicy mogą otrzymywać podwójne powiadomienia – jedno generowane i udostępniane przez aplikację na telefon, a drugie generowane przez aplikację na zegarek. Wear OS ma funkcje, które pozwalają kontrolować sposób i czas przekazywania powiadomień.
Unikanie podwójnych powiadomień
Gdy tworzysz powiadomienia ze źródła zewnętrznego, np. z Komunikacji w chmurze Firebase, aplikacja na telefon i aplikacja na zegarek mogą wyświetlać na zegarku własne powiadomienia. Aby uniknąć duplikowania, programowo wyłącz udostępnianie w aplikacji na zegarek.
Używanie tagów pomostowych
Aby przekazywać na zegarek niektóre powiadomienia generowane przez aplikację na telefon, gdy aplikacja na zegarek jest zainstalowana, ustaw tagi przekazywania.
Ustaw tag pomostowy w powiadomieniu za pomocą metody setBridgeTag(String), jak pokazano w tym przykładowym kodzie:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setBridgeTag("tagOne") ) .build()
Wyłącz udostępnianie powiadomień
Możesz wyłączyć udostępnianie powiadomień w przypadku niektórych lub wszystkich powiadomień. Zalecamy selektywne wyłączanie łączenia.
Wyłączanie udostępniania powiadomień tylko w przypadku niektórych powiadomień
Możesz dynamicznie wyłączać udostępnianie powiadomień i opcjonalnie zezwalać na przekazywanie niektórych powiadomień na podstawie ich tagu. Aby na przykład wyłączyć udostępnianie powiadomień w przypadku wszystkich powiadomień z wyjątkiem tych, które są oznaczone tagami tagOne, tagTwo lub tagThree, użyj obiektu BridgingConfig
w sposób pokazany w tym przykładzie:
// 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() )
Wyłączanie udostępniania powiadomień dla wszystkich powiadomień (niezalecane)
Aby zapobiec udostępnianiu powiadomień ze wszystkich powiadomień z aplikacji na telefon, użyj wpisu
<meta-data> w pliku manifestu aplikacji na zegarek, jak pokazano w tym przykładzie:
<!-- 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" />
Ustawianie identyfikatora zamykania w celu synchronizowania podobnych powiadomień
Gdy zapobiegasz udostępnianiu powiadomień za pomocą funkcji trybu łączenia, odrzucanie powiadomień nie jest synchronizowane na urządzeniach użytkownika.
Jeśli jednak podobne powiadomienia są tworzone zarówno na telefonie, jak i na zegarku, chcesz, aby oba zostały odrzucone, gdy użytkownik odrzuci jedno z nich.
W sekcji
NotificationCompat.WearableExtender
możesz ustawić globalny unikalny identyfikator, aby po odrzuceniu powiadomienia przez użytkownika odrzucane były też inne powiadomienia z tym samym identyfikatorem na sparowanych zegarkach.
Klasa NotificationCompat.WearableExtender ma metody, które umożliwiają używanie identyfikatorów zamknięcia, jak pokazano w tym przykładzie:
Gdy użytkownik odrzuci powiadomienie, wszystkie inne powiadomienia z tym samym identyfikatorem odrzucenia zostaną odrzucone na zegarku i na telefonie. Aby pobrać identyfikator odrzucenia, użyj getDismissalId().
W tym przykładzie dla nowego powiadomienia określono globalnie unikalny identyfikator, dzięki czemu zamknięcia są synchronizowane:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setDismissalId("abc123") ) .build()
Powiadomienia tylko lokalne
Aby uniknąć zduplikowanych powiadomień, możesz też użyć setLocalOnly(), aby powiadomienia były lokalne na telefonie.
Używaj tej metody tylko wtedy, gdy powiadomienie musi się wyświetlać tylko na urządzeniu, na którym zostało utworzone. Obejmuje to nie tylko urządzenia z Wear OS, ale też inne urządzenia do noszenia i wszelkie inne urządzenia połączone. Powiadomienie lokalne nie jest przekazywane, nawet jeśli aplikacja nie jest zainstalowana na zegarku.
Jeśli tworzysz aplikację na Wear OS i telefon, które generują powiadomienia, nie używaj tego podejścia, aby uniknąć zduplikowanych powiadomień. Zamiast tego użyj opcji pomostowych.
Na przykład użyj powiadomienia lokalnego, gdy użytkownik pobierze plik na telefonie, a powiadomienie będzie informować o zakończeniu pobierania.
Gdy powiadomienia nie są przekazywane
System nie przekazuje tych typów powiadomień:
- Powiadomienia lokalne ustawione za pomocą funkcji
Notification.Builder.setLocalOnly(boolean). - Powiadomienia o trwającej aktywności ustawione za pomocą
Notification.Builder.setOngoing(boolean)lubNotification.FLAG_ONGOING_EVENT. - Powiadomienia, których nie można zamknąć, ustawione za pomocą
Notification.FLAG_NO_CLEAR. - Powiadomienia, w których aplikacja na urządzenia do noszenia ma wyłączone udostępnianie powiadomień.
Uwagi dotyczące implementacji powiadomień pomostowych
Wysyłanie lub usuwanie powiadomień z urządzenia do urządzenia na rękę zajmuje trochę czasu. Podczas projektowania powiadomień unikaj nieoczekiwanego działania spowodowanego tym opóźnieniem. Poniższe wskazówki pomogą Ci zadbać o to, aby powiadomienia pomostowe działały z powiadomieniami asynchronicznymi:
- Jeśli anulujesz powiadomienie na telefonie, anulowanie odpowiedniego powiadomienia na zegarku może trochę potrwać. W tym czasie użytkownik może wysłać jeden z oczekujących zamiarów w tym powiadomieniu. Z tego powodu aplikacja nadal będzie otrzymywać oczekujące intencje z anulowanych powiadomień: podczas anulowania powiadomień zachowaj ważność odbiorców oczekujących intencji tych powiadomień.
- Nie anuluj i nie wywołuj ponownie wszystkich powiadomień naraz. Modyfikuj lub usuwaj tylko te powiadomienia, które zostały zmienione. Pozwala to uniknąć opóźnień w aktualizowaniu urządzenia do noszenia i zmniejsza wpływ aplikacji na żywotność baterii.
Uwagi dotyczące projektu
Powiadomienia na Wear OS mają własne wytyczne dotyczące projektowania. Więcej informacji znajdziesz we wskazówkach dotyczących projektowania na Wear OS.