iPhone中的用户凭据持久性

时间:2009-12-25 01:24:56

标签: iphone core-data

由于我是iPhone新手,我想做类似的事情:在我的应用程序的主屏幕中,我要求输入用户名和密码,并使用这些信息调用.net web服务授权用户。在这个主屏幕中,有一个开关控制器“记住我”,这样应用程序将在下次运行应用程序时记住用户。我的问题是: 1.我如何在iPhone中调用.net网络服务? 2.我如何能够持久保存这些用户名和密码信息(如网络应用中的cookie),这样就不会要求用户提供凭证信息? 我真的很感激,谢谢。

4 个答案:

答案 0 :(得分:2)

保留用户凭据

如果您要存储用户名和密码,则应使用钥匙串。在iPhone上使用Keychain类似于Mac上的Keychain。

使用Keychain导入“Security / Security.h”。

Apple在其文档中添加并检索用户名和密码的示例here。示例方法

    - (void)mySetObject:(id)inObject forKey:(id)key;
    - (id)myObjectForKey:(id)key;
    - (void)resetKeychainItem;

将使您能够持久保存并检索用户凭据,而无需修改示例代码。

调用需要身份验证的网络服务

根据您的身份验证方案,您可以

答案 1 :(得分:1)

  1. 您使用nsmutableurlrequest生成Web服务请求
  2. 使用nsuserdefaults来保留用户名和密码
  3. 以下是第一个例子:

    -(void)sendUpdate {
    
        User *user = [User sharedManager];
    
        NSData *parkedLocation = [[NSString stringWithFormat:@"<location><latitude>%f</latitude><longitude>%f</longitude><userid>%@</userid><udid>%@</udid></location>", 
                                   coordinate.latitude, coordinate.longitude, userid, user.udid] dataUsingEncoding:NSASCIIStringEncoding];
        //NSLog("parkedlocation = %@", parkedLocation);
        NSString *URLstr = LOCATIONS_URL;
        if (controller.put_url) 
            URLstr = controller.put_url;
        NSURL *theURL = [NSURL URLWithString:URLstr];
        //NSURLRequest *theRequest = [NSURLRequest requestWithURL:theURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
        NSLog(@"IN SEND UPDATE put_url = %@", controller.put_url);
    
        NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
        if (controller.put_url) {
            [theRequest setHTTPMethod:@"PUT"];
        } else {
            [theRequest setHTTPMethod:@"POST"];
        }
        [theRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-type"];
        [theRequest setHTTPBody:parkedLocation];
    
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:TRUE];
    
        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    
        if (!theConnection) {
            NSLog(@"COuldn't get a connection to the iParkNow! server");
        }
    }
    

    和第二个例子:

     [[NSUserDefaults standardUserDefaults] setObject:self.userName.text forKey:@"Username"];
            [[NSUserDefaults standardUserDefaults] setObject:self.password.text forKey:@"Password"];
    

答案 2 :(得分:0)

您有两种选择:用户首选项或核心数据。两者都有能力 - 核心数据可能过度。

答案 3 :(得分:0)

NSURLRequest可用于检索您的身份验证服务等网址。 NsUserDefaults可用于在应用调用之间保存设置。

注意:查看ennuikiller的精彩示例。