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



我正在使用外部浏览器请求在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];
    }
}

对我来说,这似乎很肮脏 - 这是其他应用程序的做法吗?

您可以使用以下命令捕获请求是否已完成

-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame

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

请检查这两种方法,请求完成后,其中一种方法应该可以工作。然后,您可以采取必要的操作,例如刷新 Web 视图等......

最新更新