وب در اندروید

چگونه می توان از اجزای مختلف برای ارائه محتوای وب در برنامه های اندروید استفاده کرد.

پلتفرم اندروید بیش از ده سال است که وجود داشته است و از همان روزهای ابتدایی آن از وب پشتیبانی زیادی داشته است. همراه با WebView، مؤلفه‌ای که به توسعه‌دهندگان اجازه می‌دهد از وب در داخل برنامه‌های اندرویدی خود استفاده کنند، عرضه شد. بیشتر از آن، اندروید به توسعه دهندگان اجازه می دهد تا موتور مرورگر خود را وارد پلتفرم کنند و رقابت و نوآوری را تقویت کنند.

توسعه دهندگان می توانند وب را به طرق مختلف در برنامه های اندروید خود قرار دهند. WebView اغلب برای ارائه تبلیغات، به عنوان یک مؤلفه طرح‌بندی که همراه با عناصر رابط کاربری Android استفاده می‌شود، یا برای بسته‌بندی بازی‌های HTML 5 استفاده می‌شود. تب های سفارشی به توسعه دهندگان امکان می دهد مرورگرهای درون برنامه ای بسازند و یک تجربه ناوبری یکپارچه به محتوای وب شخص ثالث ارائه دهند و فعالیت وب مورد اعتماد به توسعه دهندگان اجازه می دهد از برنامه های وب پیشرفته (PWA) خود در برنامه های Android استفاده کنند که می توانند از فروشگاه Play بارگیری شوند. .

Android WebView

WebView به توسعه دهندگان امکان دسترسی به HTML، CSS و جاوا اسکریپت مدرن را در داخل برنامه های اندرویدی خود می دهد و اجازه می دهد محتوا در داخل APK ارسال شود یا در اینترنت میزبانی شود. این یکی از انعطاف‌پذیرترین و قدرتمندترین مؤلفه‌های اندروید است که می‌تواند برای بسیاری از مواردی که محتوای وب در برنامه اندروید گنجانده شده است، استفاده شود. از تقویت خدمات تبلیغاتی مانند AdMob تا ساخت و ارسال بازی‌های کامل HTML5 که از APIهای مدرن مانند WebGL استفاده می‌کنند.

اما، هنگامی که برای ایجاد یک مرورگر درون برنامه ای یا گنجاندن PWA در یک برنامه اندرویدی استفاده می شود، WebView فاقد امنیت، ویژگی ها و قابلیت های پلت فرم وب است.

چالش مرورگر درون برنامه ای

با گذشت زمان، بیشتر و بیشتر توسعه‌دهندگان تجربیات مرورگر خود را با گنجاندن محتوای شخص ثالث در برنامه Android خود ایجاد کرده‌اند، با هدف ایجاد تجربه یکپارچه‌تر برای کاربران خود هنگام پیمایش به وب‌سایت‌های شخص ثالث. این تجربیات به عنوان مرورگرهای درون برنامه ای شناخته شدند.

WebView پشتیبانی گسترده ای از پشته فناوری وب مدرن دارد و از بسیاری از API های وب مدرن مانند WebGL پشتیبانی می کند. اما WebView در درجه اول یک جعبه ابزار وب UI است. این به معنای پشتیبانی نیست - و از همه ویژگی های پلت فرم وب پشتیبانی نمی کند . هنگامی که یک API از قبل دارای یک جایگزین در سطح سیستم عامل، مانند بلوتوث وب است، یا نیاز به پیاده سازی رابط کاربری مرورگر دارد، مانند اعلان های فشار، ممکن است پشتیبانی نشود. با تکامل پلتفرم وب و افزودن ویژگی‌های بیشتری که فقط برای برنامه‌های اندرویدی در دسترس بودند، این شکاف حتی بیشتر می‌شود. از آنجایی که توسعه دهندگان برنامه کنترل نمی کنند که چه ویژگی هایی هنگام باز کردن محتوای شخص ثالث استفاده می شود، WebView را برای مرورگرهای درون برنامه ای یا باز کردن برنامه های وب پیشرفته انتخاب ضعیفی می کند. حتی اگر WebView از همه ویژگی‌های پلتفرم وب پشتیبانی می‌کرد، توسعه‌دهندگان همچنان باید کد بنویسند و رابط کاربری خود را برای عملکردهایی مانند مجوزها یا اعلان‌های فشاری پیاده‌سازی کنند، که دستیابی به سازگاری را برای کاربران دشوار می‌کند.

ملاحظات امنیتی برای استفاده از WebView به عنوان یک مرورگر درون برنامه ای

WebView به برنامه embedder دسترسی کامل به محتوای رندر شده از جمله کوکی ها و DOM می دهد. اینها ویژگی های قدرتمندی هستند که به سطح بالایی از اعتماد کاربران نیاز دارند.

