Ist es möglich, AFNetworking
Sitzung mit UIWebView zu teilen? Ich habe AFNetworking
verwendet, um mich auf dem Remote-Server anzumelden, aber das UIWebView hat keine Ahnung von der Sitzung, die von AFNetworking
erstellt wird?Sitzung zwischen AFNetworking und UIWebView teilen
Antwort
Eigentlich AFNetworking
und UIWebView
der gleiche Speicher Cookies. Daher benötigen wir keine spezielle Technik, um UIWebView
eine durch AFNetworking
initialisierte Sitzung oder eine systemeigene sitzungsbasierte Anfrage, die NSHTTPCookieStorage
zum Speichern von Cookies verwendet, "freigeben" zu lassen. In meiner Situation fand die UIWebView
freigegebene Sitzung nicht nützlich, nur weil die Sitzung, die von AFNetworking
initialisiert wurde, ein Cookie fehlte, das nur gesendet wurde, wenn die Website mit einem Browser durchsucht wird.
Und hier ist das, was ich das Problem zu lösen hat:
// Open a request to remote server with a User-Agent string set to the request header.
// We'll have browser-specific cookies in NSHTTPCookieStorage
NSString *userAgent = @"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.requestSerializer setValue:userAgent forHTTPHeaderField:@"User-Agent"];
[manager GET:kRemoteServerUrl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Done");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failure");
}];
Above Code stellt sicher, dass wir alle Browser-spezifische Cookies in NSHTTPCookieStorage haben, also lassen Sie die UIWebView
Aktie jede Sitzung, die von nativen Login-Routine initialisiert.
Verwenden Sie die UIWebView + AFNetworking-Kategorie, um loadRequest
aufzurufen.
http://cocoadocs.org/docsets/AFNetworking/3.1.0/Categories/UIWebView+AFNetworking.html