Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Conectando na API

No navegador, fetch("/api/events") funciona porque a página está na mesma origem que o backend. No mobile, a situação é diferente. O aplicativo não roda num navegador — não existe “mesma origem”. A URL precisa ser absoluta.

E tem um detalhe: http://localhost:3000 não funciona no emulador Android. O localhost do emulador é o próprio emulador, não a sua máquina. O Android oferece o endereço especial 10.0.2.2 para acessar o localhost do host. No iOS Simulator, localhost funciona porque o simulador compartilha a rede com o macOS. E num celular físico, você precisa do IP da sua máquina na rede local.

Para não ficar alterando a URL manualmente, crie um arquivo de configuração. Crie src/config.ts:

Arquivo: mobile/src/config.ts
import { Platform } from "react-native";

function getBaseUrl(): string {
  if (Platform.OS === "android") {
    return "http://10.0.2.2:3000";
  }
  return "http://localhost:3000";
}

export const API_BASE_URL = getBaseUrl();

Código 8-1: URL base da API com tratamento por plataforma.

O Platform.OS retorna "android" ou "ios" dependendo de onde o app está rodando. Se estiver testando num celular físico, substitua o retorno pelo IP da sua máquina (ex: "http://192.168.1.42:3000").

Uma vantagem: como o React Native não roda no navegador, não existe CORS. A política de mesma origem é uma restrição do browser — aplicativos nativos fazem requisições HTTP para qualquer URL sem restrições.