34

UIWebViewフォームベースのログインを持つ既存のモバイルサイトのiPhone アプリを構築しています。iPhone Safari でモバイル サイトにログインすると、ユーザー名とパスワードを保存するように求められ、後でサイトに戻ったときに自動入力されます。

で同じ機能を有効にしたいUIWebViewのですが、私の人生では、その方法がわかりません。何か案は?


解決

Michael の基本モデル (受け入れられた回答を参照) に従って、これを行うことができました。これが私がしたことです:

設定データ

- (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];
    
    }    

}

データの取得

- (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];
        
        }
    }   
}

Buzz Andersen の素晴らしいSFHFKeychainUtilsパッケージを使用して機密データを iOS キーチェーンに保存していることに注意してください。

SFHFKeychainUtils を機能させるには、いくつかのことを行う必要があります。

  1. プロジェクトにSFHFKeychainUtils.hとを追加するSFHFKeychainUtils.m
  2. Security.frameworkをプロジェクトに追加します
  3. #import <Security/Security.h>#import "SFHFKeychainUtils.h"
4

1 に答える 1

4

私の見た目からすると、それを行う簡単な方法はないと思います。ただし、これが機能する可能性のあるアイデアです。

  • uiwebviewを作成します
  • nsurlrequestを作成します
  • Webviewデリゲートページが読み込まれた関数が起動した後、リクエストのhttp本文を確認します
  • ログイン用のフォームを検索します(一般的なログインフォームの正規表現?)
  • 取得は、ユーザーにそれを保存して後で取得するオプションを提供します
于 2011-01-23T06:11:49.023 に答える