Webová zobrazení v Xamarin.iOS
V průběhu životnosti apple pro iOS vydali řadu způsobů, jak vývojáři aplikací začlenit funkce webového zobrazení do svých aplikací. Většina uživatelů využívá integrovaný webový prohlížeč Safari na svém zařízení s iOSem, a proto očekává, že funkce webového zobrazení z jiných aplikací jsou konzistentní s tímto prostředím. Očekávají, že stejná gesta budou fungovat, výkon bude na par a stejné funkce.
iOS 11 zavedl nové změny v obou WKWebView
i SFSafariViewController
. Další informace o těchto změnách najdete v průvodci webovými změnami v iOSu 11.
WKWebView
WKWebView
byl představen v iOSu 8, který vývojářům aplikací umožňuje implementovat rozhraní pro procházení webu podobnému mobilnímu Safari. To je částečně způsobeno skutečností, že WKWebView
používá Nitro Javascript engine, stejný motor používaný mobilním Safari. WKWebView
měla by být vždy použita přes UIWebView, pokud je to možné kvůli zvýšenému výkonu, integrovaným uživatelsky přívětivým gestům a snadné interakci mezi webovou stránkou a vaší aplikací.
WKWebView
můžete do aplikace přidat téměř stejným způsobem jako UIWebView, ale jako vývojáři máte mnohem větší kontrolu nad uživatelským rozhraním nebo uživatelským rozhraním a funkcemi. Při vytváření a zobrazení objektu webového zobrazení se zobrazí požadovaná stránka, ale můžete určit, jak se zobrazení zobrazí, jak může uživatel procházet a jak uživatel zobrazení ukončí.
Následující kód můžete použít ke spuštění WKWebView
aplikace Xamarin.iOS:
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);
Je důležité si uvědomit, že WKWebView
je v WebKit
oboru názvů, takže budete muset tuto direktivu using přidat do horní části třídy.
WKWebView
můžete také použít v aplikacích Xamarin.Mac a měli byste ho použít, pokud vytváříte multiplatformní aplikaci pro Mac/iOS.
Recept na zpracování upozornění JavaScriptu také poskytuje informace o používání WKWebView s JavaScriptem.
SFSafariViewController
SFSafariViewController
je nejnovější způsob, jak poskytnout webový obsah z aplikace a je k dispozici v iOSu 9 a novějším. Na rozdíl od UIWebView
nebo WKWebView
SFSafariViewController
je kontroler zobrazení a nelze ho použít s jinými zobrazeními. Měli byste ho prezentovat SFSafariViewController
jako nový kontroler zobrazení stejným způsobem jako jakýkoli kontroler zobrazení.
SFSafariViewController
je v podstatě mini safari, který je možné vložit do vaší aplikace. Stejně jako WKWebView používá stejný Nitro Javascript Engine, ale také poskytuje řadu dalších funkcí Safari, jako je automatické vyplňování, čtečka a schopnost sdílet soubory cookie a data s mobilním Safari. Interakce mezi uživatelem a uživatelem SFSafariViewController
není přístupná pro vaši aplikaci. Vaše aplikace nebude mít přístup k žádné z výchozích funkcí Safari.
Ve výchozím nastavení také implementuje tlačítko Hotovo , které umožňuje uživateli snadno se vrátit do aplikace a navigační tlačítka vpřed a zpět, což uživateli umožňuje procházet zásobníkem webových stránek. Kromě toho poskytuje uživateli také adresní řádek, který mu dává jistotu, že se nachází na očekávané webové stránce. Adresní řádek neumožňuje uživateli změnit adresu URL.
Tyto implementace nelze změnit, takže SFSafariViewController
je ideální použít jako výchozí prohlížeč, pokud vaše aplikace chce prezentovat webovou stránku bez jakéhokoli přizpůsobení.
Následující kód můžete použít ke spuštění SFSafariViewController
aplikace Xamarin.iOS:
var sfViewController = new SFSafariViewController(url);
PresentViewController(sfViewController, true, null);
Vytvoří se následující webové zobrazení:
Safari
Mobilní aplikaci Safari je také možné otevřít z aplikace pomocí následujícího kódu:
var url = new NSUrl("https://learn.microsoft.com");
UIApplication.SharedApplication.OpenUrl(url);
Vytvoří se následující webové zobrazení:
Při navigaci uživatelů mimo vaši aplikaci do Safari byste se měli obecně vyhnout. Většina uživatelů neočekává navigaci mimo vaši aplikaci, takže pokud aplikaci opustíte, uživatelé ji nemusí nikdy vrátit, v podstatě zabíjející zapojení.
Vylepšení iOSu 9 umožňují uživateli snadno se vrátit do aplikace pomocí tlačítka Zpět, které je k dispozici v levém horním rohu stránky Safari.
Zabezpečení přenosu aplikací
Společnost Apple v iOSu 9 zavedla službu App Transport Security nebo ATS , aby se zajistilo, že veškerá internetová komunikace odpovídá osvědčeným postupům zabezpečeného připojení.
Další informace o ATS, včetně toho, jak ji implementovat ve vaší aplikaci, najdete v příručce App Transport Security .
Vyřazení uiWebView
UIWebView
je starší způsob poskytování webového obsahu ve vaší aplikaci společností Apple. Byla vydána v iOSu 2.0 a od verze 8.0 je zastaralá.
Důležité
UIWebView
je zastaralý. Nové aplikace používající tento ovládací prvek nebudou přijaty do App Storu od dubna 2020 a aktualizace aplikací používající tento ovládací prvek nebudou přijaty do prosince 2020.
UIWebView
Dokumentace společnosti Apple navrhuje, aby se aplikace místo toho používalyWKWebView
.
Pokud hledáte prostředky týkající se UIWebView
upozornění na vyřazení (ITMS-90809) při používání Xamarin.Forms, projděte si dokumentaci k webovému zobrazení Xamarin.Forms.
Vývojáři, kteří odeslali aplikace pro iOS za posledních šest měsíců (nebo tak), mohli obdržet upozornění z App Storu o UIWebView
vyřazení.
Vyřazení rozhraní API jsou běžná. Xamarin.iOS používá vlastní atributy k signalizaci těchto rozhraní API (a navrhuje nahrazení, pokud jsou k dispozici) zpět vývojářům. Co se tentokrát liší a mnohem méně časté je, že vyřazení bude vynucováno App Storem společnosti Apple při odeslání.
Odebrání UIWebView
typu z Xamarin.iOS.dll
je bohužel binární zásadní změna. Tato změna přeruší stávající knihovny třetích stran, včetně některých, které už nemusí být podporované nebo dokonce znovu kompilovatelné (například uzavřený zdroj). Tím se vytvoří jenom další problémy pro vývojáře. Proto typ ještě neodebrali.
Od Xamarin.iOS 13.16 jsou k dispozici nové nástroje pro detekci a nástroje, které vám pomůžou s migrací z UIWebView
.
Detection
Pokud jste nedávno odeslali aplikaci pro iOS do Apple App Storu, může vás zajímat, jestli tato situace platí pro vaše aplikace.
Pokud chcete zjistit, můžete přidat --warn-on-type-ref=UIKit.UIWebView
další argumenty mtouch projektu . Tím se zobrazí upozornění na všechny odkazy na zastaralé UIWebView
v rámci vaší aplikace (a všechny její závislosti). Různá upozornění se používají k typům sestav před a po spuštění spravovaného linkeru.
Upozornění, stejně jako ostatní, mohou být převedena na chyby pomocí -warnaserror:
. To může být užitečné, pokud chcete zajistit, aby po ověření nebyla přidána nová závislost UIWebView
. Příklad:
-warnaserror:1502
hlásí chyby, pokud se v předvázaných sestaveních nacházejí nějaké odkazy.-warnaserror:1503
bude hlásit chyby, pokud se v sestaveních po propojení nacházejí nějaké odkazy.
Upozornění můžete také umlčet, pokud nejsou užitečné výsledky před propojením nebo po vytvoření odkazu. Příklad:
-nowarn:1502
nebude oznamovat upozornění, pokud se v před propojených sestaveních nacházejí nějaké odkazy.-nowarn:1503
nebude oznamovat upozornění, pokud se v následných sestaveních nacházejí nějaké odkazy.
Odstranění
Každá aplikace je jedinečná. Odebrání UIWebView
z aplikace může vyžadovat různé kroky v závislosti na tom, jak a kde se používá. Nejběžnější scénáře jsou následující:
- V aplikaci se nepoužívá
UIWebView
. Všechno je v pořádku. Při odesílání do AppStore byste neměli mít upozornění. Od vás není potřeba nic jiného. - Přímé použití
UIWebView
vaší aplikace. Začněte tím, že odeberete své použitíUIWebView
, například nahraďte novějšímiWKWebView
typy (iOS 8) neboSFSafariViewController
(iOS 9). Jakmile se dokončí spravovaný linker, neměl by se zobrazit žádný odkazUIWebView
a konečný binární soubor aplikace nebude mít žádné stopy. - Nepřímé použití.
UIWebView
může být k dispozici v některých knihovnách třetích stran, a to buď spravované, nebo nativní, které vaše aplikace používá. Začněte aktualizací externích závislostí na jejich nejnovější verze, protože tato situace už může být vyřešena v novější verzi. Pokud ne, obraťte se na správce knihoven a zeptejte se na své plány aktualizací.
Případně můžete vyzkoušet následující přístupy:
- Pokud používáte Xamarin.Forms, přečtěte si tento blogový příspěvek.
- Povolte spravovaný linker (v celém projektu nebo alespoň na závislost pomocí
UIWebView
), aby se mohl odebrat, pokud na něj neodkazuje. Tím se problém vyřeší, ale může to vyžadovat další práci, aby byl linker kódu bezpečný. - Pokud nemůžete změnit nastavení spravovaného linkeru, podívejte se na následující zvláštní případy.
Aplikace nemůžou používat linker (nebo změnit jeho nastavení).
Pokud z nějakého důvodu nepoužívátespravovaný linker (například Ne linkovat), UIWebView
zůstane symbol v binární aplikaci, kterou odešlete společnosti Apple, a může být odmítnut.
Vynuceným řešením je přidat --optimize=force-rejected-types-removal
do argumentů Další mtouch projektu. Tím se odeberou trasování UIWebView
z aplikace. Jakýkoli kód, který odkazuje na typ, ale nebude správně fungovat (očekává se výjimky nebo chybové ukončení). Tento přístup byste měli použít jenom v případě, že jste si jisti, že kód není dostupný za běhu (i když byl dostupný prostřednictvím statické analýzy).
Podpora pro iOS 7.x (nebo starší)
UIWebView
je součástí iOSu od verze 2.0. Nejběžnější náhrady jsou WKWebView
(iOS 8) a SFSafariViewController
(iOS 9). Pokud vaše aplikace stále podporuje starší verze iOS, měli byste zvážit následující možnosti:
- Nastavte iOS 8 jako minimální cílovou verzi (rozhodnutí o čase sestavení).
- Používejte
WKWebView
ji jenom v případě, že je aplikace spuštěná v iOSu 8+ (rozhodnutí o běhu).
Aplikace neodeslané společnosti Apple
Pokud se vaše aplikace neodesílala společnosti Apple, měli byste se od zastaralého rozhraní API odejít, protože ji můžete odebrat v budoucích verzích iOS. Tento přechod však můžete provést pomocí vlastního časového rozvrhu.