Bagikan melalui


Tampilan Web di Xamarin.iOS

Selama masa pakai iOS Apple telah merilis sejumlah cara bagi pengembang aplikasi untuk menggabungkan fungsionalitas tampilan web di aplikasi mereka. Sebagian besar pengguna menggunakan browser web Safari bawaan di perangkat iOS mereka, dan karenanya mengharapkan bahwa fungsionalitas tampilan web dari aplikasi lain konsisten dengan pengalaman ini. Mereka mengharapkan gerakan yang sama berfungsi, performanya setara, dan fungsionalitasnya sama.

iOS 11 memperkenalkan perubahan baru pada WKWebView dan SFSafariViewController. Untuk informasi selengkapnya tentang hal ini , lihat Panduan perubahan web di panduan iOS 11.

WKWebView

WKWebView diperkenalkan di iOS 8 yang memungkinkan pengembang aplikasi untuk mengimplementasikan antarmuka penjelajahan web yang mirip dengan Safari seluler. Ini karena, sebagian, pada fakta yang WKWebView menggunakan mesin Nitro Javascript, mesin yang sama yang digunakan oleh Safari seluler. WKWebView harus selalu digunakan melalui UIWebView jika memungkinkan karena peningkatan performa, gerakan yang mudah digunakan, dan kemudahan interaksi antara halaman web dan aplikasi Anda.

WKWebView dapat ditambahkan ke aplikasi Anda dengan cara yang hampir identik dengan UIWebView, namun karena pengembang Anda memiliki lebih banyak kontrol atas UI/UX dan fungsionalitas. Membuat dan menampilkan objek tampilan web akan menampilkan halaman yang diminta, namun Anda dapat mengontrol bagaimana tampilan disajikan, bagaimana pengguna dapat menavigasi, dan bagaimana pengguna keluar dari tampilan.

Kode di bawah ini dapat digunakan untuk meluncurkan WKWebView di aplikasi Xamarin.iOS Anda:

WKWebView webView = new WKWebView(View.Frame, new WKWebViewConfiguration());
View.AddSubview(webView);

var url = new NSUrl("https://learn.microsoft.com");
var request = new NSUrlRequest(url);
webView.LoadRequest(request);

Penting untuk dicatat bahwa WKWebView ada di WebKit namespace, jadi Anda harus menambahkan ini menggunakan direktif ke bagian atas kelas Anda.

WKWebView juga dapat digunakan di aplikasi Xamarin.Mac, dan Anda harus menggunakannya jika Anda membuat aplikasi Mac/iOS lintas platform.

Resep Handle JavaScript Alerts juga menyediakan informasi tentang menggunakan WKWebView dengan Javascript.

SFSafariViewController

SFSafariViewController adalah cara terbaru untuk menyediakan konten web dari aplikasi Anda dan tersedia di iOS 9 dan yang lebih baru. Tidak seperti UIWebView atau WKWebView, SFSafariViewController adalah Pengontrol Tampilan sehingga tidak dapat digunakan dengan tampilan lain. Anda harus hadir SFSafariViewController sebagai Pengontrol Tampilan baru, dengan cara yang sama seperti Anda akan menyajikan Pengontrol Tampilan apa pun.

SFSafariViewController pada dasarnya adalah 'safari mini' yang dapat disematkan ke dalam aplikasi Anda. Seperti WKWebView, ini menggunakan Nitro Javascript Engine yang sama, tetapi juga menyediakan berbagai fitur Safari tambahan seperti Isi Otomatis, Pembaca, dan kemampuan untuk berbagi cookie dan data dengan Safari seluler. Interaksi antara pengguna dan SFSafariViewController tidak dapat diakses oleh aplikasi Anda. Aplikasi Anda tidak akan memiliki akses ke salah satu fitur Safari default.

Ini juga, secara default, mengimplementasikan tombol Selesai , memungkinkan pengguna untuk dengan mudah kembali ke aplikasi Anda, dan meneruskan dan mengembalikan tombol navigasi, memungkinkan pengguna Anda untuk menavigasi melalui tumpukan halaman web. Selain itu, ini juga memberi pengguna bilah alamat memberi mereka ketenangan pikiran bahwa mereka berada di halaman web yang diharapkan. Bilah alamat tidak mengizinkan pengguna mengubah url.

Implementasi ini tidak dapat diubah, jadi SFSafariViewController sangat ideal untuk digunakan sebagai browser default jika aplikasi Anda ingin menyajikan halaman web tanpa penyesuaian apa pun.

