به طور پیشفرض، اعلانها از یک برنامه روی تلفن به هر ساعت جفتشدهای پل زده میشوند یا به اشتراک گذاشته میشوند. اگر یک برنامه ساعت بسازید و برنامه شما روی یک تلفن جفتشده نیز وجود داشته باشد، کاربران ممکن است اعلانهای تکراری دریافت کنند - یکی توسط برنامه تلفن ایجاد و پل زده میشود و دیگری توسط برنامه ساعت تولید میشود. 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()
توجه: شناسههای رد تماس در صورتی کار میکنند که ساعت به یک تلفن اندروید جفت شده باشد، اما در صورتی که ساعت به یک آیفون جفت شده باشد، کار نمیکنند.
وقتی اعلانها پلبندی نمیشوند
انواع اعلانهای زیر پلسازی نمیشوند:
- اعلانهای فقط محلی با استفاده از
Notification.Builder.setLocalOnly(boolean)تنظیم میشوند. - اعلانهای جاری با استفاده از
Notification.Builder.setOngoing(boolean)یاNotification.FLAG_ONGOING_EVENTتنظیم میشوند. - اعلانهای غیرقابل پاکسازی با استفاده از
Notification.FLAG_NO_CLEARتنظیم میشوند. - اعلانهایی که در آنها برنامهی پوشیدنیِ همتای شما، همانطور که قبلاً توضیح داده شد، قابلیت اتصال اعلانها (notification bridging) را غیرفعال کرده است.
بهترین شیوهها برای اعلانهای پلبندیشده
ارسال یا حذف اعلانهای پلمانند از یک دستگاه پوشیدنی زمان میبرد. هنگام طراحی اعلانهای خود، مطمئن شوید که از رفتار غیرمنتظره ناشی از این تأخیر جلوگیری میکنید. دستورالعملهای زیر به شما کمک میکند تا مطمئن شوید که اعلانهای پلمانند شما با اعلانهای ناهمزمان کار میکنند:
- اگر اعلانی را در تلفن لغو کنید، ممکن است لغو اعلان مربوطه در ساعت مدتی طول بکشد. در این مدت، کاربر ممکن است یکی از intent های در حال انتظار را در آن اعلان ارسال کند. به همین دلیل، همچنان intent های در حال انتظار را در برنامه خود از اعلان هایی که لغو کرده است دریافت کنید: هنگام لغو اعلان ها، گیرنده های intent در حال انتظار آن اعلان ها را معتبر نگه دارید.
- کل اعلانها را یکجا لغو و دوباره اجرا نکنید. فقط اعلانهایی را که واقعاً تغییر کردهاند، اصلاح یا حذف کنید. این کار از تأخیر در بهروزرسانی دستگاه پوشیدنی جلوگیری میکند و تأثیر برنامه شما بر عمر باتری را کاهش میدهد.
ملاحظات طراحی
اعلانهای Wear OS دستورالعملهای طراحی خاص خود را دارند. برای اطلاعات بیشتر، دستورالعملهای طراحی Wear OS را بررسی کنید.