通知のブリッジ オプション

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

スマートフォンのアプリからの通知は、デフォルトではペア設定されているすべてのスマートウォッチにブリッジ(共有)されます。スマートウォッチ アプリを作成する場合、ペア設定されているスマートフォンにもそのアプリが存在すると、重複する通知がユーザーに届くことがあります。1 通はスマートフォン アプリが生成したもの(ブリッジ)、もう 1 通はスマートウォッチ アプリが生成したものです。Wear OS には、通知をいつどのように「ブリッジ」するかを制御できる機能が搭載されています。

通知の重複を避ける

Firebase Cloud Messaging などの外部ソースから通知を作成する場合は、モバイルアプリとウェアラブル アプリのそれぞれに独自の通知が表示されることがあります。このような重複を避けるには、ブリッジを無効にするようウェアラブル アプリのプログラムで設定してください。

1. モバイルアプリでブリッジタグを使用する(必要な場合)

ウェアラブル アプリがインストールされている場合に、モバイルアプリで作成した通知の一部をスマートウォッチにブリッジさせたい場合はブリッジタグを設定します。

ブリッジタグを設定する

通知にブリッジタグを設定するには setBridgeTag(String) メソッドを使用します。次に例を示します。

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

2. ウェアラブル アプリでブリッジを無効にする

一部の通知のブリッジを無効にする

ブリッジを動的に無効にし、通知のタグに応じて一部の通知のみ任意で許可することもできます。たとえば、foobarbaz としてタグ付けされている通知を除くすべての通知のブリッジを無効にするには、BridgingConfig オブジェクトを使用します(この項の説明を参照)。

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

すべての通知のブリッジを無効にする(非推奨)

注: すべての通知のブリッジを無効にすることはおすすめしません。マニフェストで設定されたブリッジ設定はスマートウォッチ アプリのインストール後にすぐ有効になります。そのため、通知が届く前にユーザーがスマートウォッチ アプリを開いてセットアップする必要がある場合は、通知がなくなるおそれがあります。

スマートフォン アプリからのすべての通知をブリッジするのを避けるには、次の例に示すように、スマートウォッチ アプリのマニフェスト ファイルで <meta-data> エントリを使用してください。

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

注: 実行時にブリッジの設定を指定すると、Android マニフェスト ファイル内のブリッジ関連の設定がオーバーライドされます。

3. 消去操作 ID を設定して Wear OS とモバイルで同様の通知を同期させる

ブリッジモード機能を使用してブリッジを防止している場合、ユーザーのデバイス間で通知の消去操作(キャンセル)が同期されません。

しかし、同様の通知がモバイルとスマートウォッチの両方で作成された場合に、ユーザーがどちらかの通知を消去したら両方の通知を消去したい場合もあります。

NotificationCompat.WearableExtender でグローバルな一意の ID を設定すると、1 つの通知が消去されたときに、ペア設定されたスマートウォッチ上の同じ 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()

注: 消去操作 ID は、スマートウォッチが Android スマートフォンとペア設定されている場合は機能しますが、iPhone とペア設定されている場合は機能しません。

通知がブリッジされない場合

以下の場合、通知はブリッジされません。

ブリッジ通知に関するおすすめの方法

ブリッジした通知を、ウェアラブル デバイスからプッシュまたは削除するのには時間がかかります。通知を設計する際には、こうした遅延によって予期しない動作が起きないようにする必要があります。以下のガイドラインに沿って設計することで、ブリッジ通知と非同期通知を連携させることができます。

  • スマートフォンで通知をキャンセルしても、対応する通知がスマートウォッチでキャンセルされるまでに時間がかかることがあります。その間に、ユーザーがその通知に対するペンディング インテントのいずれかを送信する可能性があります。そのため、キャンセルされた通知からペンディング インテントを、アプリで受け取る必要があります。通知がキャンセルされたときに、通知のペンディング インテントのレシーバーを有効なままにしておく必要があります。
  • 通知のスタック全体のキャンセルと再トリガーを同時に行わないでください。実際に変更された通知のみを変更または削除します。これにより、ウェアラブル デバイスのアップデート時の遅延を回避し、アプリがバッテリー寿命に及ぼす影響を最小限に抑えることができます。

設計に関する注意事項

Wear OS の通知には独自の設計ガイドラインがあります。詳しくは、Wear OS の設計ガイドラインをご覧ください。