IOS開発の記録ユーザ登録状態
6616 ワード
http://www.cnblogs.com/ludashi/p/3950951.html
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一般的な実装方法は、クライアントが最初にログインした後、サービス側は同時に1つのaccess tokenとrefresh tokenを返し、access tokenは失効期間があり、比較的短く、サービス側と通信するたびにアイデンティティチェックに使用される.refresh tokenは、access tokenが無効になった後に新しいaccess tokenを交換する際の検証に使用され、成功した後に新しいaccess tokenと新しいrefresh tokenを返します.
前回のブログではCoreDataによるデータの永続化について言及しましたが、CoreDataの構成と使用手順は複雑です.しかし、CoreDataの使用プロセスを熟知していると、CoreDataは使いやすいです.今日お話しするのは、私たちのユーザーのログイン状態をどのように記録するかです.例えば、微信、QQなどは、ユーザーがログインした後、アプリケーションを閉じて開くと直接ログインします.では、App開発でユーザーのログイン状態をどのように記録しますか?以前PHPやJavaでB/S構造のものを書いていたときに、Sessionでユーザーのログイン情報を記憶していましたが、Sessionはサーバー上に存在するのは1回だけで有効で、ユーザーのログイン状態を記録するにはCookieというものが使われていました.CookieはSessionとは異なり,Cookieはユーザがローカルに存在するファイルであり,Cookieにはユーザのログイン情報が格納され,ユーザがここにログインすると自動的にCookieからユーザのログイン情報が読み出される.
Webにかかわらず、私たちのApp開発でも同様にこのような問題に直面しています.ユーザーのログイン状態をどのように記録しますか.私たちのCoreDataで?CoreDataは大量のデータを処理するのに適しており、一般的にTable Viewと組み合わせて使用されています.もちろん、CoreDataでユーザーのログイン情報を格納することができますが、これは少し役に立たず、複雑です.では、他にもっと便利な方法はありますか?アップルがこのようにユーザー体験を重視するのは、もちろん他の方法があります.NSUserDefault.NSUserDefaultが値を設定してから同期します.
NSUserDefaultはアップルがユーザーのログイン情報を格納するために提供してくれたクラスで、もちろん持続的で、くだらないことは多くありません.ユーザーのログインとログアウトをシミュレートしたdemoについて、NSUserDefaultを使用してユーザーのログイン情報を格納する方法を学びます.
1.まず、登録ページに対応するクラスがViewController.hでなければなりません.登録ページには2つのTextFieldと1つのButtonがユーザーの入力を受け入れるために使用されます.Buttonのコールバックをクリックする方法で、ユーザーが登録に成功すれば、ユーザー情報をUserDefaultに保存し、その後、モダリティでメインインタフェースにジャンプします.まず、UserDefaultの一例を取得します.ログインページのログインボタンをコールバックする方法コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2.ログインページの処理が完了すると、UserDefaultのname属性に値があるかどうかに基づいてどのページをロードするかを選択します.storybaordではデフォルトはメインインタフェースですが、AppDelegate.mでログインしていない場合はrootView Controlを設定します.コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3.上記のコードを介して、ユーザーのログイン状態に基づいてロードされた情報を選択することができます.ログイン後のページには、終了するためのボタンを追加します.ボタンコールバックを終了する方法では、以前に保存したユーザー情報をremoveしながら、ログインページにモードでジャンプする必要があります.コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
次のスクリーンショットはstoryboardのスクリーンショットで、実行効果は以下と同じで、ユーザーのログイン状態を記録することができます.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一般的な実装方法は、クライアントが最初にログインした後、サービス側は同時に1つのaccess tokenとrefresh tokenを返し、access tokenは失効期間があり、比較的短く、サービス側と通信するたびにアイデンティティチェックに使用される.refresh tokenは、access tokenが無効になった後に新しいaccess tokenを交換する際の検証に使用され、成功した後に新しいaccess tokenと新しいrefresh tokenを返します.
前回のブログではCoreDataによるデータの永続化について言及しましたが、CoreDataの構成と使用手順は複雑です.しかし、CoreDataの使用プロセスを熟知していると、CoreDataは使いやすいです.今日お話しするのは、私たちのユーザーのログイン状態をどのように記録するかです.例えば、微信、QQなどは、ユーザーがログインした後、アプリケーションを閉じて開くと直接ログインします.では、App開発でユーザーのログイン状態をどのように記録しますか?以前PHPやJavaでB/S構造のものを書いていたときに、Sessionでユーザーのログイン情報を記憶していましたが、Sessionはサーバー上に存在するのは1回だけで有効で、ユーザーのログイン状態を記録するにはCookieというものが使われていました.CookieはSessionとは異なり,Cookieはユーザがローカルに存在するファイルであり,Cookieにはユーザのログイン情報が格納され,ユーザがここにログインすると自動的にCookieからユーザのログイン情報が読み出される.
Webにかかわらず、私たちのApp開発でも同様にこのような問題に直面しています.ユーザーのログイン状態をどのように記録しますか.私たちのCoreDataで?CoreDataは大量のデータを処理するのに適しており、一般的にTable Viewと組み合わせて使用されています.もちろん、CoreDataでユーザーのログイン情報を格納することができますが、これは少し役に立たず、複雑です.では、他にもっと便利な方法はありますか?アップルがこのようにユーザー体験を重視するのは、もちろん他の方法があります.NSUserDefault.NSUserDefaultが値を設定してから同期します.
NSUserDefaultはアップルがユーザーのログイン情報を格納するために提供してくれたクラスで、もちろん持続的で、くだらないことは多くありません.ユーザーのログインとログアウトをシミュレートしたdemoについて、NSUserDefaultを使用してユーザーのログイン情報を格納する方法を学びます.
1.まず、登録ページに対応するクラスがViewController.hでなければなりません.登録ページには2つのTextFieldと1つのButtonがユーザーの入力を受け入れるために使用されます.Buttonのコールバックをクリックする方法で、ユーザーが登録に成功すれば、ユーザー情報をUserDefaultに保存し、その後、モダリティでメインインタフェースにジャンプします.まず、UserDefaultの一例を取得します.ログインページのログインボタンをコールバックする方法コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- (IBAction)tapLogin:(id)sender {
//
NSString *username = self.usernameTextField.text;
NSString *password = self.passwordTextField.text;
//
if
([username isEqualToString:password]){
// userDefault
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// UserDefault
[userDefaults setObject:username forKey:@
"name"
];
[userDefaults setObject:password forKey:@
"password"
];
[userDefaults synchronize];
//
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@
"Main"
bundle:[NSBundle mainBundle]];
id mainViewController = [storyboard instantiateViewControllerWithIdentifier:@
"MainView"
];
[self presentViewController:mainViewController animated:YES completion:^{
}];
}
}
2.ログインページの処理が完了すると、UserDefaultのname属性に値があるかどうかに基づいてどのページをロードするかを選択します.storybaordではデフォルトはメインインタフェースですが、AppDelegate.mでログインしていない場合はrootView Controlを設定します.コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ,
// UserDefault
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *name = [userDefault objectForKey:@
"name"
];
// storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@
"Main"
bundle:[NSBundle mainBundle]];
//
if
(name == nil)
{
NSLog(@
"%@"
,name);
id view = [storyboard instantiateViewControllerWithIdentifier:@
"LoginView"
];
self.window.rootViewController = view;
}
3.上記のコードを介して、ユーザーのログイン状態に基づいてロードされた情報を選択することができます.ログイン後のページには、終了するためのボタンを追加します.ボタンコールバックを終了する方法では、以前に保存したユーザー情報をremoveしながら、ログインページにモードでジャンプする必要があります.コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (IBAction)tapLoginOut:(id)sender {
// UserDefaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// UserDefaults
[userDefaults removeObjectForKey:@
"name"
];
[userDefaults removeObjectForKey:@
"password"
];
[userDefaults synchronize];
// storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@
"Main"
bundle:[NSBundle mainBundle]];
//
id view = [storyboard instantiateViewControllerWithIdentifier:@
"LoginView"
];
//
[self presentViewController:view animated:YES completion:^{
}];
次のスクリーンショットはstoryboardのスクリーンショットで、実行効果は以下と同じで、ユーザーのログイン状態を記録することができます.