In parte come esercizio per imparare un po 'di programmazione iOS e in parte perché vorrei avere un client WhatsApp su iPad, sto provando a creare un'app che posso utilizzare personalmente come client WhatsApp per il mio iPad. Tutto ciò che fa è caricare il sito desktop web.whatsapp.com in un UIWebView in questo modo:Il sito Web UIWebView Desktop non funziona
override func viewDidLoad() {
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17"])
super.viewDidLoad()
self.webView.frame = self.view.bounds
self.webView.scalesPageToFit = true
// Do any additional setup after loading the view, typically from a nib.
let url = NSURL(string: "https://web.whatsapp.com")
let requestObj = NSMutableURLRequest(URL: url!)
webView.loadRequest(requestObj)
//webView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}
Questo funziona bene. In effetti, carica la webapp corretta, piuttosto che reindirizzare alla home page di whatsapp come di solito accade quando il server rileva un dispositivo mobile. Tuttavia, invece di me presentare con lo schermo QR Code per log in, mi presenta con questo:
Ora, se io uso WhatsApp web da Safari sul mio iPad (e richiedere la versione desktop), si funziona perfettamente. Come puoi vedere, sto richiedendo il sito Desktop per UIWebView impostando UserAgent. Ora, mi chiedo perché non funzionerebbe in UIWebView, e se forse ci fosse qualche altra intestazione o valore che deve essere impostato per convincere l'App a funzionare con il mio controllo UIWebView?
EDIT
ho cambiato a WKWebView convertendo il codice di Boris Verebsky da Objective-C per Swift. Tuttavia, mentre inizialmente vedevo lo stesso schermo di prima (dicendomi di usare un altro browser), dopo averlo cambiato e aver provato a farlo funzionare, mi ritrovo con uno schermo bianco vuoto. Non si vede più niente.
Questo è il mio codice completo nella sua forma attuale:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
self.webView = WKWebView(frame: self.view.bounds)
if #available(iOS 9.0, *) {
self.webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17"
} else {
// Fallback on earlier versions
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17"])
}
self.view!.addSubview(self.webView)
self.webView.navigationDelegate = self
// Do any additional setup after loading the view, typically from a nib.
let url: NSURL = NSURL(string: "http://web.whatsapp.com")!
let urlRequest: NSURLRequest = NSURLRequest(URL: url)
webView.loadRequest(urlRequest)
}
func webView(webView: WKWebView, decidePolicyForNavigationAction: WKNavigationAction, decisionHandler: WKNavigationActionPolicy -> Void) {
decisionHandler(.Allow)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Può darsi che la mia conversione da Objective-C a Swift non è corretta. Non ho familiarità con Objective-C, quindi è abbastanza probabile.
Il codice è corretto. Il motivo per cui la visualizzazione vuota è la sicurezza del trasporto. O usare 'https: // web.whatsapp.com' come URL (nota HTTPS invece di HTTP), o aggiungi' NSAllowsArbitraryLoads: YES' nella tua applicazione info.plist. –
@BorisVerebsky Grazie, ora funziona. Solo qualche altro problema da superare prima di poterlo chiamare finito! – Luke