OnestapSDK 1.2.0

OnestapSDK 1.2.0

测试已测试
语言语言 SwiftSwift
许可证 Apache-2.0
发布最后发布2018年5月
SPM支持 SPM

Munir Wanis 维护。



  • Munir Wanis

one[s]tap SDK

Build Status codebeat badge GitHub license Github Version Carthage compatible CocoaPods Swift 4.0

更多信息请见这里:OnestapSDK 参考文档

如何工作

OnestapSDK 在接收到 clientIdclientSecret 时会打开一个页面进行登录,就像 Facebook 和 Google 的身份验证一样。用户将登录到我们的环境,如果登录成功,用户将被重定向到应用,使用预先配置的 redirectUri

当应用打开时,SDK 将在 URI 中寻找有效的参数,然后发出请求以获取 accesTokenrefreshTokenuserKey

有了这些信息,您将能够访问用户信息!

安装

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 并将其放入 嵌入的二进制文件 中,如图所示

Manual Installation

然后需要下载 脚本 remove_unused_archs.sh 并在 构建阶段 > 运行脚本 中添加以下命令:bash "${SRCROOT}/remove_unused_archs.sh"(请记住,此脚本位于项目根目录下,如果您的 脚本 位于另一个文件夹,则需要指定该文件夹的路径)如图所示

Run Script

或者,您可以直接复制 脚本 的内容并将其粘贴到 脚本 的“盒子”内。

⚠️这些步骤是手动运行 脚本 所必需的,因为这两个框架都包含所有的架构,但是苹果商店不允许发布包含模拟器架构的应用,因此这个 脚本 确保删除这些架构,以便发布过程可以顺利进行。⚠️

可用性

配置

在您的项目中,点击 "信息系统" 选项卡并选择 URL 类型。在 identifier 字段中,名称必须是 OnestapSDK,而在 URL 方案 中,您应该放置为您的 Merchant URI 配置的方案,例如

如果注册的 Merchant URI 是 onestap://application,则其 URL 方案应设置为 onestap;换句话说,在 :// 之前的内容是您的 URL 方案

Url Schema Creation

初始化

需要在应用启动时在 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,如下所示。

Login Button on Storyboard

按钮看起来会是这样

Login Button

通过方法登录

打开手机浏览器

只需调用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中。如果您要使用accessTokenrefreshTokenuserKey,请输入以下内容:

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

贡献

欢迎提交代码请求!请参阅我们的 贡献指南

问题

有任何问题、疑问或建议?请点击创建问题