我正在尝试使用 Stripe 创建一个连接帐户,在从 API 请求帐户 ID 后,它会输出一个 URL 来处理身份验证,我正在使用 ASWebAuthenticationSession,它看起来像这样:
// this is the return url I have given stripe
// https://www.brandboost.app/auth-completion
// some api calls...then stripe returns a url to handle auth that looks like this:
// https://connect.stripe.com/setup/e/acct_1NNfeWPM94892HW/xjaxXiCRPS
let authSession = ASWebAuthenticationSession(url: url, callbackURLScheme: "auth-completion") { (url, error) in
//
}
身份验证完成后,Stripe 会重定向到返回 URL。如何让我的返回 URL 触发回调方案/完成?
仅在使用 URL 方案(执行深层链接的旧方法)时才会调用完成闭包。如果您使用通用链接(新方式),您将收到与任何通用链接一样的回调。如此处所述: https://developer.apple.com/documentation/xcode/supporting-universal-links-in-your-app 通用链接不会调用完成闭包。这在苹果文档中可能会更清楚。
根据我的经验,URL 方案与 ASWebAuthenticationSession 一起工作更可靠。当与 ASWebAuthenticationSession 一起使用时,它们是安全的,因为 Apple 保证即使有多个应用程序订阅同一方案,您的应用程序也会收到回调。
ASWebAuthenticationSession 确保只有调用应用程序的会话才能收到身份验证回调,即使多个应用程序注册了相同的回调 URL 方案也是如此。
花了一周时间尝试让
ASWebAuthenticationSession
工作。永远无法触发回调,也无法让通用链接或常规深层链接发挥作用。
您需要:
myapp://auth
ASWebAuthenticationSession
init 的 url 时,请务必将此 URL(包括方案)设置为 redirect_uri
查询参数ASWebAuthenticationSession
init 的 callbackURLScheme
参数。在这种情况下,它将是callbackURLScheme: "myapp"
myapp://auth?code=BLAHBLAHBLAHACTUALCODEHERE