Kode di bawah ini dapat digunakan untuk meluncurkan SFSafariViewController di aplikasi Xamarin.iOS Anda:

var sfViewController = new SFSafariViewController(url);

PresentViewController(sfViewController, true, null);

Ini menghasilkan tampilan web berikut:

Contoh tampilan web dengan SFSafariViewController

Safari

Dimungkinkan juga untuk membuka aplikasi Safari seluler dari dalam aplikasi Anda, dengan menggunakan kode di bawah ini:

var url = new NSUrl("https://learn.microsoft.com");

UIApplication.SharedApplication.OpenUrl(url);

Ini menghasilkan tampilan web berikut:

Halaman web yang disajikan di Safari

Menavigasi pengguna dari aplikasi Anda ke Safari umumnya harus selalu dihindari. Sebagian besar pengguna tidak akan mengharapkan navigasi di luar aplikasi Anda, jadi jika Anda menavigasi jauh dari aplikasi Anda, pengguna mungkin tidak pernah mengembalikannya, pada dasarnya membunuh keterlibatan.

Peningkatan iOS 9 memungkinkan pengguna untuk dengan mudah kembali ke aplikasi Anda melalui tombol kembali yang disediakan di sudut kiri atas halaman Safari.

Keamanan Transportasi Aplikasi

App Transport Security, atau ATS diperkenalkan oleh Apple di iOS 9 untuk memastikan bahwa semua komunikasi internet sesuai dengan praktik terbaik koneksi yang aman.

Untuk informasi selengkapnya tentang ATS, termasuk cara menerapkannya di aplikasi Anda, lihat panduan Keamanan Transportasi Aplikasi.

Penghentian UIWebView

UIWebView adalah cara lama Apple untuk menyediakan konten web di aplikasi Anda. Ini dirilis di iOS 2.0, dan telah tidak digunakan lagi pada 8.0.

Penting

UIWebView tidak digunakan lagi. Aplikasi baru yang menggunakan kontrol ini tidak akan diterima ke App Store per April 2020, dan pembaruan aplikasi yang menggunakan kontrol ini tidak akan diterima pada Desember 2020.

UIWebView Dokumentasi Apple menyarankan app harus digunakan WKWebView sebagai gantinya.

Jika Anda mencari sumber daya sehubungan dengan UIWebView peringatan penghentian (ITMS-90809) saat menggunakan Xamarin.Forms, silakan lihat dokumentasi WebView Xamarin.Forms.

Pengembang yang mengirimkan aplikasi iOS dalam enam bulan terakhir (atau lebih) mungkin telah menerima peringatan dari App Store, tentang UIWebView tidak digunakan lagi.

Penghentian API adalah umum. Xamarin.iOS menggunakan atribut kustom untuk memberi sinyal API tersebut (dan menyarankan penggantian jika tersedia) kembali ke pengembang. Apa yang berbeda kali ini, dan jauh kurang umum, adalah bahwa penghentian akan diberlakukan oleh App Store Apple pada waktu pengiriman.

Sayangnya, menghapus UIWebView jenis dari Xamarin.iOS.dll adalah perubahan pemecahan biner. Perubahan ini akan merusak pustaka pihak ketiga yang ada, termasuk beberapa yang mungkin tidak didukung atau bahkan dapat dikompilasi ulang lagi (misalnya, sumber tertutup). Ini hanya akan membuat masalah tambahan bagi pengembang. Oleh karena itu, kami belum menghapus jenisnya.

Dimulai dengan deteksi dan alat baru Xamarin.iOS 13.16 tersedia untuk membantu Anda bermigrasi dari UIWebView.

Detection

Jika Anda baru saja mengirimkan aplikasi iOS ke Apple App Store, Anda mungkin bertanya-tanya apakah situasi ini berlaku untuk aplikasi Anda.

Untuk mengetahuinya, Anda dapat menambahkan --warn-on-type-ref=UIKit.UIWebView ke argumen Mtouch tambahan proyek Anda. Ini akan memperingatkan referensi apa pun ke yang tidak digunakan UIWebView lagi di dalam aplikasi Anda (dan semua dependensinya). Peringatan yang berbeda digunakan untuk melaporkan jenis sebelum dan sesudah linker terkelola dijalankan.

