【发布时间】:2020-02-02 00:04:21
【问题描述】:
我正在尝试在 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 窗口。这应该都是通过回调自动完成的。
让回调触发的唯一方法是关闭 Safari 窗口,在这种情况下,它会以错误方式回调。
【问题讨论】:
-
对我来说也一样。在 iOS 上完美运行,在 MacOS 上运行不佳。在重定向提示后仍在寻找关闭 Safari 的解决方法。
session.cancel()不适用于这种情况。 -
我可能会向 Apple 提交错误报告。我认为你也应该这样做。
-
好的,下周一会做
标签: macos oauth macos-catalina aswebauthenticationsession