Per impostazione predefinita, le notifiche vengono condivise da un'app su uno smartphone a tutti gli smartwatch accoppiati. Se crei un'app per orologio e la tua app esiste anche su uno smartphone accoppiato, gli utenti potrebbero ricevere notifiche duplicate: una generata e condivisa dall'app per smartphone e una generata dall'app per orologio. Wear OS include funzionalità per controllare come e quando vengono condivise le notifiche.
Evitare notifiche duplicate
Quando crei notifiche da una fonte esterna, ad esempio da Firebase Cloud Messaging, la tua app mobile e la tua app per indossabili possono visualizzare ciascuna le proprie notifiche sullo smartwatch. Per evitare questo tipo di duplicazione, disattiva la condivisione a livello di programmazione nell'app per indossabili.
Utilizzare i tag ponte
Se vuoi trasferire alcune delle notifiche create nell'app mobile all'orologio quando l'app per indossabili è installata, imposta i tag di trasferimento.
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()
Disattivare il bridging
Puoi disattivare il bridging per alcune notifiche o per tutte le notifiche. Ti consigliamo di disattivare il bridging in modo selettivo.
Disattivare il bridging per alcune notifiche
Puoi disattivare dinamicamente il bridging e, facoltativamente, consentire il passaggio di alcune notifiche
in base al tag. Ad esempio, per disattivare il bridging per tutte le notifiche, ad eccezione di quelle taggate come
tagOne, tagTwo o tagThree, utilizza l'oggetto
BridgingConfig
come mostrato nell'esempio seguente:
// 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() )
Disattivare il bridging per tutte le notifiche (non consigliato)
Nota:la disattivazione del bridging per tutte le notifiche non è consigliata, perché la configurazione del bridging impostata nel manifest viene applicata non appena viene installata un'app per lo smartwatch. Ciò può comportare la perdita delle notifiche se l'utente deve aprire e configurare l'app per lo smartwatch prima di ricevere le notifiche.
Per impedire il bridging di tutte le notifiche di un'app per smartphone, utilizza la voce <meta-data> nel file manifest dell'app per orologio, come mostrato nell'esempio seguente:
<!-- 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" />
Nota:la specifica di una configurazione di bridging in fase di runtime sostituisce un'impostazione correlata al bridging nel file manifest Android.
Impostare un ID di chiusura per sincronizzare notifiche simili
Quando impedisci il bridging con la funzionalità della modalità bridging, le notifiche ignorate non vengono sincronizzate sui dispositivi di un utente.
Tuttavia, se vengono create notifiche simili sia sul dispositivo mobile che sullo smartwatch, vuoi che entrambe vengano chiuse quando l'utente chiude una delle due.
In
NotificationCompat.WearableExtender,
puoi impostare un ID univoco globale in modo che, quando una notifica viene ignorata, vengano ignorate anche le altre notifiche
con lo stesso ID sugli orologi accoppiati.
La classe
NotificationCompat.WearableExtender
dispone di metodi che consentono di utilizzare gli ID chiusura, come mostrato nell'esempio seguente:
Quando la notifica viene ignorata, tutte le altre notifiche con lo stesso ID di ignoramento vengono
ignorate sullo smartwatch e sullo smartphone. Per recuperare un ID chiusura, utilizza
getDismissalId()
Nell'esempio seguente, viene specificato un ID univoco globale per una nuova notifica, in modo che le chiusure vengano sincronizzate:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setDismissalId("abc123") ) .build()
Nota:gli ID licenziamento funzionano se uno smartwatch è accoppiato a uno smartphone Android, ma non se è accoppiato a un iPhone.
Quando le notifiche non vengono trasferite
I seguenti tipi di notifiche non vengono trasferiti:
- Notifiche solo locali impostate utilizzando
Notification.Builder.setLocalOnly(boolean). - Notifiche continue impostate utilizzando
Notification.Builder.setOngoing(boolean)oNotification.FLAG_ONGOING_EVENT. - Notifiche non eliminabili impostate utilizzando
Notification.FLAG_NO_CLEAR. - Notifiche in cui l'app wearable controparte ha disattivato il bridging delle notifiche, come descritto in precedenza.
Best practice per le notifiche bridge
L'invio o la rimozione delle notifiche bridge da un dispositivo indossabile richiede tempo. Quando progetti le notifiche, assicurati di evitare comportamenti imprevisti causati da questa latenza. Le seguenti linee guida ti aiutano a garantire che le notifiche bridge funzionino con le notifiche asincrone:
- Se annulli una notifica sullo smartphone, potrebbe essere necessario del tempo per annullare la notifica corrispondente sullo smartwatch. Durante questo periodo, l'utente potrebbe inviare uno degli intent in attesa nella notifica. Per questo motivo, continua a ricevere intent in attesa nella tua app dalle notifiche che ha annullato: quando annulli le notifiche, mantieni validi i ricevitori di intent in attesa di queste notifiche.
- Non annullare e riattivare contemporaneamente un intero gruppo di notifiche. Modifica o rimuovi solo le notifiche che sono state effettivamente modificate. In questo modo si evita la latenza nell'aggiornamento del dispositivo indossabile e si riduce l'impatto dell'app sulla durata della batteria.
Considerazioni sulla progettazione
Le notifiche di Wear OS hanno linee guida di progettazione specifiche. Per ulteriori informazioni, consulta le linee guida per la progettazione di Wear OS.