# iOS

O campo **link** é usado para direcionar o usuário. Esse campo é recebido na resposta de sucesso da criação da transação.

Aqui você encontrará a melhor forma de gerenciar a experiência do usuário em sua aplicação iOS:

Para o cenário de uso em iOS, o uso da **ASWebAuthenticationSession** é uma das maneiras recomendadas.

Após criar a transação e obter o link da transação, a seguinte implementação é recomendada:

* Em seu fluxo comum (que está inserido o IDPay), você irá abrir a **ASWebAuthenticationSession** com o link gerado via API;
* Você poderá customizar essa abertura da maneira que for o ideal para seu aplicativo;
* Irá monitorar se houve alteração de URL (para a **redirectUrl**) e então feche a página;

Para fazer o fluxo funcionar é necessário seguir os seguintes passos:

## Passo 1: Criar o controlador de autenticação de pagamento <a href="#passo-1-criar-o-controlador-de-autenticacao-de-pagamento" id="passo-1-criar-o-controlador-de-autenticacao-de-pagamento"></a>

O primeiro passo que você deve realizar é criar o controlador de autenticação de pagamentos, para isso crie uma classe chamada `IDPayAuthenticationController` (ou como preferir chamar).

Na sequência, importe o framework `AuthenticationServices` no topo da classe.

Declare a classe como `NSObject` e implemente o protocolo `ASWebAuthenticationPresentationContextProviding`.

O resultado deve ser:

{% code overflow="wrap" %}

```swift
import AuthenticationServices

class IDPayAuthenticationController: NSObject, ASWebAuthenticationPresentationContextProviding {
    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
           if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
               if let mainWindow = windowScene.windows.first {
                   return mainWindow
               }
           }
           return ASPresentationAnchor()
       }
}
```

{% endcode %}

## Passo 2: Implementar a autenticação[​](https://developers.unico.io/docs/idPay/sdk-guides/languages/iOS/aswebauthenticationsession#passo-2-implementar-a-autentica%C3%A7%C3%A3o) <a href="#passo-2-implementar-a-autenticacao" id="passo-2-implementar-a-autenticacao"></a>

Abra o arquivo onde você irá realizar a autenticação e adicione as importações necessárias (em nosso exemplo estamos fazendo no `ContentView.swift`).

```swift
import SwiftUI
import AuthenticationServices
```

Para controlar o estado da autenticação criaremos uma propriedade `@State`.

```swift
@State private var isAuthenticated = false
```

Crie uma instância da classe `IDPayAuthenticationController` fora do corpo da estrutura `ContentView`.

```swift
let idPayController = IDPayAuthenticationController()
```

Para realizar a validação do pagamento crie uma função chamada authenticatePayment.

{% code overflow="wrap" %}

```swift
func authenticatePayment() {
    guard let url = URL(string: "URL_AUTHENTICATION") else { return }

    var session: ASWebAuthenticationSession?
    session = ASWebAuthenticationSession(url: url, callbackURLScheme: "BUNDLE") { callbackURL, error in
        guard callbackURL != nil else {
            if let error = error {
                return print("Erro durante a autenticação: \(error.localizedDescription)")
            }
            return
        }

        // Processa o URL de callback para verificar se a autenticação foi bem-sucedida
        session?.cancel()
        isAuthenticated = true
    }

    session?.presentationContextProvider = idPayController
    session?.prefersEphemeralWebBrowserSession = true
    session?.start()
}
```

{% endcode %}

{% hint style="danger" %}
Lembre-se de alterar a url `URL_AUTHENTICATION` para a URL de autenticação recebida em sua transação e também o **callbackURLScheme** `BUNDLE` para o **redirect** informado na criação de sua transação (recomendamos o uso do **Bundle Identifier** de seu aplicativo).
{% endhint %}

{% hint style="info" %}
É importante setar `prefersEphemeralWebBrowserSession` para `true` para garantir uma autenticação única por transação.
{% endhint %}

Exemplo de como deverá ficar no app:[​](https://developers.unico.io/docs/idPay/sdk-guides/languages/iOS/aswebauthenticationsession#exemplo-de-como-dever%C3%A1-ficar-no-app)

<figure><img src="https://3928390238-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fmbfp7FKwpg3cwSHRBJ6w%2Fuploads%2FNWYH0C1R4Oh5FyP0rik7%2Fw.gif?alt=media&#x26;token=52cf4838-3441-4e83-8293-7d3379c61018" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
É necessário algumas permissões para funcionar corretamente, tais como:

* Câmera;
* Geolocalização.
  {% endhint %}

Para saber mais sobre, recomendamos uma leitura nos seguintes artigos e documentações:

* Para acessar a documentação oficial, clique [<mark style="color:blue;">aqui</mark>](https://developer.apple.com/documentation/webkit/wkwebview).
