SPLoginViewController для запоминания учетных данных
В CocoaLibSpotify, как я могу получить SPLoginViewController для хранения учетных данных, чтобы пользователи позже могли автоматически войти в систему через [[SPSession sharedSession] tryLoginWithStoredCredentials:]?
2 ответа
Вы не
Вместо этого реализуйте SPSessionDelegate
метод -session:didGenerateLoginCredentials:forUserName:
и хранить учетные данные в NSUserDefaults
или что-то еще (данные учетные данные уже зашифрованы и безопасны для хранения в открытом тексте).
При следующем запуске приложения, если у вас есть доступные учетные данные, пропустите SPLoginViewController
целиком и войдите используя SPSession
"s attemptLoginWithUserName:existingCredential:rememberCredentials:
метод. Если это приводит к ошибке входа в систему, токен был признан недействительным, и вам необходимо снова попросить пользователя войти в систему - аннулирование может произойти, если пользователь изменяет свой пароль с момента создания токена.
Обратите внимание, что rememberCredentials:
параметры и старый attemptLoginWithStoredCredentials:
способ делать вещи теперь считается устаревшим и скоро уйдет.
Предыдущий ответ также больше не актуален, так как метод tryLoginWithUserName: существующие Credential: запомнить Credentials: метод больше не существует (несмотря на то, что на него все еще ссылаются в комментариях SPSession.h)
Чтобы получить настройки:
- Получить последнюю версию cocoalibspotify от github и встроить ее в 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];
}