Je construis une application iPhone qui est juste une UIWebView
d'un site mobile existant qui a une connexion basée sur un formulaire. Lorsque je me connecte au site mobile sur iPhone Safari, je suis invité à enregistrer mon nom d'utilisateur et mon mot de passe, qui sont ensuite remplis automatiquement lorsque je retourne sur le site.
J'aimerais activer la même fonctionnalité dans l'application UIWebView
mais je n'arrive pas à trouver comment le faire. Des idées ?
Solution
En suivant le modèle de base de Michael (voir réponse acceptée), j'ai réussi à le faire. Voici ce que j'ai fait :
DONNÉES DE RÉGLAGE
- (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];
}
}
OBTENIR DES DONNÉES
- (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];
}
}
}
Notez que j'utilise l'excellent outil de Buzz Andersen. SFHFKeychainUtils pour stocker des données sensibles dans le trousseau d'iOs.
Afin de faire fonctionner SFHFKeychainUtils, vous devez faire quelques choses :
- Añadir
SFHFKeychainUtils.h
ySFHFKeychainUtils.m
à votre projet - Ajouter le
Security.framework
à votre projet -
#import <Security/Security.h>
y#import "SFHFKeychainUtils.h"