ASWebAuthenticationSession 只显示取消按钮

Wri*_*sCS 5 single-sign-on sfsafariviewcontroller sfauthenticationsession aswebauthenticationsession

我正在验证我们的 Web 服务ASWebAuthenticationSession,出于某种原因,最终重定向后的唯一选项是Cancel。我之前有过这个工作,即使我确实按下了取消,回调 Url 也是通过完成处理程序发送的,我能够在那里解析令牌形式。但现在我得到了错误ASWebAuthenticationSessionErrorCodeCanceledLogin

如何ASWebAuthenticationSession显示“完成”按钮并使用回调 Url 完成处理程序?上次 iOS 更新中有什么变化或中断吗?

我如何创建会话

if (@available(iOS 12.0, *)) {
    self.session = [[ASWebAuthenticationSession alloc]
                    initWithURL:@"http://service.com"
                    callbackURLScheme:@"http://website.com"
                    completionHandler:_sessionHandler];
     [self.session start];
}
Run Code Online (Sandbox Code Playgroud)

完成处理程序

_sessionHandler = ^(NSURL * _Nullable callbackURL, NSError * _Nullable error) {
    NSLog(@"Callback Url: %@, Error: %@", callbackURL, error);
    if ( callbackURL != nil ) {
        __block NSString * token = [weakSelf webToken:@"token" fromUrl:callbackURL];
        weakSelf.completionHandler([weakSelf parseWebToken:token], error);
    }
    else
        weakSelf.completionHandler(nil, error);
};
Run Code Online (Sandbox Code Playgroud)

输出

回调 URL: (null), Error: Error Domain=com.apple.AuthenticationServices.WebAuthenticationSession Code=1 "(null)"

在此处输入图片说明

就像我提到的,这在以前有效,我不确定它在哪里坏了。我使用的测试服务没有改变,所以我想知道它是否在框架中,或者我是否缺少其他东西。

Web 服务是否应该将特定标头发送回最终 Url,以便ASWebAuthenticationSession显示“完成”按钮并使用 Url 完成处理程序?