You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Turbo Native应用能否不打开外部浏览器访问外部URL完成SSO登录?

Turbo Native 处理外部SSO登录URL的实现方案

针对你提到的Turbo Native应用需在内部处理SSO登录外部URL的需求,可通过以下几种方式实现,避免跳转外部浏览器:

1. 拦截导航请求,在应用内加载外部SSO页面

Turbo Native默认会将非配置域名的URL跳转至外部浏览器,你可以通过自定义会话代理(iOS)或导航拦截器(Android),拦截SSO相关的URL并在应用内的WebView容器中加载:

iOS 实现

在TurboSessionDelegate中重写session(_:shouldVisitURL:)方法,判断目标URL是否属于SSO相关域名,若匹配则用普通WebView加载非Turbo页面:

func session(_ session: Turbo.Session, shouldVisitURL url: URL) -> Bool {
    let ssoDomains = ["abc.com", "pw-sso.example.com"] // 替换为实际SSO域名
    if ssoDomains.contains(url.host ?? "") {
        // 用普通WebView承载SSO页面
        let webViewController = UIViewController()
        let webView = WKWebView(frame: webViewController.view.bounds)
        webViewController.view.addSubview(webView)
        webView.load(URLRequest(url: url))
        self.present(webViewController, animated: true)
        return false // 阻止Turbo默认跳转逻辑
    }
    return true // 其他URL按Turbo默认逻辑处理
}

Android 实现

通过TurboActivity的onVisitProposal方法拦截URL,对SSO域名发起应用内导航:

override fun onVisitProposal(visitProposal: VisitProposal) {
    val ssoDomains = setOf("abc.com", "pw-sso.example.com") // 替换为实际SSO域名
    val host = visitProposal.url.host ?: ""
    if (ssoDomains.contains(host)) {
        // 启动独立WebView页面加载SSO内容
        val intent = Intent(this, WebViewActivity::class.java).apply {
            putExtra("URL", visitProposal.url.toString())
        }
        startActivity(intent)
        visitProposal.cancel()
    } else {
        visitProposal.accept()
    }
}

需创建WebViewActivity承载外部页面,确保其Cookie存储与Turbo WebView一致。

2. 统一Cookie存储,保持会话一致性

SSO登录后的会话Cookie需要在Turbo WebView和外部页面WebView之间共享,才能让登录状态传递回Turbo应用:

  • iOS:所有WebView默认使用WKWebsiteDataStore.default(),自动共享Cookie。
  • Android:启动时开启Cookie同步:
CookieManager.getInstance().setAcceptCookie(true)
CookieManager.getInstance().setAcceptThirdPartyCookies(turboWebView, true)

3. 配置SSO回调URL为应用内跳转

将SSO服务的回调URL配置为应用的自定义URL Scheme或Universal Link(iOS)/App Link(Android),SSO登录完成后可直接跳转回Turbo应用,无需经过外部浏览器。跳转后恢复Turbo会话即可获取已登录状态。

4. 启用Turbo的WebView降级机制

对于不支持Turbo的外部页面,可配置Turbo在应用内自动降级为普通WebView加载,无需手动拦截。具体可参考Turbo Native官方文档,将SSO域名加入允许降级的配置列表。


内容的提问来源于stack exchange,提问作者samueletc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:05:20