به طور پیشفرض، سیستم، اعلانها را از یک برنامه تلفن به هر ساعت جفتشدهای پل میزند یا به اشتراک میگذارد. اگر یک برنامه ساعت بسازید و برنامه شما در یک تلفن جفتشده نیز وجود داشته باشد، کاربران ممکن است اعلانهای تکراری دریافت کنند - یکی که برنامه تلفن ایجاد میکند و پل میزند، و دیگری که برنامه ساعت تولید میکند. Wear OS شامل ویژگیهایی برای کنترل نحوه و زمان پل زدن اعلانها است.
جلوگیری از ارسال اعلانهای تکراری
وقتی اعلانها را از یک منبع خارجی، مانند Firebase Cloud Messaging ، ایجاد میکنید، برنامه تلفن و برنامه ساعت شما میتوانند هر کدام اعلانهای خود را در ساعت نمایش دهند. برای جلوگیری از تکرار، پل زدن را در برنامه ساعت خود به صورت برنامهنویسی غیرفعال کنید.
استفاده از برچسبهای پل
برای اتصال برخی از اعلانهایی که برنامه تلفن شما هنگام نصب برنامه ساعت به ساعت ایجاد میکند، برچسبهای اتصال را تنظیم کنید.
با استفاده از متد setBridgeTag(String) ، همانطور که در نمونه کد زیر نشان داده شده است، یک برچسب پل (bridge tag) روی یک اعلان تنظیم کنید:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setBridgeTag("tagOne") ) .build()
غیرفعال کردن پل زدن
شما میتوانید قابلیت پل زدن را برای برخی از اعلانها یا برای همه اعلانها غیرفعال کنید. توصیه میکنیم که به صورت انتخابی قابلیت پل زدن را غیرفعال کنید.
غیرفعال کردن قابلیت پل زدن فقط برای برخی از اعلانها
شما میتوانید به صورت پویا قابلیت پل زدن را غیرفعال کنید و به صورت اختیاری، به برخی از اعلانها بر اساس برچسب آنها اجازه عبور دهید. به عنوان مثال، برای غیرفعال کردن قابلیت پل زدن برای همه اعلانها به جز آنهایی که با tagOne ، tagTwo یا tagThree برچسب گذاری شدهاند، از شیء BridgingConfig همانطور که در مثال زیر نشان داده شده است، استفاده کنید:
// 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() )
غیرفعال کردن پل ارتباطی برای همه اعلانها (توصیه نمیشود)
برای جلوگیری از پل زدن همه اعلانها از یک برنامه تلفن، از ورودی <meta-data> در فایل مانیفست برنامه ساعت استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
<!-- 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" />
برای همگامسازی اعلانهای مشابه، یک شناسهی رد اعلان تنظیم کنید
وقتی با استفاده از ویژگی حالت پل زدن، از پل زدن جلوگیری میکنید، اعلانهای رد شده در دستگاههای کاربر همگامسازی نمیشوند.
با این حال، اگر اعلانهای مشابهی هم در گوشی و هم در ساعت ایجاد میشوند، میخواهید وقتی کاربر یکی از آنها را رد میکند، هر دو اعلان نیز رد شوند.
در NotificationCompat.WearableExtender ، میتوانید یک شناسه منحصر به فرد سراسری تنظیم کنید تا وقتی کاربر یک اعلان را رد میکند، سایر اعلانهای دارای شناسه مشابه در ساعتهای جفتشده نیز رد شوند.
کلاس NotificationCompat.WearableExtender متدهایی دارد که به شما امکان میدهد از شناسههای رد درخواست استفاده کنید، همانطور که در مثال زیر نشان داده شده است:
وقتی کاربر اعلان را رد میکند، تمام اعلانهای دیگر با همان شناسهی رد شدن، هم در ساعت و هم در تلفن رد میشوند. برای بازیابی شناسهی رد شدن، getDismissalId() استفاده کنید.
در مثال زیر، یک شناسه منحصر به فرد سراسری برای یک اعلان جدید مشخص شده است، بنابراین اعلانهای رد شده همگامسازی میشوند:
val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend( NotificationCompat.WearableExtender() .setDismissalId("abc123") ) .build()
اعلانهای فقط محلی
برای جلوگیری از اعلانهای تکراری، میتوانید setLocalOnly() برای ایجاد اعلانهای محلی در تلفن نیز استفاده کنید.
با این حال، فقط در صورتی از این روش استفاده کنید که اعلان فقط روی دستگاهی که آن را ایجاد کرده است، نمایش داده شود. این شامل نه تنها دستگاههای Wear OS، بلکه سایر پوشیدنیها و هر دستگاه متصل دیگری نیز میشود. اعلان فقط محلی، حتی اگر برنامه شما روی ساعت نصب نشده باشد، پل ارتباطی ایجاد نمیکند.
هنگام ساخت یک Wear OS و یک برنامه تلفن که هر دو اعلان ایجاد میکنند، از این روش برای جلوگیری از اعلانهای تکراری استفاده نکنید. در عوض، از گزینههای پل زدن استفاده کنید.
برای مثال، وقتی کاربر فایلی را روی گوشی دانلود میکند و اعلان نشان میدهد که دانلود کامل شده است، از یک اعلان فقط محلی استفاده کنید.
وقتی اعلانها پلبندی نمیشوند
سیستم انواع اعلانهای زیر را پل نمیکند:
- اعلانهای فقط محلی با استفاده از
Notification.Builder.setLocalOnly(boolean)تنظیم میشوند. - اعلانهای جاری با استفاده از
Notification.Builder.setOngoing(boolean)یاNotification.FLAG_ONGOING_EVENTتنظیم میشوند. - اعلانهای غیرقابل پاکسازی با استفاده از
Notification.FLAG_NO_CLEARتنظیم میشوند. - اعلانهایی که در آنها برنامهی پوشیدنیِ همتای شما، قابلیتِ پل زدنِ اعلانها را غیرفعال کرده است.
ملاحظات پیادهسازی برای اعلانهای پلبندیشده
ارسال یا حذف اعلانهای پلمانند از یک دستگاه پوشیدنی زمان میبرد. هنگام طراحی اعلانهای خود، از رفتارهای غیرمنتظره ناشی از این تأخیر جلوگیری کنید. دستورالعملهای زیر به شما کمک میکند تا مطمئن شوید که اعلانهای پلمانند شما با اعلانهای ناهمزمان کار میکنند:
- اگر اعلانی را در تلفن لغو کنید، ممکن است لغو اعلان مربوطه در ساعت مدتی طول بکشد. در این مدت، کاربر ممکن است یکی از intent های در حال انتظار را در آن اعلان ارسال کند. به همین دلیل، همچنان intent های در حال انتظار را در برنامه خود از اعلان هایی که لغو کرده است دریافت کنید: هنگام لغو اعلان ها، گیرنده های intent در حال انتظار آن اعلان ها را معتبر نگه دارید.
- کل اعلانها را یکجا لغو و دوباره اجرا نکنید. فقط اعلانهایی را که واقعاً تغییر کردهاند، اصلاح یا حذف کنید. این کار از تأخیر در بهروزرسانی دستگاه پوشیدنی جلوگیری میکند و تأثیر برنامه شما بر عمر باتری را کاهش میدهد.
ملاحظات طراحی
اعلانهای Wear OS دستورالعملهای طراحی خاص خود را دارند. برای اطلاعات بیشتر، به دستورالعملهای طراحی Wear OS مراجعه کنید.