Oauth2外部浏览器请求 - 应用程序启动,收到凭据,浏览器未更新

时间:2013-10-21 03:42:29

标签: objective-c macos cocoa oauth-2.0 soundcloud

我正在使用外部浏览器请求使用OSX中的SoundCloudAPI对自己进行身份验证。 我的应用程序启动,并有一个按钮,打开外部浏览器窗口以对SoundCloud进行身份验证。当我在新窗口中单击“连接”时,我得到一个与我的自定义启动URI方案一致的“外部协议请求”。单击此按钮可将焦点置于已打开的应用程序上,并获得正确的凭据。

问题是,浏览器窗口永远不会改变 - 它只是说它永远连接起来。 SoundCloud没有“连接已确认”警报。我知道我已经过身份验证,因为我可以正确调用API来获取我的用户名等内容。

为什么浏览器不确认连接或解雇?

如果我在应用程序的内部WebView中加载身份验证,则会发生同样的情况。


也许问题是,浏览器中弹出的SoundCloud Connect网页需要告知该应用已连接?这是正确的思路吗?我将如何实现这一目标?


所以,我添加了一些代码来监听SCSoundCloudAccountDidChangeNotification中的更改,然后关闭窗口:

- (void)notificationReceived:(NSNotification *)aNotification;
{
    NSLog(@"%@", aNotification.name);
    SCAccount *account = [SCSoundCloud account];
    NSLog(@"%@", account.description);

    if ([SCSoundCloud account] && [aNotification.name isEqualToString:SCSoundCloudAccountDidChangeNotification]) {
        [_window close];

    }
}

对我来说,这看起来很脏 - 其他应用程序是如何做到的?

1 个答案:

答案 0 :(得分:0)

您可以使用

捕获请求是否已完成
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame

-(void)webView:(WebView *)sender resource:(id)identifier didFinishLoadingFromDataSource:(WebDataSource *)dataSource

请检查这两种方法,其中一种方法应在请求完成后正常工作。然后,您可以采取必要的操作,如刷新webview等...