# Guide d'intégration avancée du SDK iOS 7.0+

import { Badge } from '@astrojs/starlight/components';

Cette section fournit des informations sur l'intégration avancée du SDK iOS de Pushwoosh.

## Modes d'arrière-plan

<Aside type="caution" title="">
Par défaut, iOS ne permet pas aux applications de traiter les notifications push lorsqu'elles sont en arrière-plan. Cela inclut les notifications push silencieuses, qui sont utiles pour mettre à jour les données de l'application sans interaction de l'utilisateur.
</Aside>

Pour activer cette fonctionnalité, vous devez ajouter les Modes d'arrière-plan à votre projet.


#### Étapes pour activer les modes d'arrière-plan

1. Ouvrez votre projet dans **Xcode** et sélectionnez-le dans le **Navigateur de projet**.
2. Choisissez la cible de votre application dans le panneau de gauche.
3. Accédez à l'onglet **Signature et capacités**.
4. Cliquez sur le bouton **+ Capacité** dans le coin supérieur gauche.
5. Recherchez et sélectionnez **Modes d'arrière-plan** dans la liste.
6. Dans la section **Modes d'arrière-plan**, activez **Notifications à distance** en cochant la case.

Une fois terminé, votre application pourra gérer les notifications push, y compris les silencieuses, lorsqu'elle s'exécute en arrière-plan.

## Modes de premier plan

Par défaut, le SDK iOS de Pushwoosh affiche la bannière de notification lorsque l'application s'exécute au premier plan.

Vous pouvez contrôler ce comportement en définissant l'indicateur booléen suivant dans votre code (par exemple, dans votre `AppDelegate`) :

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    // Définissez sur false pour désactiver les notifications au premier plan, true pour les activer
    Pushwoosh.configure.showPushnotificationAlert = true
    ```

    <LinkCard
        title="Exemple (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/ViewController.swift#L30"
    />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  // Définissez sur 0 pour désactiver les notifications au premier plan, 1 pour les activer
  [[Pushwoosh configure] setShowPushnotificationAlert:0];
  ```

    <LinkCard
        title="Exemple (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/ViewController.m#L35"
    />

  </TabItem>
</Tabs>

## Niveau de journalisation

Le SDK iOS de Pushwoosh prend en charge les niveaux de journalisation suivants :

- `NONE` - Aucun journal du SDK.
- `ERROR` - Affiche uniquement les messages d'erreur dans la console.
- `WARNING` - Affiche les avertissements en plus des erreurs.
- `INFO` - Inclut les messages d'information (paramètre par défaut).
- `DEBUG` - Inclut des informations de débogage détaillées.

Par défaut, le niveau de journalisation est défini sur INFO, garantissant que le SDK fournit des informations pertinentes sans encombrer la console du développeur.

Pour modifier le niveau de journalisation, mettez à jour la clé `Pushwoosh_LOG_LEVEL` dans le fichier `Info.plist` de votre application :

```xml
<key>Pushwoosh_LOG_LEVEL</key>
<string>YOUR_LOG_LEVEL</string>
```

Alternativement, vous pouvez changer le niveau de journalisation en utilisant l'extrait de code ci-dessous :

```swift
Pushwoosh.Debug.setLogLevel(.PW_LL_DEBUG)
```

Remplacez `YOUR_LOG_LEVEL` par le niveau souhaité (par exemple, `DEBUG` ou `ERROR`).

## `UNNotificationCenterDelegate` personnalisé

Si vous souhaitez utiliser votre propre `UNNotificationCenterDelegate` (par exemple, pour les notifications locales), vous devez en informer le SDK Pushwoosh pour un comportement correct. Vous pouvez le faire avec la méthode `addNotificationCenterDelegate` :

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    Pushwoosh.configure.addNotificationCenterDelegate(my_delegate)
    ```

    <LinkCard
        title="Exemple (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift#L23"
    />

    </TabItem>

    <TabItem label="Objective-C">
    ```objective-c
    [Pushwoosh.configure addNotificationCenterDelegate:my_delegate];
    ```

    <LinkCard
        title="Exemple (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m#L28"
    />

    </TabItem>
</Tabs>

Ensuite, implémentez les méthodes `UNNotificationCenterDelegate` dans votre délégué :

<Tabs syncKey="code-example">
  <TabItem label="Swift">

  ```swift
  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      willPresent notification: UNNotification,
      withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(notification.request.content.userInfo)) {
          // Gérez votre notification
          completionHandler(UNNotificationPresentationOptions.alert)
      }
  }

  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      didReceive response: UNNotificationResponse,
      withCompletionHandler completionHandler: @escaping () -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(response.notification.request.content.userInfo)) {
          // Gérez votre notification
          completionHandler()
      }
  }
  ```

  <LinkCard title="Exemple (Swift)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift" />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  - (void)userNotificationCenter:(UNNotificationCenter *)center
          willPresentNotification:(UNNotification *)notification
          withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
      if (![PWMessage isPushwooshMessage:notification.request.content.userInfo]) {
          // Gérez votre message
          completionHandler(UNNotificationPresentationOptionAlert);
      }
  }

  - (void)userNotificationCenter:(UNNotificationCenter *)center
          didReceiveNotificationResponse:(UNNotificationResponse *)response
          withCompletionHandler:(void (^)(void))completionHandler {
      if (![PWMessage.isPushwooshMessage:response.notification.request.content.userInfo]) {
          // Gérez votre message
          completionHandler();
      }
  }
  ```

  <LinkCard title="Exemple (Objective-C)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m" />

  </TabItem>
