# FAQ du SDK iOS

### FAQ sur l'intégration iOS

#### Q : Comment puis-je installer le SDK Pushwoosh dans mon projet iOS ?
Vous pouvez intégrer le SDK Pushwoosh en utilisant soit le Swift Package Manager, soit CocoaPods.

#### Q : Comment installer le SDK Pushwoosh avec le Swift Package Manager ?
Dans Xcode, naviguez jusqu'à la section **Package Dependencies** et ajoutez le package en utilisant l'URL suivante : `https://github.com/Pushwoosh/Pushwoosh-XCFramework`.

#### Q : Comment installer le SDK Pushwoosh avec CocoaPods ?
Ouvrez le `Podfile` de votre projet et ajoutez la ligne `pod 'PushwooshXCFramework'`. Ensuite, exécutez la commande `pod install` dans le terminal.

#### Q : Quelles capacités dois-je ajouter à mon projet pour activer les notifications Push ?
Dans la section Signing & Capabilities des paramètres de votre projet, vous devez ajouter les capacités `Push Notifications` et `Background Modes`. Lors de l'ajout de `Background Modes`, assurez-vous de cocher la case `Remote notifications`.

#### Q : Quelle capacité supplémentaire est requise pour les notifications urgentes (Time Sensitive Notifications) ?
Si vous avez l'intention d'utiliser les notifications urgentes (Time Sensitive Notifications) (iOS 15+), vous devez également ajouter la capacité `Time Sensitive Notifications`.

#### Q : Où dois-je ajouter le code d'initialisation de Pushwoosh ?
Le code d'initialisation doit être ajouté à votre classe `AppDelegate`.

#### Q : Quel code d'initialisation dois-je ajouter dans l'AppDelegate de SwiftUI ?
Veuillez vous référer à [l'exemple de code Swift fourni pour l'intégration de Pushwoosh dans un projet SwiftUI](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate).

#### Q : Quel code d'initialisation dois-je ajouter dans un AppDelegate Swift standard ?
Veuillez vous référer à [l'exemple de code Swift fourni pour l'intégration de Pushwoosh dans un projet Swift standard](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate).

#### Q : Quel code d'initialisation dois-je ajouter dans un AppDelegate Objective-C ?
Veuillez vous référer à [l'exemple de code Objective-C fourni pour l'intégration de Pushwoosh dans un projet Objective-C](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate).

#### Q : Quelles clés dois-je ajouter à mon fichier Info.plist ?
Vous devez ajouter la clé `Pushwoosh_APPID` définie sur votre code d'application (Application Code) et la clé `PW_API_TOKEN` définie sur votre jeton d'API (API Token) dans le fichier `Info.plist` de votre application.

#### Q : Quel est le but du suivi de la livraison des messages ?
Pushwoosh prend en charge le suivi des événements de livraison pour les notifications push à l'aide de l'extension de service de notification (Notification Service Extension).

#### Q : Comment ajouter une extension de service de notification à mon projet ?
Dans Xcode, allez dans **File** > **New** > **Target...**, choisissez **Notification Service Extension**, et appuyez sur **Next**. Entrez un nom de cible et appuyez sur **Finish**. Lorsqu'on vous demande de l'activer, appuyez sur **Cancel**.