از آنجایی که WebView به عنوان چارچوبی برای ساخت مرورگرها در نظر گرفته نشده است، فاقد ویژگی های امنیتی موجود در مرورگرهای مدرن است.

معماری چند فرآیندی و جداسازی سایت

مرورگرها به گونه ای طراحی شده اند که هنگام ارائه و اجرای محتوای غیرقابل اعتماد، ایمن باشند. برای اطمینان از ایمن ماندن کاربر هنگام پیمایش محتوایی که به طور بالقوه غیرقابل اعتماد یا حتی مخرب است، مرورگرهای مدرن از تکنیک هایی مانند استفاده از معماری چند فرآیندی و جداسازی سایت استفاده می کنند.

بدون معماری چند فرآیندی، خرابی ناشی از صفحه وب می‌تواند کل برنامه مرورگر را خراب کند یا از یک آسیب‌پذیری برای در دست گرفتن کنترل کل دستگاه سوء استفاده شود. جداسازی سایت لایه دیگری از امنیت را اضافه می کند که دسترسی سایت های غیرقابل اعتماد و سرقت اطلاعات از سایت های دیگر را سخت تر می کند.

تا قبل از Android 8.0 Oreo، رندر WebView از همان فرآیند برنامه embedder استفاده می کرد. در نسخه‌های جدیدتر سیستم‌عامل، و زمانی که دستگاه‌ها توانایی کافی را داشته باشند، رندر در فرآیند متفاوتی اجرا می‌شود. با این حال، هنوز یک فرآیند واحد بین تمام صفحات و نمونه‌های WebView که آنها را اجرا می‌کنند به اشتراک گذاشته می‌شود که اجرای کامل جداسازی سایت را غیرممکن می‌کند.

فقدان معماری چند فرآیندی و ایزوله‌سازی سایت برای برنامه‌هایی که محتوایی را که متعلق به آن‌ها هستند و به آنها اعتماد دارند، مشکلی نیست، اما می‌تواند برای برنامه‌هایی که محتوای غیرقابل اعتماد شخص ثالث را اجرا می‌کنند، مانند مرورگرهای درون‌برنامه، مشکل ایجاد کند و کاربران را در معرض دید قرار دهد. به آسیب‌پذیری‌هایی مانند Meltdown و Spectre ، که می‌توانند برای سرقت کوکی‌ها، جزئیات بانکی، اطلاعات شخصی و موارد دیگر استفاده شوند.

نشانگرهای UI ایمن

همچنین ارائه شاخص های امنیتی خوب به کاربران مهم است و مرورگرها تلاش زیادی می کنند و همیشه در این زمینه در حال پیشرفت هستند. با این حال، WebView فاقد یک API برای بررسی ایمن بودن اتصال سایت است که به توسعه دهندگان برنامه اجازه می دهد شاخص های امنیتی قابل اعتمادی ایجاد کنند. فقدان چنین API می تواند باعث شود، برای مثال، URL نمایش داده شده در نوار آدرس با صفحه نمایش داده شده به کاربر مطابقت نداشته باشد، حتی از طریق اتصالات امن HTTPS.

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

تب های سفارشی به عنوان راه حلی برای مرورگرهای درون برنامه ای

تب های سفارشی در کروم 45 معرفی شد و به توسعه دهندگان این امکان را می دهد تا از برگه ای از مرورگر پیش فرض کاربر به عنوان بخشی از برنامه خود استفاده کنند. تب های سفارشی در ابتدا توسط کروم راه اندازی شد و به همین دلیل به عنوان "برگه های سفارشی کروم" شناخته می شد. امروزه این یک API اندروید است و اکثر مرورگرهای محبوب از تب های سفارشی، از جمله کروم، فایرفاکس، اج، و اینترنت سامسونگ پشتیبانی می کنند، بنابراین بهتر است آن را فقط «برگه های سفارشی» بنامیم.

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

آنها همچنین ویژگی هایی را ارائه می دهند که قبلاً هنگام استفاده از WebView یا تعبیه موتور مرورگر در دسترس نبودند. از آنجایی که مرورگر درون‌برنامه توسط مرورگر کاربر کار می‌کند، Custom Tabs فضای ذخیره‌سازی را با مرورگر به اشتراک می‌گذارد، بنابراین کاربران نیازی به ورود مجدد به وب‌سایت‌های مورد علاقه خود هر بار که یکی از برنامه‌های نصب‌شده‌شان جلسه مرور درون‌برنامه‌ای را شروع می‌کند، ندارند.

بر خلاف WebViews، Custom Tabs از تمام ویژگی‌های پلتفرم وب و APIهایی که توسط مرورگر پشتیبانی می‌شود، پشتیبانی می‌کند.

