> ## Documentation Index
> Fetch the complete documentation index at: https://docs.airys.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Criação de Aplicativo Móvel Personalizado

> Guia para criar um aplicativo móvel AirysChat com marca personalizada, notificações push e deep linking

# Criação de aplicativo móvel personalizado

Guia para criar um aplicativo móvel AirysChat com marca personalizada, notificações push, deep linking e envio para a loja de aplicativos.

## Notificações push

O AirysChat suporta notificações push móveis através do Firebase Cloud Messaging (FCM). Existem dois caminhos de entrega, dependendo da sua configuração:

* **Servidor Relay (padrão)**: Instâncias self-hosted sem credenciais do Firebase roteiam as notificações através do servidor relay do AirysChat, que as encaminha para o **aplicativo móvel oficial do AirysChat**.
* **FCM Direto**: Instâncias com Firebase configurado enviam notificações diretamente para o seu **aplicativo móvel personalizado**.

<Note>
  Você deve usar os aplicativos oficiais para ambas as plataformas ou builds personalizados para ambas — não é suportado misturá-los. Para mais detalhes, consulte a [documentação de notificações push](https://www.airyschat.com/hc/handbook/articles/1687935909-push-notification).
</Note>

### Configurando o Firebase

Para enviar notificações push para seu aplicativo com marca personalizada, você precisa configurar o Firebase tanto no aplicativo móvel quanto no servidor AirysChat.

#### Passo 1: Criar um projeto Firebase

1. Acesse o [Firebase Console](https://console.firebase.google.com/) e crie um novo projeto (ou use um existente).
2. Registre seu aplicativo Android com o nome do seu pacote (ex., `com.suaempresa.app`).
3. Registre seu aplicativo iOS com o seu bundle identifier (ex., `com.suaempresa.app`).

#### Passo 2: Baixar arquivos de configuração do Firebase

Baixe os arquivos de configuração específicos da plataforma nas configurações do seu projeto Firebase:

<Tabs>
  <Tab title="Android">
    1. Em **Project Settings > General** (Configurações do Projeto > Geral), encontre seu aplicativo Android e clique em **Download google-services.json**.
    2. Coloque o arquivo na raiz do repositório do aplicativo móvel.
  </Tab>

  <Tab title="iOS">
    1. Em **Project Settings > General** (Configurações do Projeto > Geral), encontre seu aplicativo iOS e clique em **Download GoogleService-Info.plist**.
    2. Coloque o arquivo na raiz do repositório do aplicativo móvel.
  </Tab>
</Tabs>

#### Passo 3: Configurar variáveis de ambiente do aplicativo móvel

Atualize seu arquivo `.env` para apontar para os arquivos de configuração do Firebase:

```bash theme={null}
EXPO_PUBLIC_ANDROID_GOOGLE_SERVICES_FILE=./google-services.json
EXPO_PUBLIC_IOS_GOOGLE_SERVICES_FILE=./GoogleService-Info.plist
```

Em seguida, regere o código nativo para que a nova configuração seja detectada:

```bash theme={null}
pnpm generate
```

#### Passo 4: Gerar uma conta de serviço do Firebase

O servidor AirysChat precisa de uma conta de serviço para enviar notificações push via a API FCM v1.

1. No Firebase Console, vá para **Project Settings > Service accounts** (Configurações do Projeto > Contas de serviço).
2. Clique em **Generate new private key** (Gerar nova chave privada) para baixar um arquivo JSON de credenciais.

<Warning>
  Mantenha este arquivo seguro. Ele concede acesso para enviar notificações push em nome do seu projeto Firebase.
</Warning>

#### Passo 5: Configurar o servidor AirysChat

Na sua instalação do AirysChat, navegue até **Super Admin > App Config** e defina o seguinte:

| Chave de config        | Valor                                                   |
| ---------------------- | ------------------------------------------------------- |
| `FIREBASE_PROJECT_ID`  | Seu ID de projeto do Firebase (ex., `my-project-12345`) |
| `FIREBASE_CREDENTIALS` | O conteúdo completo do arquivo JSON da conta de serviço |

Quando ambos os valores estiverem definidos, o servidor enviará notificações push diretamente para o FCM em vez de usar o servidor relay.

#### Verificando a configuração

1. Crie e instale o aplicativo personalizado em um dispositivo (`pnpm run:ios` ou `pnpm run:android`).
2. Faça login na sua instância do AirysChat a partir do aplicativo móvel.
3. A partir de outra sessão de navegador, envie uma mensagem para uma conversa atribuída ao agente conectado.
4. O dispositivo deve receber uma notificação push.

<Note>
  Notificações push não funcionam em simuladores iOS. Você deve usar um dispositivo físico para testar.
</Note>

## Deep linking

O deep linking permite que os usuários toquem no URL de uma conversa do AirysChat (ou em uma notificação push) e sejam levados diretamente para essa conversa no aplicativo móvel. O aplicativo suporta dois mecanismos:

* **Custom URL scheme**: `airyschatapp://` — usado para callbacks de SSO e roteamento interno.
* **Universal Links (iOS) / App Links (Android)**: `https://<seu-dominio>/app/accounts/*/conversations/*` — usado para abrir URLs web diretamente no aplicativo.

### Como funciona

Quando o aplicativo recebe um deep link, o React Navigation o compara com o padrão de caminho configurado e navega até a tela da conversa:

```
https://<seu-dominio>/app/accounts/{accountId}/conversations/{conversationId}
```

Isso funciona em todos os estados do aplicativo — quer o aplicativo esteja em primeiro plano, em segundo plano ou tenha sido encerrado. Os toques em notificações push também usam esse mesmo fluxo para navegar até a conversa relevante.

### Configuração do aplicativo móvel

O aplicativo usa o suporte integrado do Expo para deep linking. Em `app.config.ts`, atualize o seguinte para corresponder ao seu domínio:

<Tabs>
  <Tab title="iOS">
    Atualize o [associated domain](https://docs.expo.dev/linking/ios-universal-links/) para a URL de instalação do seu AirysChat:

    ```typescript theme={null}
    ios: {
      associatedDomains: ['applinks:seu-dominio.com'],
    }
    ```

    O Expo prebuild grava isso no arquivo `.entitlements` automaticamente.
  </Tab>

  <Tab title="Android">
    Atualize o host do [intent filter](https://docs.expo.dev/linking/android-app-links/) para a URL de instalação do seu AirysChat:

    ```typescript theme={null}
    android: {
      intentFilters: [
        {
          action: 'VIEW',
          autoVerify: true,
          data: [
            {
              scheme: 'https',
              host: 'seu-dominio.com',
              pathPrefix: '/app/accounts/',
            },
          ],
          category: ['BROWSABLE', 'DEFAULT'],
        },
      ],
    }
    ```

    O Expo prebuild grava isso no `AndroidManifest.xml` automaticamente.
  </Tab>
</Tabs>

Após fazer as alterações, regere o código nativo:

```bash theme={null}
pnpm generate
```

### Configuração do servidor

O servidor AirysChat serve dinamicamente os arquivos de verificação que Android e iOS exigem para confirmar que seu aplicativo possui o domínio. Configure as seguintes variáveis de ambiente na sua instalação do AirysChat:

<Tabs>
  <Tab title="iOS">
    O servidor disponibiliza um arquivo `apple-app-site-association` em `https://<seu-dominio>/.well-known/apple-app-site-association`. Nenhuma configuração adicional é necessária, exceto garantir que a instalação do seu AirysChat esteja acessível no domínio especificado em `associatedDomains`.
  </Tab>

  <Tab title="Android">
    Defina as seguintes variáveis de ambiente com o nome do pacote do seu aplicativo e a impressão digital (fingerprint) do certificado de assinatura:

    ```bash theme={null}
    ANDROID_BUNDLE_ID=com.suaempresa.app
    ANDROID_SHA256_CERT_FINGERPRINT=SUA:IMPRESSAO:DIGITAL:CERT:SHA256
    ```

    Isso é disponibilizado em `https://<seu-dominio>/.well-known/assetlinks.json` e informa ao Android para abrir as URLs correspondentes no seu aplicativo.

    Para obter a impressão digital do seu certificado SHA-256, execute:

    ```bash theme={null}
    keytool -list -v -keystore seu-keystore.jks -alias seu-alias
    ```
  </Tab>
</Tabs>

## Build & Submissão usando EAS

Usamos o Expo Application Services (EAS) para criar, implantar e enviar o aplicativo para as lojas de aplicativos. EAS Build e Submit estão disponíveis para qualquer pessoa com uma conta Expo, independentemente de você pagar pelo EAS ou usar nosso plano Gratuito.

Você pode se inscrever no [Expo EAS](https://expo.dev/eas).

### Crie o aplicativo

#### Build iOS

```bash theme={null}
pnpm run build:ios:local
```

#### Build Android

```bash theme={null}
pnpm run build:android:local
```

### Envie o aplicativo

#### Submissão iOS

```bash theme={null}
pnpm submit:ios
```

#### Submissão Android

```bash theme={null}
pnpm submit:android
```

Ao executar o comando acima, será solicitado que você forneça um caminho para um arquivo binário local do aplicativo. Selecione o arquivo que você criou na etapa anterior:

* **iOS**: arquivo `.ipa`
* **Android**: arquivo `.aab`

<Note>
  Pode levar algum tempo para concluir o processo de envio. Você verá o status do envio no seu terminal.
</Note>
