我刚刚开发基于Cordova的Web应用程序,但我遇到了一个问题:我想将Spotify包含在新的应用程序中。
Spotify拥有iOS SDK(测试版)和初学者Tutorial。这很好(在App app上启动Auth)。
现在我想在我的WebApp中使用Cordova.exec();
实现它(不加载 - 我想在Button Click上进行Auth(由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;
}
正如您在Debug Outputs中看到的那样:我没有进入if()。但我不知道原因:loginURL看起来是正确的。
答案 0 :(得分:1)
您在if语句中使用了错误的网址。此时,您需要验证在用户退回到Safari进行身份验证后转移到您的应用程序的URL,而不是使用SPAuth
生成的URL。
答案 1 :(得分:1)
您的项目仍然存在问题吗?也许我的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);