UIWebView Desktop-Website funktioniert nicht

8

Zum Teil als Übung, um ein wenig iOS-Programmierung zu lernen, und zum Teil, weil ich wünschte, ich hätte einen WhatsApp-Client auf dem iPad, versuche ich eine App zu erstellen, die ich persönlich als WhatsApp-Client für mein iPad verwenden kann. Alles was es tut, ist die web.whatsapp.com Desktop Seite in einem UIWebView wie folgt zu laden:

%Vor%

Das funktioniert gut. Es lädt tatsächlich die korrekte Webanwendung, anstatt auf die WhatsApp-Homepage umzuleiten, wie es normalerweise der Fall ist, wenn der Server ein mobiles Gerät erkennt. Aber anstatt mir den QR-Code-Bildschirm für die Anmeldung zu zeigen, präsentiert er mir folgendes:

Wenn ich jetzt WhatsApp Web von Safari auf meinem iPad verwende (und die Desktop-Version anfordere), funktioniert das einwandfrei. Wie Sie sehen können, ersuche ich die Desktop-Site für mein UIWebView, indem ich den UserAgent einstelle. Nun, ich frage mich, warum es in der UIWebView nicht funktionieren würde, und ob vielleicht ein anderer Header oder Wert gesetzt werden müsste, um die App zu überzeugen, in meinem UIWebView-Steuerelement zu arbeiten?

BEARBEITEN

Ich habe WKWebView geändert, indem ich Boris Verebskys Code von Objective-C in Swift umgewandelt habe. Aber während ich zuerst den gleichen Bildschirm wie zuvor sah (sagte mir, dass ich einen anderen Browser verwenden sollte), nachdem ich ihn umgedreht und versucht habe, ihn zur Arbeit zu bringen, finde ich mich mit einem leeren weißen Bildschirm wieder. Nichts taucht mehr auf.

Dies ist mein vollständiger Code, wie er derzeit steht:

%Vor%

Es kann sein, dass meine Konvertierung von Objective-C nach Swift falsch ist. Ich bin mit Objective-C nicht vertraut, das ist sehr wahrscheinlich.

    
Luke 17.05.2016, 21:20
quelle

2 Antworten

8

Nach dem Überprüfen des User Agents überprüft Ссылка , ob der Client indexeddb unterstützt, wahrscheinlich durch JavaScript. Es ist leicht zu bemerken - wenn Sie alle Weiterleitungen verfolgen, die Ihre App durchgeführt hat, finden Sie eine Weiterleitung zu Ссылка . In meinem Fall habe ich die einfache NSURLProtocol -Unterklasse verwendet, um alle Weiterleitungen zu protokollieren. Leider funktioniert NSURLProtocol nicht mehr mit WKWebView .

UIWebView implementiert indexeddb überhaupt nicht. Soweit ich weiß, gibt es keine einfache Möglichkeit, indexeddb-Unterstützung selbst zu implementieren.

Sie können die indexeddb-Unterstützung einfach überprüfen, indem Sie auf html5test.com in UIWebView zugreifen. Sie werden etwas wie sehen:

Aber WKWebView unterstützt indexeddb:

Ich habe überprüft, dass web.whatsapp.com in iOS WKWebView mit einem benutzerdefinierten Benutzeragenten geladen wurde, von meinem Desktop-Safari mit Ссылка übernommen wurde und Es zeigt QR-Code wie Sie es erwartet haben. Darüber hinaus wird die Migration auf WKWebView einige Boni wie verbesserte Leistung und Stabilität hinzufügen.

Ich habe folgenden Code für meinen Test verwendet:

%Vor%

Obwohl es Objective-C ist, sollte es ziemlich einfach sein, in swift zu konvertieren.

UPD:

Grund, warum Sie eine leere Ansicht mit WKWebView haben, ist Transportsicherheit. Verwenden Sie entweder https://web.whatsapp.com als URL (beachten Sie HTTPS anstelle von HTTP) oder fügen Sie NSAllowsArbitraryLoads: YES in Ihrer Anwendung info.plist

hinzu     
Borys Verebskyi 23.06.2016, 23:31
quelle
4

Sie sollten wirklich zu WKWebView wechseln und dann einfach customUserAgent , um die gewünschte Agentenzeichenfolge direkt in der Webansicht festzulegen.

    
Wain 20.06.2016 18:42
quelle

Tags und Links