برنامه های وب پیشرو را با استفاده از فعالیت وب مورد اعتماد باز کنید

برنامه‌های وب پیشرو رفتارها و قابلیت‌های بسیاری را که زمانی فقط برای برنامه‌های پلتفرم خاص در دسترس بودند، به وب می‌آورند. با معرفی رفتار برنامه مانند، تمایل توسعه دهندگان برای استفاده مجدد از این تجربیات در اندروید افزایش یافت و توسعه دهندگان شروع به درخواست راه هایی برای ادغام PWA در برنامه های خود کردند.

Custom Tabs از تمام قابلیت‌های وب و APIهای مدرن پشتیبانی می‌کند، اما از آنجایی که اساساً برای باز کردن محتوای شخص ثالث طراحی شده است، یک نوار ابزار در بالا دارد که به کاربران نشان می‌دهد که کدام URL را بازدید می‌کنند، و همچنین نماد قفل نشان می‌دهد که آیا سایت امن است هنگام باز کردن تجربه شخصی یک برنامه، نوار ابزار مانع از این می شود که برنامه احساس کند با سیستم عامل یکپارچه شده است.

Trusted Web Activities در Chrome 72 معرفی شد و به توسعه دهندگان این امکان را می دهد تا از PWA خود در یک برنامه اندروید استفاده کنند . پروتکل آن مشابه پروتکل Custom Tabs است، اما API هایی را معرفی می کند که به توسعه دهندگان اجازه می دهد (از طریق پیوندهای دارایی دیجیتال ) تأیید کنند که هم برنامه Android و هم URL در حال باز شدن را کنترل می کنند و وقتی هر دو درست هستند، نوار URL را حذف می کنند.

آنها همچنین API هایی را برای ایجاد صفحه نمایش در هنگام باز کردن PWA یا واگذاری اعلان های وب به کد اندروید معرفی کردند. ویژگی‌های بیشتری مانند پشتیبانی از Play Billing به زودی ارائه می‌شود.

از آنجایی که انتظار می رود URL های باز شده در Trusted Web Activities PWA باشند و دارای مجموعه ای از رفتارها و ویژگی های عملکرد باشند، Trusted Web Activities معیارهای کیفی را برای PWA هایی که در داخل آن باز می شوند معرفی می کند.

محدودیت های راه حل های فعلی

بازخورد توسعه‌دهندگان نشان می‌دهد که نیاز به سازگاری پلتفرم تب‌های سفارشی همراه با انعطاف‌پذیری WebView وجود دارد تا بتوانند، برای مثال، به DOM دسترسی داشته باشند یا جاوا اسکریپت را به مرورگرهای درون‌برنامه خود تزریق کنند.

تب های سفارشی عملاً تبی است که توسط مرورگر کاربر ارائه می شود، با رابط کاربری سفارشی یا اصلاً بدون رابط کاربری. این بدان معنی است که مرورگر باید به انتظارات کاربر در مورد حریم خصوصی و امنیت نسبت به مرورگر احترام بگذارد و برخی از این ویژگی ها را غیرممکن می کند.

تیم وب در اندروید در Google به دنبال جایگزین‌ها و آزمایش راه‌حل‌هایی برای حل این موارد استفاده است. منتظر جزئیات باشید!

خلاصه

WebView زمانی مفید است که یک برنامه در داخل برنامه اندروید خود به HTML، CSS و جاوا اسکریپت نیاز دارد، اما از ویژگی‌ها و قابلیت‌های پیشرفته‌تر موجود در وب مدرن مانند Push Notifications، Web Bluetooth و موارد دیگر استفاده نمی‌کند. هنگام باز کردن محتوایی که برای پلتفرم وب مدرن طراحی شده است، توصیه نمی شود، زیرا ممکن است به روشی که توسعه دهنده در نظر داشته نمایش داده نشود. WebView برای ایجاد مرورگرهای درون برنامه ای توصیه نمی شود. از طرف دیگر نمایش محتوای وب شخص اول منطقه ای است که WebViews واقعاً می درخشد.

وقتی توسعه‌دهندگان می‌خواهند برنامه وب پیشرو خود را به صورت تمام صفحه در داخل برنامه Android خود ارائه دهند، باید از «فعالیت وب مورد اعتماد» استفاده شود. می توان از آن به عنوان تنها فعالیت در برنامه استفاده کرد یا در کنار سایر فعالیت های اندروید استفاده کرد.

برگه های سفارشی روش توصیه شده برای باز کردن محتوای شخص ثالث است که برای پلتفرم وب طراحی شده است که به عنوان مرورگرهای درون برنامه نیز شناخته می شود.