Virtusize Auth SDK for iOS
描述
Virtusize Auth SDK for iOS是一个封闭源代码库,用于处理我们Virtusize iOS Integration的SNS身份验证过程。
要求
- iOS 12.0+
- Xcode 12+
- Swift 5.0+
入门指南
1. 安装
CocoaPods
使用CocoaPods依赖管理器安装。您可以使用以下命令进行安装
$ gem install cocoapods
要使用CocoaPods将Virtusize SDK集成到您的Xcode项目中,请在Podfile中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.3'
use_frameworks!
target '<your-target-name>' do
pod 'VirtusizeAuth', '~> 1.0.3'
end
然后,运行以下命令
$ pod repo update
$ pod install
Swift包管理器
- 在Xcode中,选择文件 > Swift Packages > 添加包依赖... 并将
https://github.com/virtusize/virtusize_auth_ios.git
作为仓库URL输入。 - 选择最小版本为
1.0.3
- 点击下一步
2. 为Virtuzize SNS Auth创建自定义URL Scheme
SNS身份验证流程需要切换到SFSafariViewController,以便加载一个网页供用户使用SNS帐户登录。为了将登录响应从SFSafariViewController返回到您的应用,必须定义一个自定义URL方案。
您必须注册一个URL类型,并将其发送到VirtusizeAuth.setAppBundleId
方法。
(1) 注册URL类型
在Xcode中,点击项目的信息标签并选择URL类型。
添加新的URL类型,并设置URL方案和标识符为com.your-company.your-app.virtusize
(2) 设置应用的bundle ID
在App Delegate的application(_:didFinishLaunchingWithOptions:)
方法中,使用应用的bundle ID调用VirtusizeAuth.setAppBundleId
方法。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Virtusize initialization omitted for brevity
// Set the app bundle ID
VirtusizeAuth.setAppBundleId("com.your-company.your-app")
return true
}
❗重要
- URL类型必须包含您的应用bundle ID并且以.virtusize结尾。
- 如果您有多个应用目标,请为它们添加URL类型。
为您的WebView应用启用Virtusize SNS登录
使用以下任一方法启用Virtusize SNS登录
方法1:使用VirtusizeWebView
将加载Virtusize的WKWebview
替换为VirtusizeWebView
为了在您的WebView中的Virtusize集成网页版本上启用Virtusize SNS登录,请使用此方法
-
如果您使用UIKit完全构建了UI,则在Swift文件中将您的
WKWebView
替换为VirtusizeWebView
。如果您使用WKWebViewConfiguration对象配置WebView,请像下面的示例一样从闭包中访问它。- Swift
- var webView: WKWebView + var webView: VirtusizeWebView
webView = VirtusizeWebView(frame: .zero) { configuration in // access the WKWebViewConfiguration object here to customize it // If you want to allow cookie sharing between multiple VirtusizeWebViews, // assign the same WKProcessPool object to configuration.processPool configuration.processPool = WKProcessPool() }
-
如果您使用Xcode的Interface Builder构建了UI,请确保在Identity检查器中将WebView的Custom Class设置为
VirtusizeWebView
。- Swift
- @IBOutlet weak var webview: WKWebView! + @IBOutlet weak var webview: VirtusizeWebView!
方法2:使用WKWebView
步骤1:在您的WKWebView中执行JavaScript代码以启用Virtusize中的SNS按钮
yourWebView.evaluateJavaScript("window.virtusizeSNSEnabled = true;")
步骤2:确保您的视图控制器确认了 WKUIDelegate
并实现了以下代码
class YourViewController: UIViewController {
private var yourWebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// ... other code
yourWebView.uiDelegate = self
}
}
extension YourViewController: WKUIDelegate {
func webView(
_ webView: WKWebView,
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures
) -> WKWebView? {
guard let url = navigationAction.request.url else {
return nil
}
if VirtusizeURLCheck.isExternalLinkFromVirtusize(url: url.absoluteString) {
UIApplication.shared.open(url, options: [:])
return nil
}
if VirtusizeAuth.isSNSAuthURL(viewController: self, webView: webView, url: url) {
return nil
}
if navigationAction.targetFrame == nil && VirtusizeURLCheck.isLinkFromSNSAuth(url: url.absoluteString) {
let popupWebView = WKWebView(frame: webView.frame, configuration: configuration)
popupWebView.uiDelegate = self
webView.addSubview(popupWebView)
popupWebView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
popupWebView.topAnchor.constraint(equalTo: webView.topAnchor),
popupWebView.leadingAnchor.constraint(equalTo: webView.leadingAnchor),
popupWebView.trailingAnchor.constraint(equalTo: webView.trailingAnchor),
popupWebView.bottomAnchor.constraint(equalTo: webView.bottomAnchor)
])
return popupWebView
}
// The rest of your code ...
return nil
}
func webViewDidClose(_ webView: WKWebView) {
webView.removeFromSuperview()
}
}