Frontegg 是一个网络平台,SaaS 公司可以在其中设置他们完全托管、可扩展且具有品牌意识的 - SaaS 功能,并通过最多 5 行代码将它们整合到他们的 SaaS 门户中。
目录
项目要求
支持的语言
Swift: 现在所支持的最低 Swift 版本是 5.3。
支持的平台
支持从以下版本开始的主要平台版本:
- iOS > 14
开始使用
准备Frontegg工作区
导航到Frontegg 门户设置,如果没有应用,请根据注册后的集成步骤操作。将FronteggDomain复制到Frontegg 门户域的下一步中
设置托管登录
- 导航到登录方法设置
- 切换托管登录方法
- 添加
{{IOS_BUNDLE_IDENTIFIER}}://{{FRONTEGG_BASE_URL}}/ios/oauth/callback
- 将
IOS_BUNDLE_IDENTIFIER
替换为您的应用程序标识符 - 将
FRONTEGG_BASE_URL
替换为您的frontegg基本URL
将 frontegg 包添加到项目中
- 打开你的项目
- 选择 文件 -> 添加包
- 在搜索字段中输入
https://github.com/frontegg/frontegg-ios-swift
- 按下
添加包
建立 Frontegg plist 文件
为了配置你的 SwiftUI 应用程序以与 Frontegg 通信,你需要在你的根项目目录下创建一个名为 Frontegg.plist
的新文件,此文件将存储 Frontegg SDK 将使用到的值
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>baseUrl</key>
<string>https://[DOMAIN_HOST_FROM_PREVIOUS_STEP]</string>
<key>clientId</key>
<string>[CLIENT_ID_FROM_PREVIOUS_STEP]</string>
</dict>
</plist>
SwiftUI 集成
-
添加 Frontegg 包装器
-
要使用 Frontegg SDK,你必须使用 FronteggWrapper 包装你的应用程序场景
import SwiftUI import FronteggSwift @main struct demoApp: App { var body: some Scene { WindowGroup { FronteggWrapper { MyApp() } } } }
-
修改
MyApp.swift
文件,根据用户是否已认证来渲染内容- 在文件中添加
@EnvironmentObject var fronteggAuth: FronteggAuth
- 基于
fronteggAuth.isAuthenticated
渲染你的整个应用程序
struct MyApp: View { @EnvironmentObject var fronteggAuth: FronteggAuth var body: some View { ZStack { if fronteggAuth.isAuthenticated { [YOU APPLICATION TABS / ROUTER / VIEWS] } else { Button { fronteggAuth.login() } label: { Text("Login Button") } } } } }
- 在文件中添加
-
添加自定义加载屏幕
使用自己的
LoadingView
/SplashScreen
- 在独立文件中构建您的加载视图
- 将
LoadingView
作为 AnyView 传递给 FronteggWrapperFronteggWrapper(loaderView: AnyView(LoaderView())) { MyApp() }
-
UIKit 集成
-
添加 Frontegg UIKit 包装器
-
将 Frontegg 添加到 AppDelegate 文件中
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. FronteggApp.shared.didFinishLaunchingWithOptions() return true }
-
创建一个从 FronteggSwift 扩展 AbstractFronteggController 的 FronteggController 类
// // FronteggController.swift // import UIKit import FronteggSwift class FronteggController: AbstractFronteggController { override func navigateToAuthenticated(){ // This function will be called when the user is authenticated // to navigate your application to the authenticated screen let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let viewController = mainStoryboard.instantiateViewController(withIdentifier: "authenticatedScreen") self.view.window?.rootViewController = viewController self.view.window?.makeKeyAndVisible() } }
-
为 Frontegg 配置 SceneDelegate 以使用通用链接
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { if let url = URLContexts.first?.url, url.startAccessingSecurityScopedResource() { defer { url.stopAccessingSecurityScopedResource() } if url.absoluteString.hasPrefix( FronteggApp.shared.baseUrl ) { if(FronteggApp.shared.auth.handleOpenUrl(url)){ // Display your own Authentication View Controller // to handle after oauth callback window?.rootViewController = AuthenticationController() window?.makeKeyAndVisible() return } } } } func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { if let url = userActivity.webpageURL { if(FronteggApp.shared.auth.handleOpenUrl(url)){ // Display your own Authentication View Controller // to handle after oauth callback window?.rootViewController = AuthenticationController() window?.makeKeyAndVisible() return } } }
-
通过
FronteggApp.shared.auth
访问已验证的用户// // ExampleViewController.swift // import UIKit import SwiftUI import FronteggSwift import Combine class ExampleViewController: UIViewController { // Label to display logged in user's email @IBOutlet weak var label: UILabel! var showLoader: Boolean = true override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. // subscribe to isAuthenticated and navigate to login page // if the user is not authenticated let fronteggAuth = FronteggApp.shared.auth let sub = AnySubscriber<Bool, Never>( receiveSubscription: {query in query.request(.unlimited) }, receiveValue: { showLoader in self.showLoader = showLoader self.label.text = fronteggAuth.user?.email ?? "Unknown" if(!showLoader && !fronteggAuth.isAuthenticated){ // Display your own Authentication View Controller // to handle after oauth callback window?.rootViewController = AuthenticationController() window?.makeKeyAndVisible() return .none } return .unlimited }) FronteggApp.shared.auth.$showLoader.subscribe(sub) } @IBAction func logoutButton (){ FronteggApp.shared.auth.logout() } }
-
配置 iOS 关联域名
配置您的 iOS 关联域名对于魔法链接身份验证/重置密码/激活账户是必需的。
为了将您的iOS相关域名添加到您的Frontegg应用程序中,您需要更新每个集成的Frontegg环境中您希望与该环境一起使用的iOS相关域名。请向以下URL发送POST请求:https://api.frontegg.com/vendors/resources/associated-domains/v1/ios
,并附上以下负载
{
“appId”:[YOUR_ASSOCIATED_DOMAIN]
}
要使用我们的API,请按照以下指南生成供应商令牌。