带有 Spotify iOS SDK 的 Cordova iOS - 触发身份验证

Posted

技术标签:

【中文标题】带有 Spotify iOS SDK 的 Cordova iOS - 触发身份验证【英文标题】:Cordova iOS with Spotify iOS SDK - Trigger Auth 【发布时间】:2014-04-30 06:55:51 【问题描述】:

我只是在开发基于 Cordova 的 Web 应用程序,但我有一个问题:我想在新应用程序中包含 Spotify。

Spotify 拥有 ios SDK(测试版),初学者 Tutorial。效果很好(在应用程序加载时启动身份验证)。

现在我想在我的 WebApp 中使用 Cordova.exec(); 实现它(未加载 - 我想在按钮单击时进行身份验证(由 javascript 触发)。

我已经为此生成了一个 Cordova 插件 - 这很有效。我可以通过Cordova.exec();触发一个方法。

此方法被触发:

- (BOOL)startSpotifyAuth:(CDVInvokedUrlCommand*)command 
    // Create SPTAuth instance; create login URL and open it
    NSURL *loginURL = [[SPTAuth defaultInstance] loginURLForClientId:kClientId declaredRedirectURL:[NSURL URLWithString:kCallbackURL] scopes:@[@"login"]];

    // Opening a URL in Safari close to application launch may trigger an iOS bug, so we wait a bit before doing so.
    // [UIApplication performSelector:@selector(openURL:) withObject:loginURL afterDelay:0.1];

    NSLog(@"*** GOT THIS IN DEBUG CONSOLE ***");

    // Ask SPTAuth if the URL given is a Spotify authentication callback
    if ([[SPTAuth defaultInstance] canHandleURL:loginURL withDeclaredRedirectURL:[NSURL URLWithString:kCallbackURL]]) 

        NSLog(@"*** GOT THIS - NOT - IN DEBUG CONSOLE ***");

        // Call the token swap service to get a logged in session
        [[SPTAuth defaultInstance] handleAuthCallbackWithTriggeredAuthURL:loginURL tokenSwapServiceEndpointAtURL:[NSURL URLWithString:kTokenSwapURL] callback:^(NSError *error, SPTSession *session)
        
             if (error != nil) 
                 NSLog(@"*** Auth error: %@", error);
                 return;
             

             // Call the -playUsingSession: method to play a track
             [self playUsingSession:session];
        ];
        return YES;
    
    return NO;

正如您在调试输出中看到的那样:我没有进入 if()。但我不知道为什么:loginURL 看起来是正确的。

【问题讨论】:

【参考方案1】:

您在 if 语句中使用了错误的 URL。此时,您需要验证在用户被退回到 Safari 进行身份验证后传递给您的应用程序的 URL,而不是您使用 SPAuth 生成的 URL。

【讨论】:

【参考方案2】:

您的项目还有问题吗?也许我的Spotify iOS SDK plugin 可以提供帮助。我刚刚将第一个版本发布到插件注册表。

您可以通过cordova命令行客户端安装插件:cordova plugin add com.timflapper.spotify

如果您还没有添加 ios 平台,请添加:cordova platform add ios

以下代码是如何通过 Spotify 进行身份验证并播放单个曲目的简单示例:

var session, player;

var urlScheme = 'your-custom-url-scheme';
var clientId = 'your-own-client-id';

function onDeviceReady() 
  spotify.authenticate(urlScheme, clientId, 'token', authDone);


function authDone(error, sess) 
  if (error) return console.log("ERROR!", error);

  console.log(sess);

  session = sess;

  player = spotify.createAudioPlayer(clientId);

  player.login(session, function(error) 
    if (error) return console.log(error);

    player.play('spotify:track:2DlfLPbXH5ncf56Nytxd4w', function(error) 
      if (error) return console.log(error);
    );
  );


document.addEventListener('deviceready', onDeviceReady, false);

【讨论】:

如何将插件添加到 AngularJS 项目中?目前,在您的答案中运行代码时,我收到“错误:找不到变量:spotify”。我根据你的 github 页面安装了插件。

以上是关于带有 Spotify iOS SDK 的 Cordova iOS - 触发身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Spotify iOS sdk 使用现有访问令牌连接到 Spotify 远程应用程序

使用来自 django-allauth 的访问令牌登录 Spotify iOS SDK

Spotify SDK 播放器不工作:错误 Domain=com.spotify.ios-sdk.playback Code=1 “由于未指定的问题,操作失败。”

Spotify 登录 Spotify iOS sdk beta 版本 3

使用 iOS Spotify SDK 在给定的开始时间启动 Spotify 曲目播放?

使用 Spotify ios-sdk6 从 com.spotify.auth 获取“无效客户端”