# Android

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 Android:

### **Passo 1: Usando CustomTabs para integração** <a href="#passo-1-usando-customtabs" id="passo-1-usando-customtabs"></a>

1 - Insira no `app/build.gradle` a dependência necessária para o uso de CustomTabs:

```
implementation("androidx.browser:browser:1.5.0")
```

### **Passo 2: Abrindo uma CustomTab** <a href="#passo-2-abrindo-customtabs" id="passo-2-abrindo-customtabs"></a>

```java
import android.net.Uri
import androidx.activity.ComponentActivity
import androidx.browser.customtabs.CustomTabsClient
import androidx.browser.customtabs.CustomTabsIntent

class CustomTabActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)

       openCustomTab(<URL_CBU>)
    }

    fun openCustomTab(url: String) {
        val builder = CustomTabsIntent.Builder()
        val customTabsIntent = builder.build()
        customTabsIntent.launchUrl(this, Uri.parse(url))
    }
}
```

### **Passo 3: Modificando AndroidManifest** <a href="#passo-3-modificando-androidmanifest" id="passo-3-modificando-androidmanifest"></a>

Coloque no *AndroidManifest.xml* as permissões e intents necessários na **Activity** que deseja receber a *callback\_uri.*\
É necessário incluir o atributo `android:launchMode="singleTop"` como também a *tag* **`<data>`** informando os dados da **URI**.

```java
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-permission android:name="android.permission.CAMERA"/> 
// necessário ter as permissões de câmera e geolocalização 

<activity
    android:name=".CustomTabActivity"
    android:exported="true"
    android:label="@string/app_name"
    android:theme="@style/Theme.Customtabs"
    android:launchMode="singleTop">

    <intent-filter android:label="Custom Tab">
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- scheme e host são os dados fornecidos na criação de um processo no campo callback_uri
        callback_uri: "foobar://success?code=1234" -->
        <data android:scheme="foobar" android:host="success"/>
    </intent-filter>

</activity>
```

As seguintes permissões são necessárias para funcionar corretamente:

* Câmera;
* Geolocalização.

### **Passo 4: Pegando informações de retorno** <a href="#passo-4-pegando-informacoes-de-retorno" id="passo-4-pegando-informacoes-de-retorno"></a>

Para pegar as informações de redirect com os dados fornecidos, você pode usar o seguinte código no método `onNewIntent` da sua **Activity**:

```java
override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)

    val url = intent.data
    val scheme = url.scheme // "foobar"
    val host = url.host // "success"
    val code = url.getQueryParameter("code") // "1234"
}
```

{% hint style="success" %}

#### Também é possível utilizar o link gerado pelo by Unico em frameworks híbridos. Para isso, você pode criar uma bridge entre o framework utilizado com o nativo e seguir como sugerimos na documentação ou utilizar de alguma biblioteca que disponibilize essas opções de integração.

{% endhint %}

{% hint style="warning" %}
A integração da WebView na sua aplicação é de total responsabilidade do cliente, uma vez que esta funcionalidade não é oferecida como parte das bibliotecas ou SDKs da Unico. Por conta disso, não oferecemos suporte técnico para dúvidas ou problemas relacionados à implementação da WebView em seu aplicativo. Para obter orientações sobre a configuração, recomendamos consultar a documentação oficial da tecnologia utilizada em seu projeto (por exemplo, React Native, Flutter, etc).
{% endhint %}
