通知的橋接選項

Stay organized with collections Save and categorize content based on your preferences.

根據預設,系統會把手機上的應用程式通知橋接 (分享) 給配對的手錶。如果您建構了手錶應用程式,而配對手機上也有您的應用程式,那麼應用程式可能會出現重複的通知。Wear OS 備有可以解決這個問題的功能。

避免重複通知

如果您使用 Firebase 雲端通訊等外部來源建立通知,行動應用程式和穿戴式應用程式就可能會各自在手錶上顯示自己的通知。您可以在系統安裝穿戴式應用程式的情況下停用橋接功能,就能避免發生這種重複情況。

1. 適用時,在行動應用程式中使用橋接標記

如果想在已安裝穿戴式應用程式的情況下把一部分行動應用程式所建立的通知橋接到手錶上,請設定橋接標記。

設定橋接標記

使用 setBridgeTag(String) 方法即可為通知設定橋接標記,如以下程式碼範例所示:

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

2. 在穿戴式應用程式中停用橋接功能

如果使用了橋接標記,請在執行階段停用橋接功能。

在例外狀況下停用橋接功能

透過使用 BridgingManager 物件,您就能設定橋接模式,並可選擇用標記讓橋接模式不使用部分通知。請按照本節說明內容建立 BridgingConfig 物件。

您可以停用所有通知的橋接功能,只留下設有特定標記的通知。例如,您可以停用除了標記 foobarbaz 之外所有通知的橋接功能,如以下範例所示:

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

停用所有通知的橋接功能

如果您不使用行動裝置的橋接標記,並想防止手機應用程式任何通知的橋接功能,請在手錶應用程式的資訊清單檔案中加入 <meta-data> 項目,如以下範例所示:

com.google.android.wearable.notificationBridgeMode

<meta-data> 項目設為 <application> 元素的子項。把中繼資料項目設定為 NO_BRIDGING,如以下範例所示:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

如果您並未納入<meta-data>項目,或是您把值設定為 BRIDGING 而不是 NO_BRIDGING,則系統會採用預設的橋接行為。

資訊清單裡的橋接設定會在安裝手錶應用程式後立刻生效。

注意:如果在執行階段指定橋接設定,則會覆寫 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 配對則無法使用。

不橋接通知的情況

系統在以下情況不會橋接通知:

橋接通知的最佳做法

在穿戴式裝置推送和移除橋接通知都需要時間。在設計通知時,請務必避免由於這個延遲時間而發生預料之外的行為。以下指南可以幫助您確保在非同步通知的情況下順利使用橋接通知:

  • 在手機上取消通知時,系統可能需要一點時間才能取消手錶上對應的通知。在這段時間內,使用者可能會用該通知傳送待處理的意圖。因此,應用程式應該要能接收來自己取消通知的待處理意圖。所以,當取消通知時,請確定這些通知的待處理意圖接收器能夠繼續有效運作。
  • 請勿一次取消並重新觸發整個堆疊的通知。只修改或移除內容實際有所變動的通知。這樣做可以避免因更新穿戴式裝置而造成延遲,並把應用程式對電池續航力造成的影響降到最低。

設計須知

Wear OS 通知有專用的設計規範。詳情請參閱「Wear OS 設計規範」。