Ist es möglich, dass eine UIWebView zuvor eingegebene Formularwerte (z. B. Benutzername und Passwort) speichern und automatisiert hat?

StackOverflow https://stackoverflow.com/questions/4772341

Frage

Ich baue eine iPhone -App, die nur ein ist UIWebView einer vorhandenen mobilen Site mit einer formbasierten Anmeldung. Wenn ich mich auf der mobilen Site auf iPhone Safari anmelde, bin ich aufgefordert, meinen Benutzernamen/mein Passwort zu speichern. Es ist dann automatisch, wenn ich später zur Website zurückkehre.

Ich möchte die gleiche Funktionalität in der ermöglichen UIWebView, Aber für mein Leben kann ich nicht herausfinden, wie es geht. Irgendwelche Ideen?


Lösung

Nach Michaels Basismodell (siehe akzeptierte Antwort) konnte ich dies erledigen. Hier ist, was ich getan habe:

Daten einstellen

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {

    //save form data
    if(navigationType == UIWebViewNavigationTypeFormSubmitted) {

        //grab the data from the page
        NSString *username = [self.webView stringByEvaluatingJavaScriptFromString: @"document.myForm.username.value"];
        NSString *password = [self.webView stringByEvaluatingJavaScriptFromString: @"document.myForm.password.value"];

        //store values locally
        [[NSUserDefaults standardUserDefaults] setObject:username forKey:@"username"];
        [SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:@"MyService" updateExisting:YES error:nil];

    }    

}

Daten erhalten

- (void)webViewDidFinishLoad:(UIWebView *)webView{

    //verify view is on the login page of the site (simplified)
    NSURL *requestURL = [self.webView.request URL];
    if ([requestURL.host isEqualToString:@"www.mydomain.com"]) {

        //check for stored login credentials
        NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"];

        if (username.length != 0 ) {

            //create js strings
            NSString *loadUsernameJS = [NSString stringWithFormat:@"document.myForm.username.value ='%@'", username];
            NSString *password = [SFHFKeychainUtils getPasswordForUsername: username andServiceName:@"MyService" error:nil];
            if (password.length == 0 ) password = @"";
            NSString *loadPasswordJS = [NSString stringWithFormat:@"document.myForm.password.value ='%@'", password];

            //autofill the form
            [self.webView stringByEvaluatingJavaScriptFromString: loadUsernameJS];
            [self.webView stringByEvaluatingJavaScriptFromString: loadPasswordJS];

        }
    }   
}

Beachten Sie, dass ich Buzz Andersens großartig verwende SfhfkeyChainutils Paket zum Speichern sensibler Daten in den iOS -Schlüsselbund.

Um SFHFKeyChainutils zum Laufen zu bringen, müssen Sie ein paar Dinge tun:

  1. Hinzufügen SFHFKeychainUtils.h und SFHFKeychainUtils.m zu Ihrem Projekt
  2. Ergänzen Sie die Security.framework zu Ihrem Projekt
  3. #import <Security/Security.h> und #import "SFHFKeychainUtils.h"
War es hilfreich?

Lösung

Ich glaube nicht, dass es eine einfache Möglichkeit gibt, es zu tun. Hier ist eine Vorstellung davon was könnte Arbeit aber:

  • Erstellen Sie Ihre UIWebview
  • Erstellen Sie einen Nsurlrequest
  • Nachdem Ihre Webview -Delegate -Seite geladene Funktionsfeuer in der HTTP -Karosserie der Anforderung suchen
  • Finden Sie das Formular für die Anmeldung (Regex für gemeinsame Anmeldeformulare?)
  • Abrufen Sie dem Benutzer die Option zum Speichern und rufen Sie später ab
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top