Opzioni di collegamento per le notifiche

Per impostazione predefinita, le notifiche vengono collegate o condivise da un'app sul telefono a qualsiasi smartwatch accoppiato. Se crei un'app per smartwatch e la tua app è presente anche su uno smartphone accoppiato, gli utenti potrebbero ricevere notifiche duplicate: una generata e collegata dall'app dello smartwatch e una generata dall'app dell'orologio. Wear OS include funzionalità che consentono di controllare come e quando le notifiche vengono collegate.

Evitare di ricevere notifiche duplicate

Quando crei notifiche da una fonte esterna, ad esempio da Firebase Cloud Messaging, la tua app mobile e la tua app indossabile possono mostrare ciascuna le proprie notifiche sull'orologio. Per evitare questo tipo di duplicazione, disattiva in modo programmatico il bridging nella tua app indossabile.

Utilizzare i tag bridge

Se vuoi trasferire alcune delle notifiche create sull'app mobile all'orologio quando la tua app indossabile è installata, imposta i tag bridge.

Imposta un tag bridge su una notifica utilizzando il metodo setBridgeTag(String), come mostrato nel seguente esempio di codice:

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

Disattiva bridging

Puoi disattivare il collegamento per alcune notifiche o per tutte le notifiche. Ti consigliamo di disattivare selettivamente il collegamento.

Disattiva il bridging per alcune notifiche

Puoi disabilitare in modo dinamico il bridging e, facoltativamente, consentire l'invio di alcune notifiche in base al tag. Ad esempio, per disabilitare il bridging per tutte le notifiche tranne quelle taggate come tagOne, tagTwo o tagThree, utilizza l'oggetto BridgingConfig come mostrato nell'esempio seguente:

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

Disattiva il bridging per tutte le notifiche (opzione non consigliata)

Nota: la disattivazione del bridging per tutte le notifiche non è consigliata, poiché la configurazione di bridging impostata nel manifest viene applicata non appena viene installata un'app dell'orologio. Ciò può comportare la perdita delle notifiche se l'utente deve aprire e configurare l'app dell'orologio prima di ricevere le notifiche.

Per impedire il briding di tutte le notifiche da un'app per smartphone, usa la voce <meta-data> nel file manifest dell'app dell'orologio, come mostrato nell'esempio seguente:

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

Nota: la specifica di una configurazione di bridging in fase di runtime sostituisce un'impostazione relativa al bridging nel file manifest di Android.

Imposta un ID ignorato per sincronizzare notifiche simili

Quando impedisci il collegamento con la funzionalità modalità di collegamento, gli annullamenti delle notifiche non vengono sincronizzati tra i dispositivi dell'utente.

Tuttavia, se vengono create notifiche simili sia sul dispositivo mobile che sullo smartwatch, è opportuno che entrambe le notifiche vengano ignorate quando l'utente ignora una di queste.

In NotificationCompat.WearableExtender, puoi impostare un ID univoco globale in modo che, quando una notifica viene chiusa, anche le altre notifiche con lo stesso ID sugli smartwatch accoppiati vengono ignorate.

La classe NotificationCompat.WearableExtender offre metodi che consentono di utilizzare ID ignorabili, come mostrato nell'esempio seguente:

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

Per sincronizzare un messaggio ignorato, utilizza il metodo setDismissalId(). Per ogni notifica, trasmetti un ID univoco globale come stringa quando chiami il metodo setDismissalId().

Quando la notifica viene ignorata, tutte le altre notifiche con lo stesso ID vengono ignorate sullo smartwatch e sullo smartphone. Per recuperare un ID ignorato, utilizza getDismissalId()

Nell'esempio seguente, per una nuova notifica viene specificato un ID univoco globale per una nuova notifica, pertanto gli annullamenti vengono sincronizzati:

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

Nota: gli ID ignorati funzionano se l'orologio è accoppiato a un telefono Android, ma non se l'orologio è accoppiato a un iPhone.

Se le notifiche non sono collegate

I seguenti tipi di notifiche non sono collegati:

Best practice per le notifiche in bridge

L'invio o la rimozione delle notifiche in bridge da un dispositivo indossabile richiede tempo. Quando progetti le notifiche, assicurati di evitare comportamenti imprevisti causati da questa latenza. Le seguenti linee guida contribuiscono a garantire che le notifiche in bridge funzionino con le notifiche asincrone:

  • Se annulli una notifica sullo smartphone, potrebbe essere necessario un po' di tempo per annullare la notifica corrispondente sullo smartwatch. Durante questo periodo, l'utente potrebbe inviare uno degli intent in sospeso per tale notifica. Per questo motivo, continua a ricevere gli intent in sospeso nella tua app dalle notifiche che ha annullato: quando annulli le notifiche, mantieni validi i relativi ricevitori di intent in sospeso.
  • Non annullare e non riattivare un intero stack di notifiche alla volta. Modifica o rimuovi solo le notifiche che sono state effettivamente modificate. In questo modo si evita la latenza durante l'aggiornamento del dispositivo indossabile e si riduce l'impatto della tua app sulla durata della batteria.

Considerazioni sulla progettazione

Le notifiche di Wear OS hanno linee guida specifiche per il design. Per ulteriori informazioni, leggi le linee guida per la progettazione di Wear OS.