بهطور پیشفرض، سیستم اعلانهای برنامه تلفن را به هر ساعت جفتشدهای پل میزند یا همرسانی میکند. اگر برنامه ساعت بسازید و برنامهتان در تلفن جفتشده نیز وجود داشته باشد، کاربران ممکن است اعلانهای تکراری دریافت کنند—یکی که برنامه تلفن تولید و پل میکند و دیگری که برنامه ساعت تولید میکند. Wear OS شامل ویژگیهایی برای کنترل نحوه و زمان انتقال اعلانها است.
از اعلانهای تکراری اجتناب کنید
وقتی اعلانها را از منبع خارجی، مثلاً از Firebase Cloud Messaging، ایجاد میکنید، برنامه تلفن و برنامه ساعتتان هرکدام میتوانند اعلانهای خودشان را در ساعت نمایش دهند. برای جلوگیری از تکرار، پلسازی را در برنامه ساعتتان بهصورت برنامهریزیشده غیرفعال کنید.
استفاده از برچسبهای پل
برای پل زدن برخیاز اعلانهایی که برنامه تلفن ایجاد میکند به ساعت وقتی برنامه ساعت نصب میشود، برچسبهای پل را تنظیم کنید.
بااستفاده از روش
setBridgeTag(String)
، همانطور که در نمونه کد زیر نشان داده شده است، برچسب پلی روی اعلان تنظیم کنید:
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تنظیم شده است. - اعلانهایی که در آنها برنامه همراه طرف مقابل پل اعلان را غیرفعال کرده است.
ملاحظات پیادهسازی برای اعلانهای پلزدهشده
ارسال یا برداشتن اعلانهای پلزدهشده از دستگاه پوشیدنی زمان میبرد. هنگام طراحی اعلانهایتان، از رفتارهای غیرمنتظره ناشی از این تأخیر خودداری کنید. رهنمودهای زیر به اطمینان از اینکه اعلانهای پلزدهشده شما با اعلانهای ناهمزمان کار میکنند کمک میکند:
- اگر اعلانی را در تلفن لغو کنید، ممکن است مدتی طول بکشد تا اعلان مربوطه در ساعت لغو شود. در این مدت، کاربر ممکن است یکی از هدفهای معلقه را در آن اعلان ارسال کند. به همین دلیل، دریافت هدفهای معلقه در برنامهتان را از اعلانهایی که لغو کرده است ادامه دهید: هنگام لغو کردن اعلانها، گیرندگان هدف معلقه آن اعلانها را معتبر نگه دارید.
- کل پشته اعلانها را بهطور همزمان لغو و دوباره راهاندازی نکنید. فقط اعلانهایی را که واقعاً اصلاح شدهاند اصلاح یا حذف کنید. این کار از تأخیر در بهروزرسانی دستگاه پوشیدنی جلوگیری میکند و تأثیر برنامه شما بر عمر باتری را کاهش میدهد.
ملاحظات طراحی
اعلانهای Wear OS دستورالعملهای طراحی خاص خودشان را دارند. برای اطلاعات بیشتر، دستورالعملهای طراحی Wear OS را ببینید.