ASWebAuthenticationSession callbackURLScheme 不会调用完成

问题描述 投票:0回答:2

我正在尝试使用 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 触发回调方案/完成?

swift stripe-payments aswebauthenticationsession
2个回答
0
投票

仅在使用 URL 方案(执行深层链接的旧方法)时才会调用完成闭包。如果您使用通用链接(新方式),您将收到与任何通用链接一样的回调。如此处所述: https://developer.apple.com/documentation/xcode/supporting-universal-links-in-your-app 通用链接不会调用完成闭包。这在苹果文档中可能会更清楚。

根据我的经验,URL 方案与 ASWebAuthenticationSession 一起工作更可靠。当与 ASWebAuthenticationSession 一起使用时,它们是安全的,因为 Apple 保证即使有多个应用程序订阅同一方案,您的应用程序也会收到回调。

ASWebAuthenticationSession 确保只有调用应用程序的会话才能收到身份验证回调,即使多个应用程序注册了相同的回调 URL 方案也是如此。


0
投票

花了一周时间尝试让

ASWebAuthenticationSession
工作。永远无法触发回调,也无法让通用链接或常规深层链接发挥作用。

您需要:

  1. 选择您想要的回调 URL,包括您的自定义方案(实际上可以是任何内容)。例如:
    myapp://auth
  2. 关键: 将其设置为您的身份验证提供商可接受的回调 URL(在上面的情况下为 Stripe)
  3. 构建传入
    ASWebAuthenticationSession
    init 的 url 时,请务必将此 URL(包括方案)设置为
    redirect_uri
    查询参数
  4. 将该方案传递给
    ASWebAuthenticationSession
    init 的
    callbackURLScheme
    参数。在这种情况下,它将是
    callbackURLScheme: "myapp"
  5. 启动会话,如Apple 的文章
  6. 中所示
  7. 如果登录成功,则应触发此回调,并且返回的网址应类似于
    myapp://auth?code=BLAHBLAHBLAHACTUALCODEHERE
  8. 从 URL 参数中获取代码,然后继续您的身份验证流程!
© www.soinside.com 2019 - 2024. All rights reserved.