تغییر رفتار: همه برنامه ها
سیستم عامل Android 12 شامل تغییراتی در behavior است که ممکن است روی برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر بدون در نظر گرفتن targetSdkVersion برای همه برنامه ها هنگام اجرا در Android 12 اعمال می شود. باید برنامه خود را تست کنید و سپس در صورت لزوم آن را اصلاح کنید تا از این برنامه به درستی پشتیبان گیری صورت گیرد. همچنین اطمینان حاصل کنید که لیست تمامی تغییرات behavior که فقط بر روی برنامه های Android 12 تأثیر می گذارد را مورد بررسی قرار داده و مرور کنید.
Foreground service notifications UX delay
برای ارائه یک تجربه کارآمد برای سرویس های پیش زمینه کوتاه مدت در Android 12، این سیستم می تواند نمایش اعلان های سرویس پیش زمینه را برای 10 ثانیه برای برخی از خدمات پیش زمینه به تأخیر بیندازد. این تغییر قبل از ظاهر شدن اعلان ها، به وظایف کوتاه مدت فرصت می دهد تا عملکرد خود را انجام دهند.
اگر یک سرویس پیش زمینه حداقل یکی از ویژگی های زیر را داشته باشد، سیستم بلافاصله پس از شروع سرویس، اعلان مربوطه را نشان می دهد:
- این سرویس با اعلانی همراه است که شامل دکمه های عملکرد است.
- این سرویس دارای خدمات پیش زمینه نوعی از MediaPlayback ، MediaProjection یا PhoneCall است.
- این سرویس موارد استفاده تماس های تلفنی، ناوبری یا پخش رسانه را فراهم می کند، همانطور که در ویژگی دسته اعلان تعریف شده است.
- این سرویس با وارد کردن FOREGROUND_SERVICE_IMMEDIATE به setForegroundServiceBehavior() هنگام تنظیم اعلان، تغییر رفتار را انتخاب نکرده باشد.
Immersive mode improvements for gesture navigation
اندروید 12 با استفاده از حالت simplifies immersive mode، حرکت پیمایشی را با سهولت انجام می دهد وهمچنین تجربه فعالیت هایی مانند تماشای فیلم و خواندن کتاب را آسان تر و سازگارتر می کند. برای کسب اطلاعات بیشتر در این خصوص، به مقاله بررسی اجمالی ویژگی ها و API ها مراجعه کنید.
Web intent resolution
برای ارائه تجربه کارآمدتر هنگام انتخاب پیوندهای وب توسط کاربران، اگر این هدف حاوی دامنه تأیید نشده باشد، Android 12 یک هدف وب مشخص را در مرورگر پیش فرض کاربر باز می کند. برنامه شما می تواند با استفاده از یکی از روشهای زیر برای دامنه تأیید شود:
- دامنه را با استفاده از پیوندهای برنامه Android تأیید کنید.
- از کاربر بخواهید برنامه شما را به یک دامنه متصل کند.
اگر برنامه شما به اهداف وب استناد می کند، در نظر بگیرید که یک اعلان یا گفتگویی اضافه کنید که از کاربر می خواهد اقدام را تأیید کند.
برنامه Standby Buckets
این برنامه به سیستم اپ کمک می کند تا درخواست منابع برنامه را بر اساس کاربرد های اخیر برنامه و یا میزان استفاده از برنامه اولویت بندی کند. هر Buckets یک اولویت را نشان می دهد. اولویت کم به معنای محدودیت بیشتر سیستم برای اجرای برنامه شما است.
یک Buckets جدید با نام restricted در شروع Android 12 وجود دارد که دارای کمترین اولویت (و بیشترین محدودیت) از بین Bucketها است. Buckets به ترتیب اولویت از بالا به پایین عبارتند از:
- فعال(Active): برنامه در حال حاضر در حال استفاده است یا اخیراً مورد استفاده قرار گرفته است
- مجموعه کاری(Working set): برنامه به طور منظم مورد استفاده قرار می گیرد
- مکرر(Frequent): برنامه ای که اغلب استفاده می شود، اما هر روز استفاده نمی شود
- نادر(Rare): برنامه اغلب استفاده نمی شود
- محصور(Restricted)
این سیستم علاوه بر الگوهای استفاده، برای تعیین اینکه آیا برنامه خود را در Buckets محصور قرار می دهد یا نه، به طور پیش فرض رفتار برنامه شما را در نظر می گیرد. اگر برنامه شما با مسئولیت پذیری بیشتری از منابع سیستم استفاده کند، برنامه شما کمتر در restricted bucket قرار می گیرد. اگر کاربر مستقیماً با برنامه شما ارتباط برقرار کند سیستم برنامه شما را درBuckets کمتری قرار می دهد.
محدودیت های مدیریت نیرو
اگر سیستم برنامه شما را در restricted bucketقرار دهد، محدودیت های زیر اعمال می شود:
- می توانید کارها را یک بار در روز و در یک جلسه 10 دقیقه ای انجام دهید. در طول این جلسه، سیستم کارهای برنامه شما را با کار برنامه های دیگر گروه بندی می کند.
- در مقایسه با زمانی که سیستم برنامه شما را در bucket محصور کننده قرار می دهد، برنامه شما می تواند کارها ی سریعتر کمتری انجام دهد.
- هشدارهای نادرست برنامه شما هر روز یک بار تحویل داده می شوند. وقتی با روش های set () ، setInexactRepeating () ، setAndAllowWhileIdle() یا setWindow()تماس بگیرید، هنگام تماس هشدار نادرست ایجاد می کنید.
برنامه شما می تواند روزانه پنج پیام با اولویت بالا (Firebase Cloud Messaging (FCM را به موقع دریافت کند. تمام پیام های FCM بعدی با اولویت طبیعی تحویل داده می شوند، بنابراین اگر دستگاه در حالت صرفه جویی در مصرف برق باشد، پیام ها ممکن است تأخیر داشته باشند.
توجه: برخلاف سایر bucket ها، این محدودیتهای مدیریت نیرو در restricted bucketحتی در هنگام شارژ دستگاه اعمال می شود. با این حال، هنگامی که دستگاه در حال شارژ، بیکار بودن و در یک شبکه غیرمجاز است، محدودیت ها کاهش می یابد.
Foreground services allowance
اگر سیستم برنامه شما را در restricted bucketقرار دهد، برنامه شما همچنان می تواند سرویس های پیش زمینه را اجرا کند. با این حال، اگر برنامه شما Android 12 را هدف قرار دهد، همچنان تحت تأثیر محدودیت های راه اندازی سرویس پیش زمینه قرار دارد.
آیا برنامه شما در restricted bucketاست؟
برای بررسی اینکه آیا سیستم برنامه شما را در restricted bucketقرار داده است، با getAppStandbyBucket() تماس بگیرید. اگر مقدار بازگشتی این روش STANDBY_BUCKET_RESTRICTED باشد ، برنامه شما در restricted bucketشده است.
برای تست نحوه عملکرد برنامه خود هنگامی که سیستم برنامه شما را در restricted bucket قرار می دهد، می توانید برنامه خود را به صورت دستی به آن Bucket منتقل کنید. برای انجام این کار، دستور زیر را در یک پنجره ترمینال اجرا کنید:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Display#getRealSize and getRealMetrics: deprecation and constraints
سیستم های Android در فاکتورهای مختلفی مانند صفحه های بزرگ، تبلت ها و تاشوها در دسترس می باشد. برای ارائه محتوای مناسب برای هر دستگاه، برنامه شما باید اندازه صفحه یا اندازه نمایش را تعیین کند. با گذشت زمان، Android برنامه های APIهای مختلفی را برای بازیابی این اطلاعات ارائه داد. در Android 11 ، WindowMetrics API را معرفی کردیم وبیان گردید که روش ها زیر منسوخ شده است:
- getSize()
- getMetrics()
در اندروید 12 ما همچنان به استفاده از WindowMetrics توصیه می کنیم و این روش ها را استناد می دهیم:
- getRealSize()
- getRealMetrics()
برای کاهش رفتار برنامه ها با استفاده از Display API ها برای بازیابی محدودیت های برنامه، Android 12 ساز وکار جدید sandboxing را برای اصلاح اطلاعات برگشتی توسط این API ها اضافه کرده است. که می تواند بر برنامه هایی که از این اطلاعات با MediaProjection استفاده می کنند تأثیر بگذارد.
برای سازگاری گسترده تر با نسخه های قدیمی اندروید، می توانید از کتابخانه Jetpack WindowManager استفاده کنید که شامل کلاس WindowMetrics است که از Android 4.0 (سطح API 14) و بالاتر پشتیبانی می کند.
نمونه هایی از نحوه استفاده از WindowMetrics
ابتدا مطمئن شوید که فعالیتهای برنامه شما کاملا قابلیت fully resizableرا دارند.
هر فعالیتی برای هر کار مربوط به UI ، به ویژه WindowManager.getCurrentWindowMetrics() باید به WindowMetrics متکی باشد.
اگر برنامه شما MediaProjection را ایجاد می کند، از آنجا که پروجکشن نمایشگر را ضبط میکند، باید اندازه ها به درستی اندازه گرفته شوند. اگر برنامه کاملاً قابل تغییر اندازه باشد، محتوای فعالیت صحیح را به این ترتیب برمی گرداند:
WindowMetrics projectionMetrics = activityContext .getSystemService(WindowManager.class).getMaximumWindowMetrics()
اگر برنامه به طور کاملا قابل تغییر اندازه نیست، باید محدوده ها را از یک نمونه WindowContext استنطاق کند و WindowMetrics حداکثر ناحیه نمایش موجود در برنامه را با استفاده از WindowManager.getMaximumWindowMetrics() بازیابی کند.
Context windowContext = mContext.createWindowContext(mContext.getDisplay(), TYPE_APPLICATION, null /* options */); WindowMetrics projectionMetrics = windowContext.getWindowManager() .getMaximumWindowMetrics();
توجه: هر کتابخانه ای که از MediaProjection استفاده می کند نیز باید از این توصیه پیروی کند و از WindowMetrics مناسب برای پنجره برنامه پرس و جو کند.
گرافیک و تصاویر
در آندروید 12، تغییرات نرخ تازه سازی با استفاده از setFrameRate() می تواند اتفاق افتد بدون توجه به اینکه آیا صفحه نمایش از انتقال بی وقفه به نرخ تازه سازی جدید پشتیبانی می کند. یک انتقال بدون درز که هیچ وقفه بصری، مانند یک صفحه نمایش سیاه و سفید برای یک یا دو ثانیه صورت نگیرد، اگر نمایشگر از یک انتقال بدون وقفه پشتیبانی نمی کرد، پس از فراخوانی setFrameRate() به طور معمول با همان نرخ تازه سازی ادامه خواهد داشت. با فراخوانی getAlternativeRefreshRates() می توانید از قبل تعیین کنید که انتقال به تازه سازی جدید بدون وقفه انجام شود.
در اینجا مثالی از نحوه اجرای این مورد آورده شده است:
// Determine whether the transition will be seamless. // Non-seamless transitions may cause a 1-2 second black screen. val refreshRates = this.display?.mode?.alternativeRefreshRates val willbeSeamless = Arrays.asList(refreshRates).contains(newRefreshRate) // Set the frame rate even if the transition will not be seamless. surface.setFrameRate(newRefreshRate, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS
// Determine whether the transition will be seamless. // Non-seamless transitions may cause a 1-2 second black screen. Display display = context.getDisplay(); // API 30+ Display.Mode mode = display.getMode(); float[] refreshRates = mode.getAlternativeRefreshRates(); boolean willbeSeamless = Arrays.asList(refreshRates).contains(newRefreshRate); // Set the frame rate even if the transition will not be seamless. surface.setFrameRate(newRefreshRate, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS);
امنیت و حریم خصوصی
ضامن میکروفون و دوربین
در آندروید 12، دستگاه های پشتیبانی شده با فشار دادن یک گزینه، به کاربران امکان می دهند تا دسترسی دوربین و میکروفون را برای همه برنامه های دستگاه فعال و غیرفعال کنند. کاربران می توانند از گزینه صفحه حریم خصوصی در تنظیمات سیستم و یا از گزینه Quick Settings به گزینه های قابل تغییر دسترسی پیدا کنند.
– وقتی کاربر دسترسی به دوربین را خاموش می کند، برنامه ها یک feed دوربین خالی دریافت می کنند.
– وقتی کاربر دسترسی به میکروفون را خاموش می کند، برنامه ها صدای سایلنت را دریافت می کنند. بعلاوه، سنسورهای حرکت بدون توجه به اینکه شما اجازه HIGH_SAMPLING_RATE_SENSORS را اعلام می کنید، محدودیت ایجاد می کنند.
توجه: وقتی کاربر با سرویس های اضطراری مانند 911 تماس می گیرد، سیستم دسترسی به میکروفون را روشن می کند. این رفتار ایمنی کاربر را حفظ می کند.
وقتی کاربر دسترسی به دوربین یا میکروفون را خاموش می کند، سپس برنامه ای را که نیاز به دسترسی به اطلاعات دوربین یا میکروفون دارد راه اندازی می کند، سیستم به کاربر یادآوری می کند که این گزینه در سراسر دستگاه خاموش است.
برای بررسی اینکه آیا دستگاهی از گزینه خاموش بودن میکروفون و دوربین پشتیبانی می کند یا خیر، کدهای را که در کادر زیر نشان داده شده را امتحان کنید:
val sensorPrivacyManager = applicationContext .getSystemService(SensorPrivacyManager::class.java) as SensorPrivacyManager val supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE) val supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA)
SensorPrivacyManager sensorPrivacyManager = getApplicationContext() .getSystemService(SensorPrivacyManager.class); boolean supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE); boolean supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA);
ضامن های میکروفن و دوربین نباید تاثیری در نحوه مدیریت برنامه شما برای مجوزهای CAMERA و RECORD_AUDIO داشته باشند، به شرطی که بهترین روش ها را برای مجوزهای Android دنبال کنید.
به طور کلی، مطمئن شوید که برنامه شما موارد زیر را انجام می دهد:
– منتظر بمانید تا به دوربین دستگاه دسترسی پیدا کنید تا کاربر اجازه CAMERA را به اپ بدهد.
– منتظر بمانید تا به میکروفون دستگاه دسترسی پیدا کنید تا کاربر اجازه RECORD_AUDIO را به برنامه شما بدهد
برنامه ها نمی توانند هشتارهای سیستم را ببندند
برای بهبود کنترل کاربر هنگام تعامل با برنامه ها و سیستم ، اقدام ACTION_CLOSE_SYSTEM_DIALOGS از Android 12 منسوخ می شود. به جز چند مورد خاص، وقتی برنامه شما سعی می کند اقدامی را که شامل این عمل است فراخوانی کند، برنامه براساس نسخه SDK یکی از موارد زیر را انجام می دهد:
اگر برنامه شما Android 12 را هدف قرار دهد، SecurityException رخ می دهد
اگر برنامه شما Android 11 (سطح API 30 یا پایین تر) را هدف قرار دهد، عمل اجرا نمی شود و پیام زیر در Logcat ظاهر می شود:.
E ActivityTaskManager Permission Denial: android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from com.package.name requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, dropping broadcast.
استثناها
در موارد زیر، یک برنامه همچنان می تواند هشتار سیستم را در Android 12 ببندد.
برنامه شما در حال انجام تست ابزار دقیق است.
برنامه شما Android 11 یا پایین تر را هدف قرار داده و پنجره ای را نشان می دهد که در بالای کشوی اعلانات قرار دارد.
توجه: اگر برنامه شما Android 12 را هدف قرار داده است، در این شرایط نیازی به استفاده از ACTION_CLOSE_SYSTEM_DIALOGS ندارید. این به این دلیل است که اگر برنامه شما startActivity() را فراخوانی کند در حالی که پنجره ای بالای کشوی اعلانات قرار دارد، سیستم کشوی اعلان را به طور خودکار می بندد.
• برنامه شما Android 11 یا پایین تر را هدف قرار داده است. علاوه بر این، کاربر با یک اعلان ارتباط برقرار کرده است، احتمالاً با استفاده از دکمه های عملکرد اعلان، برنامه شما در پاسخ به عملکرد کاربر در حال پردازش یک گیرنده سرویس یا پخش است.
• برنامه شما Android 11 یا پایین تر را هدف قرار داده و دارای سرویس دسترسی فعال است. اگر برنامه شما Android 12 را هدف قرار داده و می خواهد نوار اعلان را ببندد، به جای آن از اقدام قابلیت دسترسی GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE استفاده کنید.
رویدادهای لمسی غیرقابل اعتماد مسدود شده اند
برای حفظ امنیت سیستم و یک تجربه خوب برای کاربر، اندروید 12 از مصرف برنامه ها در رویدادهای لمسی در جایی که یک همپوشانی برنامه را به روشی غیرامنیتی پنهان می کند، جلوگیری می کند. به عبارت دیگر، سیستم لمسهایی را که از پنجره های خاصی عبور می کنند، به استثنای چند مورد مسدود می کند.
این تغییر روی برنامه هایی تأثیر می گذارد که انتخاب می کنند لمس ها از طریق پنجره هایشان عبور کند، به عنوان مثال با استفاده از پرچم FLAG_NOT_TOUCHABLE. مثال زیرمواردی هستند که محدود نمی شوند:
• پوشش هایی که به اجازه SYSTEM_ALERT_WINDOW نیاز دارند، مانند ویندوزهایی که از TYPE_APPLICATION_OVERLAY استفاده می کنند و از پرچم FLAG_NOT_TOUCHABLE استفاده می کنند.
• ویندوز های فعالی که از پرچم FLAG_NOT_TOUCHABLE استفاده می کنند.
استثناها: در موارد زیر، لمس ” pass-through” مجاز است:
• تعاملات درون برنامه شما. برنامه شما همپوشانی را نشان می دهد و فقط زمانی که کاربر در حال تعامل با برنامه شما باشد، همپوشانی ظاهر می شود.
• ویندوز های قابل اعتماد. این پنجره ها شامل موارد زیر است (اما محدود نمی شوند):
ویندوز های دسترسی
ویندوز ویرایشگر روش ورودی (IME)
ویندوز های دستیار
توجه: Windows از نوع TYPE_APPLICATION_OVERLAY مورد اعتماد نیست.
• ویندوزهای نامرئی. نمای ریشه ویندوز رفته یا نامرئی است.
• ویندوزهای کاملاً شفاف. خاصیت alpha برای پنجره 0.0 است.
• ویندوزهای هشدار سیستم به اندازه کافی شفاف. این سیستم مجموعه ای از ویندوزهای هشدار سیستم را هنگامی که میزان تیرگی ترکیبی کمتر یا مساوی با حداکثر تیرگی مبهم سیستم برای لمس باشد، به اندازه کافی شفاف می داند. در Android 12 Beta ، این حداکثر میزان کدری 0.8 است. این مقدار ممکن است در نسخه بتا در آینده تغییر کند.
تشخیص دهید که لمس غیرقابل اعتماد مسدود شده است
اگر عملکرد لمسی توسط سیستم مسدود شده باشد، Logcat پیام زیر را ثبت می کند:
Untrusted touch due to occlusion by PACKAGE_NAME |
تغییرات را تست کنید
لمسهای نامطمئن به طور پیش فرض در دستگاههایی که Android 12 Developer Preview را اجرا می کنند مسدود شده اند. برای لمس غیر قابل اعتماد، دستور ADB زیر را در یک پنجره ترمینال اجرا کنید:
# A specific app adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.app # All apps # If you'd still like to see a Logcat message warning when a touch would be # blocked, use 1 instead of 0. adb shell settings put global block_untrusted_touches 0
برای برگرداندن عملکرد دستگاه به حالت پیش فرض (لمس های نامطمئن مسدود شده اند)، دستور زیر را اجرا کنید:
# A specific app adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.app # All apps adb shell settings put global block_untrusted_touches 2
Permission package visibility
در دستگاه هایی که Android 12 را اجرا می کنند، برنامه هایی که Android 11 (سطح API 30) یا بالاتر را هدف قرار می دهند و با یکی از روشهای زیر فراخوانی می شوند، بر اساس package visibility در سایر برنامه ها، یک مجموعه فیلتر شده را دریافت می کنند:
• getAllPermissionGroups()
• getPermissionGroupInfo()
• getPermissionInfo()
• queryPermissionsByGroup()
حذف شدن Bouncy Castle implementation
اندروید 12 بسیاری از پیاده سازی های BouncyCastle الگوریتم های رمزنگاری را که قبلاً منسوخ شده بودند حذف کرده است، از جمله همه الگوریتم های AES. در عوض سیستم از پیاده سازی های رمزنگاری شده این الگوریتم ها استفاده می کند.
در صورت صحت هر یک از موارد زیر، این تغییر روی برنامه شما تأثیر می گذارد:
• برنامه شما از اندازه کلیدهای 512 بیتی استفاده می کند. رمزگذاری از این اندازه کلید پشتیبانی نمی کند. در صورت لزوم ، رمزنگاری برنامه خود را به روز کنید تا بتوانید از اندازه کلیدهای مختلف استفاده کنید.
• برنامه شما با KeyGenerator از اندازه کلیدهای نامعتبر استفاده می کند. اجرای Conscrypt از KeyGenerator در مقایسه با BouncyCastle اعتبار سنجی بیشتری بر روی پارامترهای کلیدی انجام می دهد. به عنوان مثال ، Conscrypt به برنامه شما اجازه تولید یک کلید 64 بیتی AES را نمی دهد زیرا AES فقط از کلیدهای 128 ، 192 و 256 بیتی پشتیبانی می کند.
BouncyCastle اجازه می دهد تا کلیدهایی با اندازه نامعتبر تولید شوند، اما اگر از این کلیدها با رمز استفاده شود بعداً خراب می شود. رمزگذاری زودتر انجام نمی شود.
• شما رمزهای (Galois / Counter Mode (GCM خود را با استفاده از اندازه ای غیر از 12 بیتی استفاده می کنید. اجرای GcmParameterSpec توسط Conscrypt نیاز به مقداردهی اولیه 12 بیتی دارد که NIST توصیه می کند.
اعلان های دسترسی به Clipboard
در Android 12 ، وقتی برنامه ای برای اولین بار با getPrimaryClip() تماس می گیرد تا برای اولین بار از برنامه دیگری به ClipData دسترسی پیدا کند، پیام toast دسترسی این clipboard را به کاربر اطلاع می دهد.
متن درون پیام toast حاوی قالب زیر است:
APP pasted from your clipboard.
برنامه شما ممکن است با getPrimaryClipDescription() تماس بگیرد تا اطلاعات مربوط به داده های فعلی را در clipboard دریافت کند. وقتی برنامه را با این اجرا کنید، سیستم پیام تست نشده را نشان نمی دهد.
Android 12 از این روش برای شناسایی جزئیات اضافی بهره گرفته و شیوه زیر بهبود می بخشد:
• متن تلطیف شده ، با استفاده از () isStyledText.
• طبقه بندی های مختلف متن ، مانند URL ها ، با استفاده از getConfidenceScore()
قابلیت اتصال:
API های زیر در Android 12 اضافه می شوند:
• isPasspointTermsAndConditionsSupported(): هنگامی که شرایط لازم برای پذیرش مورد نیاز است، یک اعلان برای کاربر نمایش داده می شود. برنامه هایی که شبکه های Passpoint را ارائه می دهند که براساس شرایط و ضوابط دسته بندی شده اند، باید ابتدا با این API تماس بگیرند تا مطمئن شوند دستگاه از این قابلیت پشتیبانی می کند. اگر دستگاه از قابلیت پشتیبانی نکند، نمی تواند به این شبکه متصل شود و باید یک شبکه جایگزین یا قدیمی پیشنهاد شود.
• isDecoratedIdentitySupported(): هنگام احراز هویت در شبکه هایی با اراستگی پیشوند، پیشوند هویت تزیین شده به اپراتورهای شبکه اجازه می دهد شناسه دسترسی شبکه (NAI) را برای انجام مسیریابی صریح از طریق چندین پروکسی داخل شبکه AAA به روز کنند.
Android 12 این ویژگی را برای مطابقت با مشخصات WBA برای برنامه های افزودنی PPS-MO پیاده سازی می کند. برنامه هایی که شبکه های Passpoint را پیشنهاد می کنند و نیاز به هویت تزئینی دارند باید ابتدا با این API تماس بگیرند تا مطمئن شوند دستگاه از این قابلیت پشتیبانی می کند. اگر دستگاه از قابلیت پشتیبانی نکند، هویت تزئین نمی شود و احراز هویت در شبکه ممکن است خراب شود.
برای ایجاد یک پیشنهاد Passpoint ، برنامه ها باید از کلاسهای PasspointConfiguration ، اعتبارنامه و HomeSp استفاده کنند. این کلاسها مشخصات Passpoint را توصیف می کنند، که در مشخصات Wi-Fi Alliance Passpoint تعریف شده است.
محدودیت های رابط غیر SDK به روز شده است
Android 12 شامل لیست های به روز شده از رابط های غیر SDK محدود شده بر اساس همکاری با توسعه دهندگان Android و آخرین تست داخلی است. قبل از محدود کردن رابط های غیر SDK ، اطمینان حاصل کنیم که گزینه های عمومی در دسترس هستند.
اگر برنامه شما Android 12 را هدف قرار ندهد، ممکن است برخی از این تغییرات بلافاصله روی برنامه شما تأثیر نگذارد. این در حالی است که در حال حاضر می توانید از برخی از رابط های غیر SDK استفاده کنید (بستگی به سطح API هدف برنامه شما دارد)، استفاده از هر روش یا زمینه غیر SDK همیشه خطر شکستن برنامه شما را به همراه دارد.
اگر مطمئن نیستید که برنامه شما از رابط های غیر SDK استفاده می کند، می توانید برای فهمیدن این موضوع برنامه خود را تست کنید. اگر برنامه شما به رابط های غیر SDK متکی است، باید شروع به برنامه ریزی انتقال به گزینه های SDK کنید. با این وجود، ما می فهمیم که برخی از برنامه ها موارد استفاده معتبری برای استفاده از رابط های غیر SDK دارند. اگر نمی توانید جایگزینی برای استفاده از رابط غیر SDK برای یک ویژگی در برنامه خود پیدا کنید ، باید یک API عمومی جدید درخواست کنید.