one[s]tap SDK
更多信息请见这里:OnestapSDK 参考文档
如何工作
OnestapSDK 在接收到 clientId
和 clientSecret
时会打开一个页面进行登录,就像 Facebook 和 Google 的身份验证一样。用户将登录到我们的环境,如果登录成功,用户将被重定向到应用,使用预先配置的 redirectUri
。
当应用打开时,SDK 将在 URI 中寻找有效的参数,然后发出请求以获取 accesToken
、refreshToken
和 userKey
。
有了这些信息,您将能够访问用户信息!
安装
Carthage
在您的 Cartfile 中放入以下内容
github "stone-payments/onestap-sdk-ios" ~> 1.2
然后运行以下命令
carthage update
Cocoapods
在您的 Podfile
中添加
target 'MyApplication' do
use_frameworks!
pod 'OnestapSDK', '~> 1.2'
end
手动安装
手动安装SDK需要下载文件 OnestapSDK.framework.zip 并将其放入 嵌入的二进制文件 中,如图所示
然后需要下载 脚本 remove_unused_archs.sh 并在 构建阶段 > 运行脚本
中添加以下命令:bash "${SRCROOT}/remove_unused_archs.sh"
(请记住,此脚本位于项目根目录下,如果您的 脚本 位于另一个文件夹,则需要指定该文件夹的路径)如图所示
或者,您可以直接复制 脚本 的内容并将其粘贴到 脚本 的“盒子”内。
可用性
配置
在您的项目中,点击 "信息系统" 选项卡并选择 URL 类型。在 identifier
字段中,名称必须是 OnestapSDK,而在 URL 方案 中,您应该放置为您的 Merchant URI 配置的方案,例如
如果注册的 Merchant URI 是 onestap://application
,则其 URL 方案应设置为 onestap;换句话说,在 ://
之前的内容是您的 URL 方案。
初始化
需要在应用启动时在 AppDelegate.swift
中初始化登录类,并将以下代码粘贴进去。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let configuration: OSTConfiguration = OSTConfiguration(environment: .sandbox,
clientId: "{SEU_CLIENT_ID}",
clientSecret: "{SEU_CLIENT_SECRET}",
scheme: "{SEU_SCHEME}", // ex: onestap
host: "{SEU_HOST}", // ex: ios -- a url final ficaria onestap://ios
primaryColor: UIColor(), // OPCIONAL cor primária para abrir no SafariViewController
secondaryColor: UIColor()) // // OPCIONAL cor sencundária para abrir no SafariViewController
_ = OST(configuration: configuration)
return true
}
要使用SDK的方法,只需按照以下方式调用它,因为它包含在 AppDelegate
中初始化的实例。
OST.shared
ViewController
登录将从这里开始。一些操作将激活登录页面;如果一切正常,网页将重定向回应用程序。
使用按钮登录
您可以通过两种方式加载和自定义按钮:一种是通过故事板,另一种是通过代码。
通过代码
在您的 ViewController 中导入 SDK
import OnestapSDK
class LoginViewController: UIViewController {
var ostAuthButton: OSTAuthButton!
override func viewDidLoad() {
super.viewDidLoad()
ostAuthButton = OSTAuthButton(frame: CGRect(x: 0, y: 0, width: 180, height: 40))
ostAuthButton.center = view.center
ostAuthButton.setTitle("Login!", for: .normal)
view.addSubview(ostAuthButton)
}
}
通过故事板
只需将一个普通按钮拖放到您的 Storyboard 中,然后在 Identity inspector 中选择按钮为 custom class OSTAuthButton
,其模块为 OnestapSDK
,如下所示。
按钮看起来会是这样
通过方法登录
打开手机浏览器
只需调用loadAuthPage
方法,它将打开用户登录的网页
let ostAuth = OSTAuth()
ostAuth.auth.loadAuthPage()
使用 SFSafariViewController
只需传入当前的UIViewCotroller
作为参数给loadAuthPage
方法,它将在SafariViewController
中打开网页,并使用在OSTConfiguration
中传入的颜色
let ostAuth = OSTAuth()
ostAuth.loadAuthPage(viewController: self)
页面将呈现为这样的效果
向临时配置文件传输数据
如果您希望将您已经在数据库中的注册数据传输过来,以简化注册流程并帮助用户顺畅过渡到我们的系统,您可以使用temporaryProfile
变量来填充用户的注册信息。
只需在初始化SDK之前将一个TemporaryProfile
类型的值分配给OSTConfiguration
类中的temporaryProfile
变量即可。
let tempProfile = TemporaryProfile()
var address = Address(street: "R. Dr. Satamini", number: "128", city: "Rio de Janeiro", state: "RJ")
address.country = "BR"
address.district = "Tijuca"
address.zipCode = "20270230"
tempProfile.addresses = []
tempProfile.addresses?.append(address)
let document = Document(documentType: .cpf, documentNumber: "57748217220")
tempProfile.documents = []
tempProfile.documents?.append(document)
var personalData = PersonalData()
personalData.country = "BR"
personalData.genderType = .masculine
tempProfile.personalData = personalData
let phone = Phone(phoneType: .mobile, fullNumber: "21986223524")
tempProfile.phones = []
tempProfile.phones?.append(phone)
var vehicle = Vehicle(licensePlate: "LNY-4266")
vehicle.licensePlateCity = "Rio de Janeiro"
vehicle.licensePlateCountry = "BR"
vehicle.licensePlateState = "RJ"
tempProfile.vehicles = []
tempProfile.vehicles?.append(vehicle)
let configuration: OSTConfiguration = OSTConfiguration(environment: .sandbox,
clientId: "{SEU_CLIENT_ID}",
clientSecret: "{SEU_CLIENT_SECRET}",
scheme: "{SEU_SCHEME}",
host: "{SEU_HOST}",
temporaryProfile: tempProfile)
_ = OST(configuration: configuration)
这样,在用户注册时,表单将自动填写之前输入的数据。
AppDelegate
登录成功后,带有一些登录信息的重定向将通过这里进行,但是只有在handleRedirect(fromUrl: URL)
方法正常工作后,我们才能恢复Token信息。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let ostAuth = OSTAuth()
ostAuth.handleRedirect(fromUrl: url) { result in
switch result {
case .success(let tokens):
print("Access Token: \(tokens.accessToken!)")
print("Refresh Token: \(tokens.refreshToken!)")
print("User Key: \(tokens.userKey!)")
// DO SOMETHING
case .failure(let error):
print(error)
// HANDLE ERRORS
}
}
return true
}
该方法如果成功,将返回一个包含token的对象,并将其记录到UserDefaults
中。如果您要使用accessToken
、refreshToken
和userKey
,请输入以下内容:
let accessToken: String? = UserDefaults.standard.accessToken
let userKey: String? = UserDefaults.standard.userKey
let refreshToken: String? = UserDefaults.standard.refreshToken
刷新令牌
如果令牌过期,只需实现以下操作
let ostAuth = OSTAuth()
ostAuth.revokeToken { result in
switch result {
case .success(let tokens):
// DO SOMETHING
case .failure(let error):
print(error)
// HANDLE ERROR
}
}
验证令牌
验证令牌是否仍然有效
let ostAuth = OSTAuth()
ostAuth.verifyToken { result in
switch result {
case .success(let tokens):
// DO SOMETHING
case .failure(let error):
print(error)
// HANDLE ERROR
}
}
吊销令牌
要吊销用户的令牌,只需调用方法 revokeToken
,如下例所示
let ostAuth = OSTAuth()
ostAuth.revokeToken { result in
switch result {
case .success(let genericResponse):
print(genericResponse.operationReport)
// DO SOMETHING
case .failure(let error):
print(error)
// DO SOMETHING
}
}
获取用户数据
要获取用户数据,请按照以下实现方法操作
let ostUser = OSTUser()
let toInclude: [OSTCategoriesEnum] = [.personalData, .emails, .phones, .documents, .addresses, .vehicles]
ostUser.getUser(categories: toInclude) { (result: Result<Account>) in
switch result {
case .success(let account):
// DO SOMETHING
case .failure(let error):
// HANDLE ERROR
}
}
注意:参数 including
是可选的。如果不发送任何内容,该方法将仅返回 publicProfile
。
贡献
欢迎提交代码请求!请参阅我们的 贡献指南
问题
有任何问题、疑问或建议?请点击创建问题!