CocoaLibSpotify で、SPLoginViewController に資格情報を保存させて、後でユーザーが [[SPSession sharedSession] attemptsLoginWithStoredCredentials:] 経由で自動的にログインできるようにするにはどうすればよいですか?
2 に答える
あなたはそうしない。
SPSessionDelegate
代わりに、メソッドを実装し-session:didGenerateLoginCredentials:forUserName:
て資格情報を保存しますNSUserDefaults
(指定された資格情報は既に暗号化されており、平文で安全に保存できます)。
次回アプリを起動するときに、利用可能な資格情報がある場合は、SPLoginViewController
完全にスキップしてSPSession
のattemptLoginWithUserName:existingCredential:rememberCredentials:
方法を使用してログインします。これによりログイン エラーが発生した場合、トークンは無効になっているため、ユーザーに再度ログインするよう求める必要があります。トークンが生成されてからユーザーがパスワードを変更すると、無効化が発生する可能性があります。
rememberCredentials:
パラメーターと古いattemptLoginWithStoredCredentials:
やり方は現在非推奨と見なされており、間もなく廃止されることに注意してください。
AttemptLoginWithUserName:existingCredential:rememberCredentials: メソッドが存在しなくなったため、前の回答も関連しなくなりました (SPSession.h のコメントでまだ参照されているにもかかわらず)。
セットアップするには:
- github から最新の cocoalibspotify を取得し、Xcode でビルドします: https://github.com/spotify/cocoalibspotify
- ビルドしてプロジェクトにドロップします。
以前にログインしていない場合に自動的にログインするか、ユーザー認証を求めるには:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *storedCredentials = [defaults valueForKey:@"SpotifyUsers"];
if (storedCredentials == nil)
[self performSelector:@selector(showLogin) withObject:nil afterDelay:0.0];
else
{
NSString *u = [storedCredentials objectForKey:@"LastUser"] ;
[[SPSession sharedSession] attemptLoginWithUserName:u existingCredential:[storedCredentials objectForKey:u]];
}
ログイン時に認証情報を保存するためのコールバック メソッド:
-(void)session:(SPSession *)aSession didGenerateLoginCredentials:(NSString *)credential forUserName:(NSString *)userName
{
NSLog(@"stored credentials");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *storedCredentials = [[defaults valueForKey:@"SpotifyUsers"] mutableCopy];
if (storedCredentials == nil)
storedCredentials = [NSMutableDictionary dictionary];
[storedCredentials setValue:credential forKey:userName];
[storedCredentials setValue:userName forKey:@"LastUser"];
[defaults setValue:storedCredentials forKey:@"SpotifyUsers"];
[defaults synchronize];
}