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)

Чтобы получить настройки:

  1. Получить последнюю версию cocoalibspotify от github и встроить ее в Xcode: https://github.com/spotify/cocoalibspotify
  2. построить и вставить в свой проект:

Чтобы войти в систему автоматически или запросить авторизацию пользователя, если он еще не вошел в систему:

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];
}
Другие вопросы по тегам