Veja mais aqui: OnestapSDK Reference
A OnestapSDK funciona recebendo clientId
e clientSecret
para abrir uma página web para logar exatamente como na autenticação do Facebook e do Google. O usuário irá logar no nosso ambiente e, caso seja bem sucedido, o usuário será redirecionado para a aplicação usando a previamente configurada redirectUri
.
Quando a aplicação abre, a SDK irá procurar por parâmetros válidos na URI, para que então possa fazer requisições para recuperar o accesToken
, o refreshToken
e a userKey
.
Com essas informações você será capaz de acessar as informações do usuário!
Coloque isto no seu Cartfile:
github "stone-payments/onestap-sdk-ios" ~> 1.2
e então rode o seguinte comando:
carthage update
Acrescente ao seu Podfile
target 'MyApplication' do
use_frameworks!
pod 'OnestapSDK', '~> 1.2'
end
Para instalar manualmente a SDK é necessário baixar o arquivo OnestapSDK.framework.zip e colocar em Embedded Binaries como na imagem abaixo:
Depois é necessário baixar o script remove_unused_archs.sh e adicionar em Build Phases > Run Script
o seguinte comando: bash "${SRCROOT}/remove_unused_archs.sh"
(lembrando que neste caso o script está no root do projeto, se o seu script estiver em outra pasta é necessário informar o caminho desta pasta) como na imagem abaixo:
Ou se preferir, basta copiar o conteúdo do script e colar dentro da "caixa" de script.
No seu projeto, clique na aba "Info" e selecione Url Types. No campo identifier
, é obrigatório que o nome seja OnestapSDK, e na URL Schemes você deve colocar o esquema que foi configurado para seu Merchant URI, por exemplo:
Se a Merchant URI registrada é onestap://application
sua Url Schemes deve ser onestap; em outras palavras, tudo antes de ://
é sua Url Scheme.
É necessário inicializar a classe de login na abertura do app no AppDelegate.swift
, e colar o código abaixo.
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
}
Para usar os métodos da SDK basta chamar ela desta forma pois contém a instância iniciada no AppDelegate
:
OST.shared
O login terá início aqui. Alguma ação irá ativar a página de login; se tudo funcionar corretamente, a página web irá redirecionar de volta para a aplicação.
Você pode carregar o botão e customizá-lo de duas formas, uma pelo storyboard e outra no código.
No seu ViewController importe a 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)
}
}
Basta arrastar um botão comum para o seu Storyboard e clicar no Identity inspector dizendo que o botão é de uma custom class OSTAuthButton
com o módulo OnestapSDK
como na imagem abaixo:
O botão se parecerá com este:
Basta chamar o método loadAuthPage
que ele irá abrir a página web para o login do usuário:
let ostAuth = OSTAuth()
ostAuth.auth.loadAuthPage()
Basta chamar o método loadAuthPage
passando como argumento a sua UIViewCotroller
atual que ele irá abrir a página web no SafariViewController
com as cores passadas no OSTConfiguration
:
let ostAuth = OSTAuth()
ostAuth.loadAuthPage(viewController: self)
A página ficará desta maneira:
Se desejar transferir os dados de cadastro que já tem em sua base para facilitar o cadastro e a transição do usuário para o nosso sistema, você pode usar a variável temporaryProfile
para preencher os dados cadastrais do usuário.
Para utilizar basta atribuir um valor do tipo TemporaryProfile
a variável temporaryProfile
da classe OSTConfiguration
antes de inicializar a SDK:
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)
Com isso a tela de cadastro irá se abrir com os dados já preenchidos no ato do cadastro do usuário.
Após um login bem sucedido, o redirecionamento passará por aqui com alguma informação de login, porém apenas depois do método handleRedirect(fromUrl: URL)
funcionar sem problemas é que nós seremos capazes de recuperar o Token Data.
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
}
O método retornará, caso sucesso, um objeto de tokens e gravará os tokens no UserDefaults
.
Você deverá ser capaz de usar o accessToken
, refreshToken
e a userKey
se digitar o seguinte:
let accessToken: String? = UserDefaults.standard.accessToken
let userKey: String? = UserDefaults.standard.userKey
let refreshToken: String? = UserDefaults.standard.refreshToken
Se o token expirar, basta fazer a implementação que segue:
let ostAuth = OSTAuth()
ostAuth.revokeToken { result in
switch result {
case .success(let tokens):
// DO SOMETHING
case .failure(let error):
print(error)
// HANDLE ERROR
}
}
Verifica se o token ainda é válido:
let ostAuth = OSTAuth()
ostAuth.verifyToken { result in
switch result {
case .success(let tokens):
// DO SOMETHING
case .failure(let error):
print(error)
// HANDLE ERROR
}
}
Para revogar o Token do usuário, basta chamar o método revokeToken
como no exemplo abaixo:
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
}
}
Para buscar os dados do usuário basta seguir com a seguinte implementação:
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
}
}
OBS: O parâmetro including
é opcional. Se não for enviado nada o método retornará apenas o publicProfile
.
Pull Requests serão muito bem-vindos! Leia o nosso Contributing
Algum problema, dúvida ou sugestão? Abra uma issue!