npm package: @fitcal/sdk-react-native
Description: SDK para integração com Monety - Analytics, Feature Flags, Paywalls e Campaigns
Author: Monety
Latest version: 1.8.1

# @monety/sdk-react-native

SDK oficial para integração com Monety em aplicações React Native. Oferece Analytics, Feature Flags, Paywalls dinâmicas e gerenciamento de In-App Purchases.

## Instalação

```bash
npm install @monety/sdk-react-native
```

### Peer Dependencies

O SDK requer as seguintes dependências instaladas no seu projeto:

```bash
npm install @react-native-async-storage/async-storage @react-native-community/netinfo react-native-iap react-native-device-info
```

#### Persistência de Device ID (Recomendado)

Para melhor persistência do device ID entre reinstalações do app (especialmente no iOS), instale também:

```bash
npm install react-native-keychain
```

Esta dependência é opcional, mas **altamente recomendada**. Com ela:
- **iOS**: Device ID persiste no Keychain mesmo após desinstalar o app
- **Android**: Device ID é armazenado de forma segura no Keystore

Sem ela, o SDK usa AsyncStorage como fallback (funciona, mas não persiste após desinstalação).

Para iOS:
```bash
cd ios && pod install
```

## Quick Start

### 1. Configure o Provider

```tsx
import { PanelProvider } from '@monety/sdk-react-native';

export default function App() {
  return (
    <PanelProvider
      config={{
        appKey: 'sua_app_key',
        debug: __DEV__,
      }}
    >
      <YourApp />
    </PanelProvider>
  );
}
```

### 2. Use os Hooks

```tsx
import { usePanel, useSubscription } from '@monety/sdk-react-native';

function MyComponent() {
  const { presentPaywall, hasActiveSubscription } = usePanel();
  const { subscription } = useSubscription();

  const handlePurchase = async () => {
    const hasAccess = await hasActiveSubscription();
    if (!hasAccess) {
      await presentPaywall('default');
    }
  };

  return (
    <Button onPress={handlePurchase}>
      {subscription ? 'Premium' : 'Upgrade'}
    </Button>
  );
}
```

## API Principal

### PanelProvider

Provider que inicializa o SDK e disponibiliza o contexto para toda a aplicação.

```tsx
<PanelProvider config={PanelConfig}>
  {children}
</PanelProvider>
```

### usePanel()

Hook principal com acesso a todas as funcionalidades:

- `isInitialized` - Se o SDK foi inicializado
- `distinctId` - ID único do usuário
- `presentPaywall(placement)` - Apresenta uma paywall
- `hasActiveSubscription()` - Verifica se há assinatura ativa
- `getSubscription()` - Obtém dados da assinatura
- `restorePurchases()` - Restaura compras anteriores

### useSubscription()

Hook para gerenciamento de assinaturas:

- `subscription` - Dados da assinatura atual
- `isLoading` - Estado de carregamento
- `refresh()` - Atualiza dados da assinatura

### Panel (API Imperativa)

Para uso fora de componentes React:

```tsx
import { Panel } from '@monety/sdk-react-native';

// Identificar usuário
await Panel.identify('user_123', { email: 'user@example.com' });

// Rastrear evento
await Panel.track('purchase_completed', { product: 'premium' });

// Feature Flags
const variant = await Panel.getVariant('new_feature');
```

## Tipos

```tsx
interface PanelConfig {
  appKey: string;
  baseUrl?: string;
  debug?: boolean;
  environment?: 'Production' | 'Sandbox';
}

interface Subscription {
  productId: string;
  status: 'active' | 'expired' | 'cancelled' | 'in_grace_period';
  expiresAt: Date | null;
  platform: 'ios' | 'android';
  autoRenewEnabled: boolean;
}

interface PaywallResult {
  presented: boolean;
  purchased: boolean;
  restored: boolean;
  cancelled: boolean;
  error?: Error;
}
```

## Suporte

Para dúvidas ou problemas, entre em contato com o suporte Monety.

## Licença

MIT