Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在允许用户访问iPhone应用程序之前,是否要求用户通过登录屏幕?_Iphone_Objective C - Fatal编程技术网

在允许用户访问iPhone应用程序之前,是否要求用户通过登录屏幕?

在允许用户访问iPhone应用程序之前,是否要求用户通过登录屏幕?,iphone,objective-c,Iphone,Objective C,在iPhone上,在访问iPhone应用程序之前,如何显示登录屏幕以获取用户名和密码?此外,iPhone是否像web浏览器一样将cookie存储到安全网站 我在考虑给我的网站的用户一个长API密钥,以存储在他们的iPhone设置中,而不是要求他们使用用户名/密码登录(似乎是iPhone应用程序的方法)。让用户安全登录的最佳方法是什么?我完全可以控制iPhone应用程序和网站的设计,因此具有很大的灵活性。我建议您使用OAuth()等技术。这样,用户就可以授权应用程序访问其帐户,而无需实际输入用户名

在iPhone上,在访问iPhone应用程序之前,如何显示登录屏幕以获取用户名和密码?此外,iPhone是否像web浏览器一样将cookie存储到安全网站


我在考虑给我的网站的用户一个长API密钥,以存储在他们的iPhone设置中,而不是要求他们使用用户名/密码登录(似乎是iPhone应用程序的方法)。让用户安全登录的最佳方法是什么?我完全可以控制iPhone应用程序和网站的设计,因此具有很大的灵活性。

我建议您使用OAuth()等技术。这样,用户就可以授权应用程序访问其帐户,而无需实际输入用户名和密码。也就是说,您不必担心用户凭据的安全存储,而且如果他们的密码发生更改等,也无所谓


facebook/twitter和许多其他知名公司都在使用它,因此它不会消失(它实际上正在作为一个官方标准获得批准)。

你不能限制对应用程序本身的访问,但提供一个要求用户名和密码的初始视图是很简单的。如果用户没有提供正确的信息,应用程序将不允许他们进入下一个实际加载网站的视图


同样,将密钥存储在应用程序的沙盒文件夹中,这样用户或其他任何人都无法通过应用程序访问密钥,这将是一件微不足道的事情

我在几个应用程序中都有这种需求,我使用以下模式:

在呈现给用户的第一个视图的控制器中,我进行了以下测试,其中UserPrefsManager是一个知道用户凭据的单例。此调用导致出现一个模式视图(
FirstTimeWelcomeViewController
),它告诉用户需要注册

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    UserPrefsManager * prefs = [UserPrefsManager sharedInstance];
    if (![prefs isLoggedIn])
    {
        FirstTimeWelcomeViewController * vc = [[[FirstTimeWelcomeViewController alloc] initWithNibName:@"FirstTimeWelcomeViewController" bundle:nil] autorelease];
        [self presentModalViewController:vc animated: false];
    }
    else 
    {
        if (![[RWXLocationSingleton sharedInstance] hasLocation]) {
            [[RWXLocationSingleton  sharedInstance] findLocationWithAccuracy:kCLLocationAccuracyThreeKilometers withObject:self andSelector:@selector(updateLocationsView)];
        }
        [[self tableView ]reloadData];
    }
}
FirstTimeWelcomeViewController基本上是一个带有按钮的屏幕,它向人们打招呼,并引导他们以各种方式登录:

-(IBAction) createAccount
{       
    UIViewController * parent = [self parentViewController];
    CreateAccountViewController * vc = [[[CreateAccountViewController alloc] initWithNibName:@"CreateAccountViewController" bundle:nil] autorelease];
    [self dismissModalViewControllerAnimated:false];
    [parent presentModalViewController:vc animated: false];
}
假设这些也存在于forgotPassword和loginACcount中。。。同样的模式。这将导致当前视图被一个视图替换,该视图处理他们按下按钮的特定情况

使用“loginAccount”方法,您已经打开了LoginAccountViewController,它有一个名为loginButton的方法,其工作原理如下

-(IBAction) loginButton { NSString * u = [self.username text]; NSString * p = [self.password text]; // // app specific logic that tests various inputs and creates a user object. // // goes here... // if([user checkValid]) { UserPrefsManager * prefs = [UserPrefsManager sharedInstance]; [prefs setPassword:p]; [prefs setUsername:u]; [self dismissModalViewControllerAnimated:FALSE]; } // // more app specific stuff // } -(iAction)登录按钮 { NSString*u=[self.username text]; NSString*p=[self.password text]; // //特定于应用程序的逻辑,用于测试各种输入并创建用户对象。 // //去这里。。。 // 如果([用户检查有效]) { UserPrefsManager*prefs=[UserPrefsManager sharedInstance]; [prefs setPassword:p]; [prefs setUsername:u]; [self-dismissModalViewControllerAnimated:FALSE]; } // //更多特定于应用程序的东西 // }
差不多就是这样。您必须使用一种标准方法将内容放入钥匙链或用户默认值来保存信息。如果用户重新创建某项内容时感到烦人,请检查您选择的内容是否在恢复之间持续。第一部分是最有用的部分,但其他部分可能对上下文有用。

这与我的问题有点离题。@MikeN-怎么会离题?(和反对票?)你说你“想给我的网站的用户一个长的API键来存储在他们的iPhone设置中”。这与OAuth非常相似,既然可以使用现有的标准,为什么还要制定自己的安全方法呢?如果您想在将来打开API,为什么要让开发人员制定另一种身份验证机制。请注意,这并没有回答您问题的第二部分,只是关于如何显示对话框的第一部分。首先,我只是要求他们发送一封电子邮件来登录应用程序(用户名实际上是电子邮件地址,毫无帮助),然后让他们选择密码。谢谢你的回答!我使用NSUserDefaults来存储登录信息,因为它会持续存在,并且似乎更容易启动。我的应用程序通过应用程序委托加载我的第一个模式,我应该删除该模式并将其放置在我的选项卡控制器的第一个视图中,还是可以将其放置在AppDelegate.m中?