Spotify SPLoginViewController以记住凭据

Spotify SPLoginViewController以记住凭据,spotify,cocoalibspotify-2.0,Spotify,Cocoalibspotify 2.0,在CocoaLibSpotify中,如何让SPLoginViewController存储凭据,以便用户以后可以通过[[SPSSession sharedSession]attemptLoginWithStoredCredentials:]自动登录?您不需要 相反,实现SPSessionDelegate方法-session:didGenerateLoingCredentials:forUserName:并将凭据存储在NSUserDefaults或其他任何文件中(给定的凭据已经加密,可以安全地存储在

在CocoaLibSpotify中,如何让SPLoginViewController存储凭据,以便用户以后可以通过[[SPSSession sharedSession]attemptLoginWithStoredCredentials:]自动登录?

您不需要

相反,实现
SPSessionDelegate
方法
-session:didGenerateLoingCredentials:forUserName:
并将凭据存储在
NSUserDefaults
或其他任何文件中(给定的凭据已经加密,可以安全地存储在明文中)

下次启动应用程序时,如果您有可用的凭据,请完全跳过
SPLoginViewController
,并使用
SPSession
attemptLoginWithUserName:ExistingCredentials:rememberCredentials:
方法登录。如果这会生成登录错误,则令牌已无效,您需要要求用户再次登录-如果用户在生成令牌后更改了密码,则可能会发生无效


请注意,
rememberCredentials:
参数和旧的
attemptLoginWithStoredRedentials:
操作方式现在被认为是不推荐的,很快就会消失。

前面的答案也不再与用户名为:existingCredential:rememberCredentials:method的attemptLoginWithUserName:existingCredential相关(尽管SPSSession.h的评论中仍提到了这一点)

要获取设置,请执行以下操作:

  • 从github获取最新的cocoalibspotify并在Xcode中构建:
  • 构建并放入您的项目:
  • 要自动登录或在以前未登录时提示用户身份验证,请执行以下操作:

    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];
    }
    
    用于在登录时存储凭据的回调方法:

    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];
    }