برقراری ارتباط مستقیم ازطریق شبکه در دستگاه‌های خوداتکا

با Wear OS by Google، ساعت می‌تواند بدون نیاز به دسترسی به تلفن Android یا iOS، مستقیماً با شبکه ارتباط برقرار کند. از «میانای برنامه‌سازی کاربردی لایه داده» برای متصل کردن برنامه Wear OS به شبکه استفاده نکنید. درعوض، دستورالعمل‌ها و مراحل این راهنما را دنبال کنید.

دسترسی به شبکه

برنامه‌های Wear OS می‌توانند درخواست‌های شبکه ایجاد کنند. وقتی ساعت ازطریق بلوتوث به تلفن متصل باشد، ترافیک شبکه ساعت معمولاً ازطریق تلفن پراکسی می‌شود.

وقتی تلفن دردسترس نباشد، بسته به سخت‌افزار ساعت، از شبکه‌های Wi-Fi و تلفن همراه استفاده می‌شود. پلاتفرم Wear OS انتقال بین شبکه‌ها را مدیریت می‌کند.

می‌توانید از پروتکل‌هایی مانند HTTP،‏ TCP، و UDP استفاده کنید. بااین‌حال، میاناهای برنامه‌سازی کاربردی android.webkit، ازجمله کلاس CookieManager، دردسترس نیستند. می‌توانید با خواندن و نوشتن سرایند در درخواست‌ها و پاسخ‌ها از کوکی‌ها استفاده کنید.

از WorkManager برای درخواست‌های ناهم‌زمان، ازجمله نظرسنجی در فواصل زمانی منظم، استفاده کنید.

اگر باید به انواع خاصی از شبکه‌ها متصل شوید، خواندن وضعیت شبکه را ببینید.

دسترسی به شبکه با پهنای باند بالا

پلاتفرم Wear OS اتصال‌پذیری شبکه را با هدف ارائه بهترین تجربه کاربری کلی مدیریت می‌کند. پلاتفرم شبکه فعال پیش‌فرض را با تراز کردن دو نیاز انتخاب می‌کند: عمر باتری طولانی و پهنای باند شبکه.

وقتی حفظ باتری در اولویت باشد، ممکن است شبکه فعال پهنای باند کافی برای وظایف شبکه مانند انتقال فایل‌های بزرگ یا جاری‌سازی رسانه نداشته باشد.

این بخش راهنمایی‌هایی درباره استفاده از کلاس ConnectivityManager ارائه می‌دهد تا به اطمینان از اینکه برنامه شما پهنای باند شبکه موردنیاز خود را دارد کمک کند. برای اطلاعات کلی درباره کنترل دقیق منابع شبکه، مدیریت مصرف شبکه را ببینید.

درخواست اتصال Wi-Fi

برای موارد استفاده‌ای که به دسترسی به شبکه با پهنای باند بالا نیاز دارند، مثل انتقال فایل‌های بزرگ یا جاری‌سازی رسانه، اتصال با انتقال پهنای باند بالا، مثل Wi-Fi، را درخواست کنید. این مورد در مثال زیر نشان داده شده است:

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request
        // or callback.
    }
}

fun requestWifiNetwork() {
    connectivityManager.requestNetwork(
        NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
    )
}

دسترسی به شبکه ممکن است فوری نباشد، زیرا رادیو Wi-Fi یا سلولی ساعت ممکن است برای حفظ باتری خاموش باشد. اگر ساعت نتواند به شبکه‌ای متصل شود، روش onAvailable() نمونه NetworkCallback شما فراخوانی نمی‌شود.

پس‌از فراخوانی onAvailable()، دستگاه تلاش می‌کند تا زمانی که NetworkCallback رها شود به شبکه Wi-Fi متصل بماند. برای حفظ عمر باتری، وقتی دیگر به شبکه Wi-Fi نیاز ندارید، بازخوان را همان‌طور که در مثال زیر نشان داده شده است آزاد کنید.

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

راه‌اندازی فعالیت تنظیمات Wi-Fi

وقتی شبکه Wi-Fi درخواست می‌کنید، سیستم سعی می‌کند به شبکه ذخیره‌شده‌ای متصل شود اگر شبکه ذخیره‌شده‌ای پیکربندی شده باشد و در محدوده باشد. اگر شبکه Wi-Fi ذخیره‌شده‌ای دردسترس نباشد، onAvailable روش تماس برگشتی نمونه NetworkCallback شما فراخوانی نمی‌شود.

اگر از Handler برای زمان‌بندی درخواست شبکه استفاده می‌کنید، می‌توانید کاربر را درصورت وقوع مهلت زمانی به افزودن شبکه Wi-Fi هدایت کنید. بااستفاده از هدف زیر، کاربر را مستقیماً به فعالیت افزودن شبکه Wi-Fi هدایت کنید:

val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"
val intent = Intent(networkSettingsAction).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)

برای راه‌اندازی فعالیت تنظیمات، برنامه شما باید اجازه CHANGE_WIFI_STATE را داشته باشد.

ملاحظات میانای کاربر

