معمای نحوه شکستن شماره گیری اضطراری 911 توسط تیم های مایکروسافت در تلفن های اندرویدی اکنون مشخص شده است. میشال رحمان، سردبیر ارشد فنی Esper، با گزارشی دقیق و دقیق از نحوه تعامل بین Teams و Android یکی از حیاتیترین کارهایی که یک گوشی میتواند انجام دهد، به Medium ارائه کرده است.
اگر آن را از دست دادید، هفته گذشته، یکی از صاحبان پیکسل به Reddit رفت تا یک کابوس واقعی را توصیف کند: در حالی که به نظر می رسید مادربزرگ آنها در حال سکته مغزی بود، تلاش برای شماره گیری 911 در پیکسل 3 شکست خورد. تلفن گیر کرده بود و از قطع مجدد تماس برای شماره گیری جلوگیری می کرد، و تفریحات بعدی نشان داد که ممکن است تماس هرگز وصل نشده باشد، حتی اگر تلفن گزارش داد که موقعیت مشتری را به خدمات اضطراری ارسال کرده است. خوشبختانه تلفن ثابت نیز در دسترس بود و تماس دوم (موفق) 911 برقرار شد
چند روز بعد، گوگل فاش کرد که "تعامل ناخواسته" بین برنامه نویسی اندروید و برنامه تیم های مایکروسافت مقصر این مشکل است که بر برخی از مشتریانی که برنامه را نصب کرده بودند اما وارد سیستم نشده بودند تأثیر گذاشت. مشکلی که آنها آن معیارها را برآورده کردند، و اصلاحاتی از سوی مایکروسافت و گوگل برنامه ریزی شده بود. اکنون، بر اساس درک دقیق از آنچه اشتباه رخ داده است، می دانیم که چگونه این اصلاحات احتمالاً در سطح کد ظاهر می شوند. رحمان با همکاری با Za_Raczke، کیرون کوین، لوکا استفانی، متئوس کیسر و جیمز وگلوم، جزئیات فنی پشت این مسائل را بررسی کرد.
اساساً، برنامههای تلفن در اندروید باید به سیستم بگویند که قادر به برقراری و برقراری تماس هستند - علاوه بر آن، باید به سیستم بگوید که میتواند تماسهای اضطراری را مدیریت کند. این تضمین می کند که عملکرد تماس به درستی کار می کند (و چند راه وجود دارد که برنامه ها می توانند آن را مدیریت کنند). متأسفانه، وقتی واقعاً سعی میکنید یک تماس اضطراری برقرار کنید، منطق سیستم ممکن است به دلیل دو مشکل جداگانه خراب شود
وقتی اندروید لیستی از مواردی را که میتوانند تماسهای اضطراری برقرار کنند، تهیه میکند، از فهرستی خارج میشود که میتواند هر تماسی را انجام دهد، نه فقط تماسهای اضطراری. بنابراین برنامه مایکروسافت تیمز در نهایت برای تماس های اضطراری مورد توجه قرار می گیرد در حالی که نباید باشد.
به خودی خود، این در واقع یک مسئله نیست، هر چند. منطق بعدی در اندروید همیشه باید گزینه های دیگری را به هر حال انتخاب کند. تیمها نمیتوانند تماسهای اضطراری برقرار کنند، و منطق آن را در نظر میگیرد، حتی اگر لیستسازی اولیه انجام نشود. اما اشکال دیگری وجود دارد که میتواند ایجاد شود: اگر موارد زیادی برای برقراری تماسهای اضطراری ثبت شده باشد، منطق حاکم بر آنچه انتخاب میشود میتواند با یک مشکل سرریز یا زیر جریان اعداد صحیح مواجه شود، مرتبسازی را شکسته و به نوعی باعث شکست/قفل شدن تماس اضطراری شود. بالا (مکانیسم دقیق در اینجا مشخص نیست زیرا به سیستمهای دیگری نفوذ میکند که تجزیه و تحلیل آنها سختتر است، اما سرریزها میتوانند آشفته باشند و چیزها را به روشهای پیشبینینشدهای خراب کنند.)
احتمال ایجاد آخرین باگ واقعا کم است. تیم های مایکروسافت باید چندین بار خود را در آن لیست ثبت کند تا احتمال آن وجود داشته باشد (و حتی در آن صورت، تضمینی نیست، فقط یک شانس است که راه اندازی شود). به جز، این دقیقا همان چیزی است که اتفاق می افتد. هر زمان که برنامه Microsoft Teams شروع به کار کند یا تلفن شما راهاندازی مجدد شود و وارد سیستم نشده باشید، Teams دوباره خود را در این لیست ثبت میکند. (اگر وارد سیستم شدهاید، این ثبتنام یک بار انجام میشود - منطقی که در پشت آن وجود دارد که برنامه در حال چرخش شناسههای منحصربهفرد جدید است، اگر شما نباشید.)
تیمهای مایکروسافت میتوانند خود را به این فهرست اضافه کنند تا چند برابر این مشکل با درصد کم بسیار محتملتر شود و احتمال شکست تماس اضطراری را افزایش دهد.
همه اینها ممکن است مانند یک گوشه به نظر برسد، اما در واقع اینطور نیست. اگر به دلیل چیزی مانند خط مشی امنیتی سازمانی یا اشکال در برنامه به اجبار از سیستم خارج شوید، این مجموعه مشکلات ممکن است ایجاد شود. سامسونگ همچنین چهار روز قبل از گزارش اولیه مشتری که کل این چرخه خبری را آغاز کرده بود، مشکل را مشاهده کرد و در انتهای اندروید یک راه حل برای آن ارائه کرد.
از آنجایی که بخشی از این مشکل در نهایت به عملکرد تلفن اندروید مربوط می شود و از آنجایی که به عنوان یک ماژول خط اصلی قابل به روز رسانی نیست، رفع مشکل در انتهای Google تا 4 ژانویه (احتمالاً تاریخی که وصله های ژانویه 2022 فرود می آیند) انجام نمی شود. . مایکروسافت همچنین برنامهای برای جلوگیری از ثبت نام تیمها در آن لیست دارد، بنابراین مراقب آن باشید.
جزئیات عجیب دیگری در گزارش کامل وجود دارد، مانند این که این مشکل فقط باید در اندروید 10 به بعد ظاهر شود. اگر کنجکاو هستید که چرا این کار را انجام دهید و مهارتهای فنی لازم برای پرورش آن را دارید (همانطور که بسیاری از توسعهدهندگان احتمالاً انجام میدهند)، به گزارش کامل نگاهی بیندازید - بسیار جذاب است.