#### Q : Comment ajouter le SDK Pushwoosh à l'extension de service de notification ?
Ajoutez [l'extrait de code Swift ou Objective-C fourni](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#add-pushwoosh-sdk-to-notification-service-extension) au fichier principal `.swift` ou `.m` de votre extension de service de notification. Ce code utilise `PWNotificationExtensionManager` pour gérer la demande de notification.

#### Q : Quel est le but des groupes d'applications (App Groups) ?
La capacité App Groups est requise pour permettre à l'extension de service de notification de communiquer avec l'application principale.

#### Q : Comment activer les groupes d'applications pour ma cible principale et mon extension de service de notification ?
Pour les deux cibles, allez dans **Signing & Capabilities**, ajoutez la capacité **App Groups**, et créez un nouveau groupe en appuyant sur le bouton +. Assurez-vous que le nom du groupe commence par `group.` et utilisez le même nom de groupe pour les deux cibles.

#### Q : Quelles clés dois-je ajouter au fichier Info.plist de ma cible principale pour les groupes d'applications ?
Dans le fichier `Info.plist` de votre cible principale, ajoutez la clé `PW_APP_GROUPS_NAME` et définissez sa valeur sur le nom de votre groupe d'applications.

#### Q : Quelles clés dois-je ajouter au fichier Info.plist de mon extension de service de notification ?
Dans le fichier `Info.plist` de votre extension de service de notification, ajoutez la clé `PW_APP_GROUPS_NAME` (définie sur le nom de votre groupe d'applications) et la clé `Pushwoosh_APPID` (définie sur votre code d'application).

#### Q : Comment vérifier l'intégration de Pushwoosh ?
Après avoir compilé et exécuté votre projet, allez dans le panneau de contrôle de Pushwoosh (Pushwoosh Control Panel) et envoyez une notification push à votre application. Vous devriez voir la notification apparaître sur votre appareil.

#### Q : Quels sont les deux principaux rappels (callbacks) pour gérer les notifications push dans le SDK Pushwoosh ?
Les deux principaux rappels sont `onMessageReceived` et `onMessageOpened`.

#### Q : Quand le rappel `onMessageReceived` est-il invoqué ?
La méthode `onMessageReceived` est appelée lorsqu'une notification push est reçue par l'application.

#### Q : Quand le rappel `onMessageOpened` est-il invoqué ?
La méthode `onMessageOpened` est appelée lorsque l'utilisateur interagit avec une notification push et l'ouvre.

#### Q : Comment puis-je accéder à la charge utile (payload) d'une notification push reçue ou ouverte ?
La charge utile d'un objet `PWMessage` (passé aux rappels `onMessageReceived` et `onMessageOpened`) est accessible via sa propriété `payload`.

#### Q : Comment puis-je définir un identifiant utilisateur (User ID) dans Pushwoosh ?
Utilisez la méthode `setUserId(_:)` de l'objet `Pushwoosh.sharedInstance()`, en passant l'ID de l'utilisateur en argument.

#### Q : Comment puis-je définir l'adresse e-mail d'un utilisateur dans Pushwoosh ?
Utilisez la méthode `setEmail(_:)` de l'objet `Pushwoosh.sharedInstance()`, en fournissant l'e-mail de l'utilisateur.

#### Comment puis-je définir des informations utilisateur supplémentaires en tant que balises (Tags) dans Pushwoosh ?
Utilisez la méthode `setTags(_:)` de l'objet `Pushwoosh.sharedInstance()`, en passant un dictionnaire où les clés sont les noms des balises et les valeurs sont les valeurs correspondantes des balises.

#### Comment puis-je suivre un événement utilisateur avec des attributs supplémentaires ?**
Utilisez la méthode `postEvent(_:withAttributes:)` de `PWInAppManager.shared()`, en fournissant le nom de l'événement (par ex., `"login"`) et un dictionnaire d'attributs (par ex., `"name"`, `"last_login"`).

#### Q : Comment puis-je suivre un événement d'achat d'un utilisateur avec les détails du produit ?
Utilisez la méthode `postEvent(_:withAttributes:)` de `PWInAppManager.shared()` avec le nom d'événement `"purchase"` et un dictionnaire contenant les détails du produit comme `"product_id"`, `"product_name"`, `"price"`, et `"quantity"`.

#### Q : Comment configurer un délégué pour gérer la présentation de médias enrichis (rich media) ?
Dans votre contrôleur de vue ou une autre classe appropriée, conformez-vous au protocole `PWRichMediaPresentingDelegate` et définissez la propriété `delegate` de `PWRichMediaManager.shared()` sur votre instance conforme.

#### Q : Comment puis-je configurer le style de présentation des médias enrichis ?
Utilisez l'objet `PWModalWindowConfiguration.shared()` pour configurer des propriétés telles que la position de la fenêtre modale et les animations de présentation/disparition à l'aide de la méthode `configureModalWindow(with:present:dismiss:)`.

#### Q : À quelles informations puis-je accéder dans les méthodes du délégué de médias enrichis ?**
Les méthodes du délégué donnent accès à l'objet `PWRichMedia`, qui contient des informations sur le contenu du média enrichi, y compris son `pushPayload`. La méthode `presentingDidFailForRichMedia:withError:` fournit également un objet `Error` décrivant l'échec.

### Dépannage

<Aside type="caution">
Pour des raisons d'équilibrage de charge, nous pourrions avoir besoin de modifier les points de terminaison de l'API dans votre application. Cela se produit automatiquement et est géré par notre SDK. **Veuillez vous assurer que rien dans votre application ne bloque l'accès à une URL contenant \*.pushwoosh.com.**
</Aside>

<Aside type="note">
#### Si vous êtes derrière un pare-feu ou si votre routeur WiFi agit comme un pare-feu

Si votre appareil est connecté à Internet via WiFi et que les messages n'arrivent pas sur l'appareil, veuillez **vous assurer que les ports APNs ne sont pas bloqués par votre pare-feu.**\
Les fournisseurs de push, les appareils iOS et les ordinateurs Mac sont souvent derrière des pare-feu. Pour envoyer des notifications, vous devrez autoriser les paquets TCP entrants et sortants sur le port 2195. Les appareils et ordinateurs se connectant au service de push via **Wi-Fi devront autoriser les paquets TCP entrants et sortants sur le port 5223.**\
La plage d'adresses IP pour le service de push peut changer ; il est attendu que les fournisseurs se connectent par nom d'hôte plutôt que par adresse IP. Le service de push utilise un schéma d'équilibrage de charge qui donne une adresse IP différente pour le même nom d'hôte. Cependant, l'ensemble du bloc d'adresses 17.0.0.0/8 est attribué à Apple, vous pouvez donc spécifier cette plage dans vos règles de pare-feu.
</Aside>

#### Q : Erreur « Your provisioning profile does not have APS entry »

Si vous voyez le message d'erreur « Your provisioning profile does not have APS entry. », assurez-vous que votre profil de provisionnement est compatible avec les notifications push et qu'il contient la chaîne `aps-environment` avec la valeur `production` ou `development`. Le moyen le plus simple de vérifier est d'ouvrir le profil de provisionnement mobile dans n'importe quel éditeur de texte et de rechercher la chaîne `aps-environment`. Elle devrait s'y trouver.

Si c'est le cas et que vous continuez à recevoir l'erreur, cela signifie que XCode sélectionne toujours un profil « non compatible avec les notifications push ». Veuillez vous assurer que vous signez avec le bon - parfois, si vous avez deux profils pour le même App ID, XCode s'emmêle les pinceaux et signe avec l'ancien.

Les étapes recommandées sont :

1. [Supprimer](https://stackoverflow.com/questions/18923095/delete-provisioning-profile-from-xcode-5) tous les profils XCode ;
2. Ajouter le seul et unique nouveau profil ;
3. Recompiler l'application.

#### Q : À quoi ressemblent le jeton push iOS et le HWID ?

Les jetons push des appareils iOS sont des chaînes de 64 symboles hexadécimaux. Exemple de jeton push :\
`03df25c845d460bcdad7802d2vf6fc1dfde97283bf75cc993eb6dca835ea2e2f`\
Assurez-vous que les jetons push iOS que vous utilisez lorsque vous ciblez des appareils spécifiques dans vos requêtes API sont en **minuscules**.

Pushwoosh utilise l'IDFV comme HWID de l'appareil. Notez qu'il peut changer si l'utilisateur réinstalle toutes les applications d'un fournisseur spécifique.

`CBAF8ED1-17FB-49A3-73BD-DC79B63AEF93`

#### Q : Comment activer et désactiver la bannière lorsque mon application est en cours d'exécution ?

Par défaut, notre dernier SDK iOS affiche la bannière de notification lorsque l'application est exécutée au premier plan.\
Vous pouvez contrôler ce comportement en modifiant les indicateurs suivants dans le fichier Info.plist :

Indicateur `Pushwoosh_ALERT_TYPE` – type chaîne de caractères, les valeurs sont :

* `BANNER` – valeur par défaut, affiche une alerte de type bannière dans l'application
* `ALERT` – notification de type alerte
* `NONE` – ne pas afficher de notifications lorsque l'application est au premier plan

#### Q : Comment obtenir le jeton push de mon appareil iOS pour l'utiliser dans les appareils de test ?

Pour obtenir le jeton push de votre appareil iOS,

1. Ouvrez Xcode => Devices & Simulators ;
2. Connectez l'appareil de test à votre ordinateur ;
3. Sélectionnez votre appareil connecté dans la liste des appareils à gauche ;
4. Cliquez sur le bouton Open Console.

<img src="/ios-push-notifications-ios-faq-1.webp" alt=""/>

Lancez l'application pour laquelle vous avez besoin du jeton push de l'appareil, et localisez votre jeton push de 64 caractères hexadécimaux dans la ligne « Registered for push notifications » :

<img src="/ios-push-notifications-ios-faq-2.webp" alt=""/>

#### Q : Pourquoi les badges ne sont-ils pas effacés après que je désinstalle mon application et la réinstalle peu de temps après ?

C'est un comportement attendu - les badges sont gérés par iOS lui-même et leurs valeurs sont stockées dans les préférences de l'application, qui ne sont pas supprimées instantanément lorsque vous désinstallez votre application. Une valeur de badge y reste pendant un certain temps en cas de réinstallation immédiate, ce qui entraîne l'affichage des mêmes badges après la réinstallation d'une application.