我正在尝试在MacOS 10.15中实现新的ASWebAuthenticationSession
,对callbackURLScheme
感到有些困惑。
ASWebAuthenticationSession
的头文件说:
回调URL通常具有自定义URL方案。对于该应用 接收回调URL,它需要注册自定义URL 方案的Info.plist中,或将方案设置为callbackURLScheme 初始化程序中的参数。
所以我这样初始化:
self.webAuthSession = [[ASWebAuthenticationSession alloc] initWithURL:self.authURL
callbackURLScheme:@"myurlscheme://"
completionHandler:^(NSURL * _Nullable callbackURL, NSError * _Nullable error) {
}];
我尝试访问的oauth提供程序不支持自定义URL方案,因此我将其设置为重定向到一个网址,该网址又重定向到我的URL方案。
因此,在MacOS应用程序中单击“登录”后,Safari会显示一个窗口,允许我登录该服务。成功登录后,发生重定向,但是网页仅显示一个屏幕,显示
Safari无法打开指定的地址。
我可以看到地址是myurlscheme://?code=1234567890abcdefgetc...
,这是正确的,但显然不是在调用ASWebAuthenticationSession
回调。
如果我将URL Scheme添加到plist,则safari窗口将显示一个提示,询问您是否要在我的应用程序中打开它。
我知道我可以从App Delegate的application:openURLs:
方法中获取代码,但这很奇怪,给用户带来了不必要的提示,也使ASWebAuth...
野生动物园窗口保持打开状态。这应该全部通过回调自动完成。
触发回调的唯一方法是关闭safari窗口,在这种情况下它会错误地回调。
答案 0 :(得分:1)
我刚刚回到这里再次尝试,它似乎在MacOS 10.15.1
和10.15.2 beta
上运行良好。
我注意到callbackURLScheme
参数不能包含://
我无法返回并在10.15
上再次进行测试,但是我很高兴现在使用它,前提是10.15
上的每个人都已经更新为10.15.1
答案 1 :(得分:0)
Darren在MacOS中是正确的,您必须从callbackURLScheme中删除://。无论您是否://,iOS都可以正常工作。但是,在MacOS Catalyst中似乎存在一个错误。登录后,我的应用程序将变得专注,但没有得到回调。尚未找到解决方法。