</Tabs>

## Initialisation différée de Pushwoosh

L'indicateur ```Pushwoosh_LAZY_INITIALIZATION``` empêche l'initialisation automatique du SDK Pushwoosh au démarrage de l'application. Cela permet un meilleur contrôle sur le moment où les services du SDK Pushwoosh sont démarrés.

Lorsque cet indicateur est activé, le SDK Pushwoosh ne démarre pas ses services tant que les méthodes du SDK iOS de Pushwoosh ne sont pas explicitement appelées.

Ajoutez l'entrée suivante à Info.plist :

```xml
<key>Pushwoosh_LAZY_INITIALIZATION</key>
<true/>
```

**Cas d'utilisation**
1. **Initialisation contrôlée du SDK** – L'indicateur Pushwoosh_LAZY_INITIALIZATION permet de retarder le démarrage du SDK Pushwoosh, offrant plus de contrôle sur le moment où les services push sont activés.

2. **Activation différée des notifications push** – Dans certaines applications, les notifications push ne doivent être initialisées que dans des conditions spécifiques. L'activation de cet indicateur garantit que le SDK Pushwoosh ne démarre que lorsqu'il est explicitement demandé.

3. **Configuration push spécifique à l'utilisateur** – Certaines applications peuvent nécessiter la personnalisation des paramètres de notification push en fonction des préférences de l'utilisateur ou des paramètres du compte. Avec l'initialisation différée, le SDK Pushwoosh ne démarre qu'une fois la configuration appropriée déterminée.
## Liste complète des propriétés Info.plist

| Propriété                                     | Description                                                                                                 | Valeurs possibles                                                                                |
|-----------------------------------------------|-------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| `Pushwoosh_APPID`                             | Définit l'ID d'application Pushwoosh pour la version de production.                                         | `XXXXX-XXXXX` <br /> **Type** : String                                                            |
| `Pushwoosh_APPID_Dev`                         | Définit l'ID d'application Pushwoosh pour la version de développement.                                      | `XXXXX-XXXXX` <br /> **Type** : String                                                            |
| `Pushwoosh_SHOW_ALERT`                        | Affiche l'alerte de notification au premier plan.                                                           | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_ALERT_TYPE`                        | Définit le style d'alerte de notification.                                                                  | `BANNER` *(par défaut)* / `ALERT` / `NONE` <br /> **Type** : String                               |
| `Pushwoosh_BASEURL`                           | Remplace l'URL de base du serveur Pushwoosh.                                                                | [`https://cp.pushwoosh.com/json/1.3/`](https://cp.pushwoosh.com/json/1.3/) *(par défaut)* <br /> **Type** : String |
| `Pushwoosh_AUTO_ACCEPT_DEEP_LINK_FOR_SILENT_PUSH` | Si `YES`, les liens profonds reçus dans les notifications push silencieuses seront traités automatiquement. | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_ALLOW_SERVER_COMMUNICATION`        | Permet au SDK d'envoyer des requêtes réseau aux serveurs Pushwoosh.                                         | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_DATA`      | Permet au SDK de collecter et d'envoyer les données de l'appareil (version de l'OS, locale et modèle) au serveur. | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_OS_VERSION` | Permet au SDK de collecter et d'envoyer la version de l'OS de l'appareil au serveur.                        | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_LOCALE`    | Permet au SDK de collecter et d'envoyer la locale de l'appareil au serveur.                                 | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_MODEL`     | Permet au SDK de collecter et d'envoyer le modèle de l'appareil au serveur.                                 | `YES` *(par défaut)* / `NO` <br /> **Type** : Boolean                                             |
| `Pushwoosh_LOG_LEVEL`                         | Niveau de journalisation du SDK Pushwoosh. Pour plus de détails, consultez [Contrôle du niveau de journalisation](#log-level). | `NONE` / `ERROR` / `WARNING` / `INFO` *(par défaut)* / `DEBUG` / `VERBOSE` <br /> **Type** : String |
| `Pushwoosh_PURCHASE_TRACKING_ENABLED`         | Permet au SDK de suivre les achats in-app. Nécessaire pour le Customer Journey Builder.                     | `YES` / `NO` *(par défaut)* <br /> **Type** : Boolean                                             |