0

我一直在尝试使用 CocoaSoundCloudAPI 在 Cocoa 中为 OSX 创建一个基本的桌面应用程序。

我正在努力进行身份验证。单击登录按钮会打开一个外部浏览器窗口,该窗口尝试对我的应用程序进行身份验证。如果我单击“连接”,连接按钮会显示一个可爱的动画......永远,并且[SCSoundCloud account]是空的。

但是,如果我在此过程中单击外部浏览器窗口中的“取消”,我会看到 SCAccount 变为!nil

谁能解释一下?

这是我的代码:

#import "SCMAppDelegate.h"

@implementation SCMAppDelegate

+ (void)initialize
{
    [SCSoundCloud setClientID:@"MYID"
                       secret:@"MYSECRET"
                  redirectURL:[NSURL URLWithString:@"sampleproject1://oauth"]];

}

- (IBAction)login:(id)sender
{
    [SCSoundCloud requestAccessWithPreparedAuthorizationURLHandler:^(NSURL *preparedURL){
        // Load the URL in a web view or open it in an external browser
        [[NSWorkspace sharedWorkspace] openURL:preparedURL];
    }];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
{
    [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self
                                                       andSelector:@selector(handleURLEvent:withReplyEvent:)
                                                     forEventClass:kInternetEventClass
                                                        andEventID:kAEGetURL];
}

- (void)handleURLEvent:(NSAppleEventDescriptor*)event
        withReplyEvent:(NSAppleEventDescriptor*)replyEvent;
{
    NSString* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];

    BOOL handled = [SCSoundCloud handleRedirectURL:[NSURL URLWithString:url]];
    if (!handled) {
        NSLog(@"The URL (%@) could not be handled by the SoundCloud API. Maybe you want to do something with it.", url);
    }

    NSLog(@"This is the account: %@", [SCSoundCloud account]);
}

@end

我一直在使用https://github.com/soundcloud/CocoaSoundCloudAPI/blob/master/GeneralUsage.md作为指南,并且发现大多数事情都可以工作。谁能把我推向正确的方向?

4

1 回答 1

0

我做了一些 NSLogging 并发现,事实上,我正在接收一个有效的 SoundCloud Account 对象,它只是需要更多的时间来接收该对象。

然而,令我惊讶的是,我的外部浏览器窗口从未收到指示连接已完成的通知 - 这是我的错误还是外部 oauth2 请求时经常发生的错误?


看来,即使我在我的应用程序中使用 Facebook 授权,我也永远不会在浏览器页面中收到身份验证已完成的通知。有谁知道我怎么能做到这一点?我很确定我的回调 url 是正确的,但我会继续尝试......

于 2013-10-18T01:35:28.440 回答