Peringatan, seperti yang lain, dapat diubah menjadi kesalahan menggunakan -warnaserror:. Ini dapat berguna jika Anda ingin memastikan dependensi UIWebView baru tidak ditambahkan setelah verifikasi Anda. Contohnya:

  • -warnaserror:1502 akan melaporkan kesalahan jika ada referensi yang ditemukan di rakitan yang telah ditautkan sebelumnya.
  • -warnaserror:1503 akan melaporkan kesalahan jika ada referensi yang ditemukan di rakitan pascataut.

Anda juga dapat membungkam peringatan jika hasil penautan pra/posting tidak berguna. Contohnya:

  • -nowarn:1502tidak akan melaporkan peringatan jika ada referensi yang ditemukan di rakitan yang telah ditautkan sebelumnya.
  • -nowarn:1503tidak akan melaporkan peringatan jika ada referensi yang ditemukan di rakitan pasca-ditautkan.

Penghapusan

Setiap aplikasi unik. Menghapus UIWebView dari aplikasi Anda dapat memerlukan langkah-langkah yang berbeda tergantung pada bagaimana dan di mana aplikasi tersebut digunakan. Skenario yang paling umum adalah sebagai berikut:

  • Tidak ada penggunaan UIWebView di dalam aplikasi Anda. Semuanya baik-baik saja. Anda seharusnya tidak memiliki peringatan saat mengirimkan ke AppStore. Tidak ada hal lain yang diperlukan dari Anda.
  • Penggunaan UIWebView langsung oleh aplikasi Anda. Mulailah dengan menghapus penggunaan Anda , UIWebViewmisalnya, ganti dengan jenis (iOS 8) atau SFSafariViewController (iOS 9) yang lebih WKWebView baru. Setelah ini selesai, linker terkelola tidak akan melihat referensi UIWebView apa pun dan biner aplikasi akhir tidak akan memiliki jejaknya.
  • Penggunaan tidak langsung. UIWebView dapat ada di beberapa pustaka pihak ketiga, baik terkelola atau asli yang digunakan oleh aplikasi Anda. Mulailah dengan memperbarui dependensi eksternal Anda ke versi terbaru mereka karena situasi ini mungkin sudah diselesaikan dalam rilis yang lebih baru. Jika tidak, hubungi penjaga pustaka dan tanyakan tentang rencana pembaruan mereka.

Atau, Anda dapat mencoba pendekatan berikut:

  1. Jika Anda menggunakan Xamarin.Forms, baca posting blog ini.
  2. Aktifkan linker terkelola (pada seluruh proyek atau, setidaknya, pada dependensi menggunakan UIWebView) sehingga mungkin dihapus, jika tidak dirujuk. Itu akan menyelesaikan masalah tetapi mungkin memerlukan pekerjaan tambahan untuk membuat tautan kode Anda aman.
  3. Jika Anda tidak dapat mengubah pengaturan tautan terkelola, lihat kasus khusus di bawah ini.

Aplikasi tidak dapat menggunakan linker (atau mengubah pengaturannya)

Jika karena alasan tertentu Anda tidak menggunakan tautan terkelola (misalnya, Jangan tautkan) maka UIWebView simbol akan tetap berada di aplikasi biner yang Anda kirimkan ke Apple dan mungkin ditolak.

Solusi paksa adalah menambahkan --optimize=force-rejected-types-removal ke argumen Mtouch tambahan proyek Anda. Ini akan menghapus jejak UIWebView dari aplikasi. Namun, kode apa pun yang mengacu pada jenis tidak akan berfungsi dengan baik (mengharapkan pengecualian atau crash). Pendekatan ini harus digunakan hanya jika Anda yakin bahwa kode tidak dapat dijangkau saat runtime (bahkan jika dapat dijangkau melalui analisis statis).

Dukungan untuk iOS 7.x (atau yang lebih lama)

UIWebView telah menjadi bagian dari iOS sejak v2.0. Penggantian yang paling umum adalah WKWebView (iOS 8) dan SFSafariViewController (iOS 9). Jika aplikasi Anda masih mendukung versi iOS yang lebih lama, Anda harus mempertimbangkan opsi berikut:

  • Buat iOS 8 versi target minimum Anda (keputusan waktu build).
  • Hanya gunakan WKWebView jika aplikasi berjalan pada iOS 8+ (keputusan runtime).

Aplikasi tidak dikirimkan ke Apple

Jika aplikasi Anda tidak dikirimkan ke Apple, Anda harus berencana untuk menjauh dari API yang tidak digunakan lagi karena dapat dihapus dalam rilis iOS di masa mendatang. Namun, Anda dapat melakukan transisi ini menggunakan jadwal Anda sendiri.