اگر برنامه شما برای عملیات با پهنای باند بالا به اتصال به شبکه Wi-Fi جدید نیاز دارد، باید این اتصال را به‌طور یکپارچه دریافت کنید و درصورت نیاز آن را آزاد کنید. اگر شبکه Wi-Fi دردسترس نیست، توضیح دهید که این ویژگی به Wi-Fi نیاز دارد و روشی برای راه‌اندازی «فعالیت تنظیمات Wi-Fi» ارائه دهید. کاربر را از دسترسی به ویژگی‌های برنامه‌ای که به شبکه پهن‌باند نیاز ندارد مسدود نکنید.

ملاحظات مربوط به استفاده از داده و انرژی

برای کمک به حفظ شارژ باتری و به‌حداقل رساندن مصرف داده تلفن همراه، همه وظایف غیرضروری شبکه، مثل گزارش‌های تجزیه‌وتحلیل یا جمع‌آوری گزارش‌های خرابی، را تا زمانی‌که دستگاه Wear OS اتصال بلوتوث یا Wi-Fi را به‌جای اتصال LTE یا اتصال با حجم محدود دوباره برقرار کند به‌تعویق بیندازید.

پیام‌رسانی ابری

برای ارسال اعلان‌ها، مستقیماً از پیام‌رسانی ابریِ Firebase (FCM) استفاده کنید.

هیچ API برای دسترسی به شبکه یا FCM مختص Wear OS نیست. به اسناد موجود درباره اتصال به شبکه و پیام‌رسانی ابری مراجعه کنید.

‫FCM با حالت خواب به‌خوبی کار می‌کند و روش توصیه‌شده برای ارسال اعلان به ساعت است.

با جمع‌آوری کردن کد ثبت‌نام برای دستگاه، پیام‌های FCM را وقتی برنامه Wear OS شما اجرا می‌شود ارائه دهید. سپس وقتی سرورتان پیام‌ها را به نقطه پایان FCM REST ارسال می‌کند، رمز را به‌عنوان بخشی از مقصد اضافه کنید. ‫FCM پیام‌ها را به دستگاه شناسایی‌شده توسط نشانه ارسال می‌کند.

پیام FCM در قالب «نشان‌گذاری شیء جاوا اسکریپت» (JSON) است و می‌تواند شامل یک یا هر دو محتوای زیر باشد:

  • بار اعلان: وقتی بار اعلانی توسط ساعت دریافت می‌شود، داده‌ها مستقیماً در جاری‌سازی اعلان به کاربر نمایش داده می‌شود. وقتی کاربر روی اعلان تک‌ضرب می‌زند، برنامه شما راه‌اندازی می‌شود.
  • پایه‌بار داده‌ها: وقتی پایه‌بار مجموعه‌ای از جفت‌های کلید یا مقدار سفارشی دارد. بار داده به‌عنوان داده به برنامه Wear OS شما تحویل داده می‌شود.

برای اطلاعات بیشتر و نمونه‌های بار، انواع پیام را ببینید.

به‌طور پیش‌فرض، اعلان‌ها از برنامه تلفن به ساعت منتقل می‌شوند. اگر برنامه Wear OS مستقل و برنامه تلفن مربوطه داشته باشید، ممکن است اعلان‌های تکراری دریافت کنید. برای مثال، یک اعلان از FCM که هم تلفن و هم ساعت دریافت کرده‌اند، می‌تواند به‌طور مستقل در هر دو دستگاه نمایش داده شود. بااستفاده از میاناهای برنامه‌سازی کاربردی پل‌سازی می‌توانید از این اتفاق جلوگیری کنید.

استفاده از خدمات پس‌زمینه‌ای

برای کمک به اطمینان از اینکه تکالیف پس‌زمینه‌ای به‌درستی اجرا می‌شوند، باید حالت خواب و «آماده به‌کار برنامه» را درنظر بگیرند.

وقتی صفحه‌نمایش خاموش می‌شود یا برای مدت کافی وارد حالت محیطی می‌شود، زیرمجموعه‌ای از «حالت آماده‌به‌کار» می‌تواند رخ دهد و وظایف پس‌زمینه می‌تواند برای دوره‌های معینی به‌تعویق بیفتد. بعداً، وقتی دستگاه برای مدت طولانی ثابت باشد، «حالت آماده‌به‌کار» معمولی رخ می‌دهد. درخواست‌ها را با WorkManager API زمان‌بندی کنید، که به برنامه شما امکان می‌دهد برای اجرای کد ایمن در حالت «اغما» ثبت شود.

زمان‌بندی با محدودیت‌ها

می‌توانید از محدودیت‌ها برای پیکربندی درخواست‌ها به‌گونه‌ای استفاده کنید که عمر باتری حفظ شود. یک یا چند مورد از محدودیت‌های زیر را برای افزودن به درخواست‌هایتان انتخاب کنید:

  • درخواستی را که به شبکه نیاز دارد زمان‌بندی کنید.

    مشخص کنید که NetworkType‏ CONNECTED است یا UNMETERED. ‫UNMETERED برای انتقال داده‌های بزرگ است، درحالی‌که CONNECTED برای انتقال‌های کوچک است.

  • درخواست را درحین شارژ شدن زمان‌بندی کنید.

  • درخواست را زمانی‌که دستگاه در حالت آزاد است زمان‌بندی کنید. این کار برای همگام‌سازی یا کارهای پس‌زمینه‌ای با اولویت پایین، به‌ویژه زمانی که دستگاه درحال شارژ است، مفید است.

برای اطلاعات بیشتر، راهنمای تأثیر محدودیت‌ها بر کار دوره‌ای در WorkManager را مرور کنید.