首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带ASWebAuthenticationSession的电容插件:必须仅从主线程使用

带ASWebAuthenticationSession的电容插件:必须仅从主线程使用
EN

Stack Overflow用户
提问于 2022-07-26 08:12:17
回答 1查看 212关注 0票数 2

我试图消除xcode控制台中一个恼人的警告/错误。我已经实现了一个使用ASWebAuthenticationSession打开密钥披风的自定义插件,并且我在解决如何调用主线程窗口时遇到了问题。

这是代码:

代码语言:javascript
复制
@available(iOS 13.0, *)
@objc(KeycloakPlugin)
public class KeycloakPlugin: CAPPlugin, ObservableObject, ASWebAuthenticationPresentationContextProviding {
    var webAuthSession: ASWebAuthenticationSession?
    
    public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
        return self.bridge?.webView?.window ?? ASPresentationAnchor()
    }

当我打开用于身份验证的外部url时,这一行表示如下:

return self.bridge?.webView?.window ?? ASPresentationAnchor()

在这种情况下,我得到:

必须仅从主线程使用

UIView.window。

你知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 09:59:31

也许这会有帮助:

https://capacitorjs.com/docs/core-apis/ios

如果您将代码包装在DispatchQueue.main.async中,它应该会删除警告。它还与DispatchQueue.main.sync一起工作,具体取决于实现。

就像这样:

代码语言:javascript
复制
@objc(MyPlugin)
public class MyPlugin: CAPPlugin, ASWebAuthenticationPresentationContextProviding {
    
    @objc func myPluginMethod(_ call: CAPPluginCall) {
//        do something here
    }

    public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
        var view: ASPresentationAnchor?
        DispatchQueue.main.sync {
            view = self.bridge?.webView?.window
            // or use async and do something here, e.g. create an implementation instance and pass the view
        }
        return view ?? ASPresentationAnchor()
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73119842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档