# Guide d'intégration de base du SDK React Native

Cette section contient des informations sur la manière d'intégrer le SDK React Native de Pushwoosh dans votre application.

## Prérequis

Pour intégrer le SDK React Native de Pushwoosh dans votre application, vous aurez besoin des éléments suivants :

<Aside type="note" title="Exigences">
 - Un [compte Pushwoosh](https://sso.pushwoosh.com/login).
 - Un [projet Pushwoosh](/fr/product/first-steps/start-with-your-project/create-your-project) configuré dans votre compte.
 - **Pour l'intégration iOS :**
    - Une plateforme iOS configurée pour envoyer des notifications push. Nous vous recommandons d'utiliser la [configuration d'authentification basée sur un token](/fr/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) comme approche la plus simple.
    - Réglez la Gateway sur `Sandbox` pour envoyer des pushes à un simulateur.
 - **Pour l'intégration Android :**
    - Une [plateforme Android configurée](/fr/developer/first-steps/connect-messaging-services/android-configuration/android-firebase-configuration)
    - Le fichier `google-services.json` et le `package name` de votre projet Firebase.
    - Un projet Firebase connecté à votre application Android. Suivez le [guide de configuration de Firebase](https://firebase.google.com/docs/android/setup#manually_add_firebase) si nécessaire.
 - Votre `Pushwoosh Application Code` et votre [Pushwoosh Device API Token](/fr/developer/api-reference/api-access-token/#device-api-token) depuis le Control Panel de Pushwoosh pour votre application.
</Aside>

## Étapes d'intégration

### 1. Ajouter la dépendance du SDK React Native de Pushwoosh

Ajoutez la dépendance du SDK React Native de Pushwoosh à votre projet :

```bash
npm install pushwoosh-react-native-plugin --save
```

### 2. Initialisation du SDK React Native

Dans le composant racine de votre fichier `index.js` :
- Importez le `pushwoosh-react-native-plugin`.
- Initialisez le SDK Pushwoosh.
- Appelez `register()` dans votre logique d'initialisation pour vous enregistrer aux notifications push.

```javascript title="index.js"
import Pushwoosh from 'pushwoosh-react-native-plugin';

AppRegistry.registerComponent(appName, () => App);

Pushwoosh.init({
    "pw_appid" : "__YOUR_APP_ID__"
});

Pushwoosh.register();
```

Où :
- `__YOUR_APP_ID__` est le code d'application du Control Panel de Pushwoosh.


### 3. Configuration native pour iOS

#### 3.1 Capacités

Pour activer les notifications Push dans votre projet, vous devez ajouter certaines capacités.

Dans la section Signing & Capabilities, ajoutez les capacités suivantes :
- `Push Notifications`
- `Background Modes`. Après avoir ajouté cette capacité, cochez la case `Remote notifications`.

Si vous prévoyez d'utiliser les notifications urgentes (Time Sensitive Notifications) (iOS 15+), ajoutez également la capacité `Time Sensitive Notifications`.

#### 3.2 Info.plist

Dans votre `Runner/Info.plist`, définissez la clé `__PUSHWOOSH_DEVICE_API_TOKEN__` sur le [Pushwoosh Device API Token](/fr/developer/api-reference/api-access-token/#device-api-token) :
```swift title="info.plist"
<key>Pushwoosh_API_TOKEN</key>
<string>__PUSHWOOSH_DEVICE_API_TOKEN__</string>
```

#### 3.3 Suivi de la livraison des messages

Vous devez ajouter une cible d'extension de service de notification (Notification Service Extension) à votre projet. Ceci est essentiel pour un suivi précis de la livraison et pour des fonctionnalités comme les Rich Media sur iOS.

Suivez les [étapes du guide natif](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#4-message-delivery-tracking) pour ajouter la cible d'extension et le code Pushwoosh nécessaire à l'intérieur.

#### 3.4 Installation des dépendances pour le projet React Native iOS

Pour installer les dépendances du projet React Native iOS, naviguez vers le dossier ```ios``` dans le terminal et exécutez :

```bash
pod install --repo-update
```

### 4. Configuration native pour Android

#### 4.1 Installer les dépendances

Assurez-vous que les dépendances et les plugins requis sont ajoutés à vos scripts Gradle :

Ajoutez le plugin Gradle des services Google à vos dépendances `build.gradle` au niveau du projet :

```groovy title="android/build.gradle"
buildscript {
  dependencies {
    classpath 'com.google.gms:google-services:4.3.15'
  }
}
```

Appliquez le plugin dans votre fichier `build.gradle` au niveau de l'application :

```groovy title="app/build.gradle"
apply plugin: 'com.google.gms.google-services'
```

#### 4.2 Ajouter le fichier de configuration Firebase

Placez le fichier `google-services.json` dans le dossier `android/app` de votre projet.

#### 4.3 Ajouter les métadonnées Pushwoosh

Dans votre `main/AndroidManifest.xml`, ajoutez le [Pushwoosh Device API Token](/fr/developer/api-reference/api-access-token/#device-api-token) à l'intérieur de la balise `<application>` :

```xml title="AndroidManifest.xml"
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />
```

> **Important :** Assurez-vous de donner au token l'accès à la bonne application dans votre Control Panel Pushwoosh. [En savoir plus](/fr/developer/api-reference/api-access-token/#edit-token)

### 5. Exécuter le projet

1. Compilez et exécutez le projet.
2. Allez dans le Control Panel de Pushwoosh et [envoyez une notification push](/fr/product/messaging-channels/push-notifications/send-push-notifications/one-time-push).
3. Vous devriez voir la notification dans l'application.

## Intégration étendue

À ce stade, vous avez déjà intégré le SDK et pouvez envoyer et recevoir des notifications push. Explorons maintenant les fonctionnalités de base.

### Écouteurs d'événements de notification push

Dans le SDK Pushwoosh, il y a deux écouteurs d'événements, conçus pour gérer les notifications push :

- L'événement `pushReceived` est déclenché lorsqu'une notification push est reçue
- L'événement `pushOpened` est déclenché lorsqu'un utilisateur ouvre une notification

Vous devriez configurer ces écouteurs d'événements juste après l'initialisation du SDK au démarrage de l'application :

```javascript
import {DeviceEventEmitter} from 'react-native'
import Pushwoosh from 'pushwoosh-react-native-plugin';

class PushwooshNotificationHandler {
  setupPushListeners() {

    DeviceEventEmitter.addListener('pushReceived', (e) => {
      console.warn("Push received: " + JSON.stringify(e));
    });

    DeviceEventEmitter.addListener('pushOpened', (e) => {
      console.warn("Push accepted: " + JSON.stringify(e));
    });

  }
}
```

### Configuration de l'utilisateur

En vous concentrant sur le comportement et les préférences de chaque utilisateur, vous pouvez fournir un contenu personnalisé, ce qui augmente la satisfaction et la fidélité des utilisateurs.

```javascript
import Pushwoosh from 'pushwoosh-react-native-plugin';

class Registration {
  afterUserLogin(user: User) {

    // Set user ID
    Pushwoosh.setUserId(user.getId());

    // Set user email
    Pushwoosh.setEmails(user.getEmailList());

    // Set user SMS number
    Pushwoosh.registerSMSNumber(user.getPhoneNumber());

    // Set user WhatsApp number
    Pushwoosh.registerWhatsappNumber(user.getWhatsAppNumber());

    // Setting additional user information as tags for Pushwoosh
    Pushwoosh.setTags({
      "age": user.getAge(),
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }
}
```

### Tags

Les tags sont des paires clé-valeur attribuées aux utilisateurs ou aux appareils, permettant une segmentation basée sur des attributs tels que les préférences ou le comportement, ce qui permet des messages ciblés.

```javascript
import Pushwoosh from 'pushwoosh-react-native-plugin';

class UpdateUser {
  afterUserUpdateProfile(user: User) {

    // Set list of favorite categories
    Pushwoosh.setTags({
      "favorite_categories": user.getFavoriteCategoriesList()
    });

    // Set payment information
    Pushwoosh.setTags({
      "is_subscribed": user.isSubscribed(),
      "payment_status": user.getPaymentStatus(),
      "billing_address": user.getBillingAddress()
    });
  }
}
```

### Événements

Les événements sont des actions ou des occurrences spécifiques de l'utilisateur dans l'application qui peuvent être suivies pour analyser le comportement et déclencher des messages ou des actions correspondants.

```javascript
import Pushwoosh from 'pushwoosh-react-native-plugin';

class Registration {

  // Track login event
  afterUserLogin(user: User) {
    Pushwoosh.postEvent("login", {
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }

  // Track purchase event
  afterUserPurchase(product: Product) {
    Pushwoosh.postEvent("purchase", {
      "product_id": product.getId(),
      "product_name": product.getName(),
      "price": product.getPrice(),
      "quantity": product.getQuantity()
    });
  }
}
```

## Dépannage

Si vous rencontrez des problèmes pendant le processus d'intégration, veuillez vous référer à la section [support et communauté](/fr/developer/pushwoosh-sdk/support-and-community).