Sistem, varsayılan olarak bir telefon uygulamasından gelen bildirimleri köprüler veya eşlenmiş tüm kol saatleriyle paylaşır. Bir kol saati uygulaması oluşturursanız ve uygulamanız eşlenmiş bir telefonda da bulunuyorsa kullanıcılar yinelenen bildirimler alabilir. Bu bildirimlerden biri telefon uygulaması tarafından oluşturulup köprülenir, diğeri ise kol saati uygulaması tarafından oluşturulur. Wear OS, bildirimlerin nasıl ve ne zaman köprülenmesini kontrol etmenizi sağlayan özellikler içerir.
Yinelenen bildirimleri önleme
Firebase Cloud Messaging gibi harici bir kaynaktan bildirim oluşturduğunuzda telefon uygulamanız ve kol saati uygulamanız, kol saatinde kendi bildirimlerini gösterebilir. Yinelemeyi önlemek için kol saati uygulamanızda köprülemeyi programatik olarak devre dışı bırakın.
Köprü etiketlerini kullanma
Telefon uygulamanızın oluşturduğu bazı bildirimleri, saat uygulamanız yüklendiğinde saate aktarmak için köprü etiketleri ayarlayın.
Aşağıdaki kod örneğinde gösterildiği gibi, setBridgeTag(String) yöntemini kullanarak bir bildirime köprü etiketi ayarlayın:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setBridgeTag("tagOne") ) .build()
Köprü modunu devre dışı bırakma
Köprülemeyi bazı bildirimler veya tüm bildirimler için devre dışı bırakabilirsiniz. Köprülemeyi seçerek devre dışı bırakmanızı öneririz.
Köprü modunu yalnızca bazı bildirimler için devre dışı bırakma
Köprülemeyi dinamik olarak devre dışı bırakabilir ve isteğe bağlı olarak bazı bildirimlerin etiketlerine göre geçmesine izin verebilirsiniz. Örneğin, tagOne, tagTwo veya tagThree olarak etiketlenenler hariç tüm bildirimler için köprülemeyi devre dışı bırakmak istiyorsanız aşağıdaki örnekte gösterildiği gibi BridgingConfig nesnesini kullanın:
// 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() )
Tüm bildirimler için köprü oluşturmayı devre dışı bırakma (önerilmez)
Bir telefon uygulamasından gelen tüm bildirimlerin köprülenmesini önlemek için aşağıdaki örnekte gösterildiği gibi, kol saati uygulamasının manifest dosyasındaki <meta-data> girişini kullanın:
<!-- 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" />
Benzer bildirimleri senkronize etmek için kapatma kimliği ayarlama
Köprüleme modu özelliğiyle köprülemeyi engellediğinizde bildirimlerin kapatılması kullanıcının cihazları arasında senkronize edilmez.
Ancak hem telefonda hem de kol saatinde benzer bildirimler oluşturulursa kullanıcı bunlardan birini kapattığında her iki bildirimin de kapatılmasını istersiniz.
NotificationCompat.WearableExtender içinde,
kullanıcı bir bildirimi kapattığında eşlenmiş kol saatlerindeki aynı kimliğe sahip diğer bildirimlerin de kapatılması için
genel bir benzersiz kimlik ayarlayabilirsiniz.
NotificationCompat.WearableExtender sınıfında, aşağıdaki örnekte gösterildiği gibi kapatma kimliklerini kullanmanıza olanak tanıyan yöntemler bulunur:
Kullanıcı bildirimi kapattığında aynı kapatma kimliğine sahip diğer tüm bildirimler saatte ve telefonda kapatılır. Reddetme kimliğini almak için getDismissalId() kullanın.
Aşağıdaki örnekte, yeni bir bildirim için genel olarak benzersiz bir kimlik belirtildiğinden kapatmalar senkronize edilir:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setDismissalId("abc123") ) .build()
Yalnızca yerel bildirimler
Yinelenen bildirimleri önlemek için setLocalOnly() seçeneğini kullanarak bildirimleri telefona özel hale getirebilirsiniz.
Ancak bu yöntemi yalnızca bildirimin yalnızca oluşturulduğu cihazda görünmesi gerekiyorsa kullanın. Bu kapsamda yalnızca Wear OS cihazlar değil, diğer giyilebilir cihazlar ve bağlı tüm cihazlar yer alır. Yalnızca yerel bildirimler, uygulamanız kol saatine yüklenmemiş olsa bile köprülenmez.
Hem Wear OS hem de telefon uygulamasında bildirim oluşturuluyorsa yinelenen bildirimleri önlemek için bu yaklaşımı kullanmayın. Bunun yerine köprüleme seçeneklerini kullanın.
Örneğin, kullanıcı telefona dosya indirdiğinde yalnızca yerel bildirim kullanın ve bildirimde indirmenin tamamlandığı belirtilsin.
Bildirimler köprülenmediğinde
Sistem, aşağıdaki bildirim türlerini köprülemez:
Notification.Builder.setLocalOnly(boolean)kullanılarak ayarlanan yalnızca yerel bildirimler.Notification.Builder.setOngoing(boolean)veyaNotification.FLAG_ONGOING_EVENTkullanılarak ayarlanan devam eden görev bildirimleri.Notification.FLAG_NO_CLEARkullanılarak ayarlanan, temizlenemeyen bildirimler.- Karşı taraftaki giyilebilir uygulama özelliğinin bildirim köprüsü özelliğini devre dışı bıraktığı bildirimler.
Köprülenmiş bildirimlerle ilgili uygulama hususları
Köprülenmiş bildirimlerin giyilebilir cihaza gönderilmesi veya kaldırılması zaman alır. Bildirimlerinizi tasarlarken bu gecikmeden kaynaklanan beklenmedik davranışlardan kaçının. Aşağıdaki yönergeler, köprülenmiş bildirimlerinizin eşzamansız bildirimlerle çalışmasını sağlamaya yardımcı olur:
- Telefonda bir bildirimi iptal ettiğinizde, ilgili bildirimin saatte iptal edilmesi biraz zaman alabilir. Bu süre zarfında kullanıcı, söz konusu bildirimdeki bekleyen amaçlardan birini gönderebilir. Bu nedenle, uygulamanızda iptal edilen bildirimlerden gelen bekleyen amaçları almaya devam edin: Bildirimleri iptal ederken bu bildirimlerin bekleyen amaç alıcılarını geçerli tutun.
- Tüm bildirim yığınını aynı anda iptal edip yeniden tetiklemeyin. Yalnızca gerçekten değiştirilmiş olan bildirimleri değiştirin veya kaldırın. Bu sayede giyilebilir cihazın güncellenmesindeki gecikme önlenir ve uygulamanızın pil ömrü üzerindeki etkisi azaltılır.
Tasarım konusunda dikkat edilmesi gereken noktalar
Wear OS bildirimlerinin kendi tasarım kuralları vardır. Daha fazla bilgi için Wear OS Tasarım Kuralları'na bakın.