iOS登录模式

Posted

技术标签:

【中文标题】iOS登录模式【英文标题】:iOS Login Modal 【发布时间】:2013-04-13 22:41:08 【问题描述】:

我正在编写一个需要用户登录的 ios 应用程序。登录需要向 Web 服务发出 JSON 请求,然后将用户详细信息存储在 Core Data 或任何最佳位置。

此外,我需要在主应用程序启动之前显示登录模式,我知道为此我将其称为 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

所以,我需要一个简单的登录名、用户名和密码字段,发出请求,然后将生成的 JSON 数据存储到某个地方,也许是核心数据?

我搜索了一个登录示例的高低,但它们都非常简陋,或者没有完全符合我的要求。我正在考虑创建一个 xib 文件然后调用它,但我不确定。

【问题讨论】:

您可能想尝试AuthNavigation 框架。它基本上为您提供了登录屏幕(和加载屏幕,可帮助您在后台发出 JSON 请求)所需的结构 【参考方案1】:

几天前我也在想同样的问题。 这是我的解决方案: 在didFinishLaunchingWithOptions 中,我调用一个方法检查您的数据库中是否有帐户和密码(核心数据?我只是使用用户默认值)。 如果有,请尝试登录,如果登录失败,则显示模态视图。如果成功,请将您的 appdelegate.window.rootviewcontroller 设置为主视图控制器 如果没有,则显示模态视图。

或者登录失败,blablabla...

对不起我的英语不好。 这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];

    UINavigationController *nav = [[UINavigationController alloc] init];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    [ZTCAPIClient registerUserInfo];
    return YES;


+ (void) registerUserInfo 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSString *account = [defaults stringForKey:@"account"];
if(!account) 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
        // load default value
        [self performSelector:@selector(registerDefaultsFromSettingsBundle)];
        dispatch_async(dispatch_get_main_queue(), ^
            ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init];
            UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView];
            [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO];
            [ZTCNotice showSuccessNoticeInView:userSettingsView.view title:[NSString stringWithFormat:@"%@,%@",NSLocalizedString(@"login first time use title", nil),NSLocalizedString(@"login first time use message", nil)]];//TODO
        );
    );
 else 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
        if ([ZTCAPIClient loginWithAccount:[defaults stringForKey:@"account"] Password:[defaults stringForKey:@"password"] BaseURL:[defaults stringForKey:@"url"]]) 
            //DLog(@"Log in SUCCESS");
            dispatch_async(dispatch_get_main_queue(), ^
                UITableViewController *viewController = [[ZTCTaskListViewController alloc] initWithStyle:UITableViewStylePlain];
                UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
                [[[[UIApplication sharedApplication] delegate] window] setRootViewController:nav];
            );
         else 
            //DLog(@"Log in FAIL");
            dispatch_async(dispatch_get_main_queue(), ^
                ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init];
                UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView];
                [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO];
                [ZTCNotice showErrorNoticeInView:userSettingsView.view title:NSLocalizedString(@"login fail title", nil) message:NSLocalizedString(@"login fail message", nil)];
            );
        
    );


【讨论】:

哦,我的第一个最佳答案!也谢谢你! @詹姆斯 如果有人投反对票,请告诉我为什么,我只是像其他人帮助我一样尝试帮助【参考方案2】:

只需让didFinishLaunchingWithOptions 以模态方式将您的LoginViewController 推送到导航堆栈。如果您使用的是故事板,您可以将 LoginViewController 设置为根视图控制器,或者放置一个 segue,给它一个标识符,然后调用 [rootViewController performSegueWithIdentifier:@"YourSegueId" sender:self]

【讨论】:

太棒了,谢谢。存储登录数据的最佳做法是什么? 很高兴我能帮上忙。始终将敏感信息存储在钥匙串中。 当然,我不知道钥匙串,我只是想“核心数据”呵呵。谢谢!

以上是关于iOS登录模式的主要内容,如果未能解决你的问题,请参考以下文章

vue开发关于微信授权登录以及路由mode模式(Hash|History)和手机平台(andriod|IOS)不得不说的故事

如何采用SQL Server身份验证登录

Facebook SDK for iOS 处理登录

PayPal SDK iOS - 登录总是返回 INTERNAL_SERVICE_ERROR (500)

iOS构建后Facebook登录不起作用

iOS Facebook 登录失败