# Personnalisation du SDK iOS

## Intégration

* [Deep linking](#deep-linking)
* [Liens universels](#liens-universels)
* [Suivi des achats in-app](#suivi-des-achats-in-app)
* [Notifications push de Geozones](#notifications-push-de-geozones)
* [Création d'une file d'attente Rich Media](#creation-dune-file-dattente-rich-media)
* [Lecture automatique d'une vidéo envoyée dans une Notification Riche avec force touch](#lecture-automatique-dune-video-envoyee-dans-une-notification-riche-avec-force-touch)
* [Son de push personnalisé](#son-de-push-personnalise)
* [Push provisoire iOS](#push-provisoire-ios)


### Deep linking

Dans votre fichier **Info.plist**, ajoutez le tableau `URL types` avec un `URL Identifier` et un `URL Scheme`.\
Dans l'exemple ci-dessous, le `URL Scheme` est _com.pushwoosh_ et l'`URL Identifier` est _promotion_.

<img src="/ios-push-notifications-customizing-ios-sdk-3.webp" alt=""/>

Dans votre fichier App Delegate (généralement AppDelegate.m pour iOS 12 et versions antérieures, ou SceneDelegate.m pour iOS 13 et versions ultérieures), ajoutez la fonction déléguée openURL appropriée comme indiqué dans l'exemple ci-dessous. L'exemple vérifie la page correcte, analyse la valeur « id » de l'URL et ouvre PromoPageViewController en réponse.

```AppDelegate.swift```
<Tabs>
<TabItem label="Swift">
```swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
    let page = components?.host
    var promotionId: String?

    if page == "promotion" {
        return
    }

    let items = components?.queryItems ?? []

    for item in items {
        if item.name == "id" {
            promotionId = item.value
        }
    }

    //show PromoPageViewController
}
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
    NSString *page = components.host;
    NSString *promotionId = nil;

    //return if this is not a promotion deep link
    if(![page isEqualToString:@"promotion"])
        return NO;

    for(NSURLQueryItem *item in components.queryItems)
    {
        if([item.name isEqualToString:@"id"])
            promotionId = item.value;
    }

    PromoPageViewController *vc = [[PromoPageViewController alloc] init];
    vc.promotionId = promotionId
    [self presentViewController:vc animated:YES completion:nil];
}
```
</TabItem>
</Tabs>

```SceneDelegate.swift```
<Tabs>
<TabItem label="Swift">
```swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let urlContext = URLContexts.first else { return }
        
    let components = URLComponents(url: urlContext.url, resolvingAgainstBaseURL: false)
    let page = components?.host
    var promotionId: String?
        
    guard page == "promotion" else {
        return
    }
        
    let items = components?.queryItems ?? []
        
    for item in items {
        if item.name == "id" {
            promotionId = item.value
        }
    }
        
    //show PromoPageViewController
}
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
- (void)scene:(UIWindowScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
    UIOpenURLContext *urlContext = URLContexts.anyObject;
    if (!urlContext) {
        return;
    }

    NSURLComponents *components = [NSURLComponents componentsWithURL:urlContext.URL resolvingAgainstBaseURL:NO];
    NSString *page = components.host;
    NSString *promotionId = nil;

    if (![page isEqualToString:@"promotion"]) {
        return;
    }

    for (NSURLQueryItem *item in components.queryItems) {
        if ([item.name isEqualToString:@"id"]) {
            promotionId = item.value;
        }
    }

    //show PromoPageViewController
}
```

</TabItem>
</Tabs>

### Liens universels

Les Liens universels permettent aux utilisateurs d'ouvrir votre application directement lorsqu'ils appuient sur un lien vers votre site web. Contrairement aux schémas d'URL personnalisés, les Liens universels utilisent des URL `https://` standard et offrent une expérience utilisateur plus fluide.

<Aside type="note">
À partir de la **version 7.0.15 du SDK**, le SDK iOS de Pushwoosh achemine automatiquement les Liens universels des notifications push vers les gestionnaires de votre application au lieu de les ouvrir dans Safari.
</Aside>

#### Comment ça marche

Lorsqu'une notification push contient une URL `https://` (dans le paramètre "url" ou "l"), le SDK va :

1. Créer une `NSUserActivity` avec l'URL
2. Appeler le gestionnaire de Liens universels de votre application (`scene:continueUserActivity:` ou `application:continueUserActivity:restorationHandler:`)
3. Si votre application ne gère pas l'URL, elle s'ouvrira dans Safari en guise de solution de repli

#### Configuration

1. **Configurer les domaines associés dans Xcode**

Ajoutez la capacité Domaines associés à votre application et ajoutez votre domaine :

```
applinks:yourdomain.com
```

2. **Héberger le fichier Apple App Site Association**

Créez un fichier `apple-app-site-association` sur votre serveur web à l'adresse `https://yourdomain.com/.well-known/apple-app-site-association` :

```json
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAM_ID.com.your.bundleid",
        "paths": ["/path/*", "/promotion/*"]
      }
    ]
  }
}
```

Remplacez `TEAM_ID` par votre ID d'équipe de développeur Apple et `com.your.bundleid` par l'identifiant de bundle de votre application.

3. **Implémenter le gestionnaire de Liens universels**

```SceneDelegate.swift``` (iOS 13+)
<Tabs>
<TabItem label="Swift">
```swift
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL else {
        return
    }

    // Handle the Universal Link URL
    let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
    let path = components?.path

    if path?.starts(with: "/promotion") == true {
        // Navigate to promotion screen
        let promotionId = components?.queryItems?.first(where: { $0.name == "id" })?.value
        // Show promotion with promotionId
    }
}
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
    if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        return;
    }

    NSURL *url = userActivity.webpageURL;
    if (!url) {
        return;
    }

    // Handle the Universal Link URL
    NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
    NSString *path = components.path;

    if ([path hasPrefix:@"/promotion"]) {
        // Navigate to promotion screen
        NSString *promotionId = nil;
        for (NSURLQueryItem *item in components.queryItems) {
            if ([item.name isEqualToString:@"id"]) {
                promotionId = item.value;
                break;
            }
        }
        // Show promotion with promotionId
    }
}
```
</TabItem>
</Tabs>

```AppDelegate.swift``` (iOS 12 et versions antérieures, ou en guise de solution de repli)
<Tabs>
<TabItem label="Swift">
```swift
func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL else {
        return false
    }

    // Handle the Universal Link URL
    let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
    let path = components?.path

    if path?.starts(with: "/promotion") == true {
        // Navigate to promotion screen
        return true
    }

    return false
}
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
- (BOOL)application:(UIApplication *)application
        continueUserActivity:(NSUserActivity *)userActivity
          restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {

    if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        return NO;
    }

    NSURL *url = userActivity.webpageURL;
    if (!url) {
        return NO;
    }

    // Handle the Universal Link URL
    NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
    NSString *path = components.path;

    if ([path hasPrefix:@"/promotion"]) {
        // Navigate to promotion screen
        return YES;
    }

    return NO;
}
```
</TabItem>
</Tabs>

#### Envoi d'un push avec un Lien universel

Lors de la création d'une notification push, utilisez l'URL de votre site web dans le champ **Action** :

```
https://yourdomain.com/promotion?id=123
```

Le SDK acheminera automatiquement cette URL vers votre gestionnaire de Liens universels, vous permettant de naviguer l'utilisateur vers l'écran approprié dans votre application.

<Aside type="tip">
Les Liens universels offrent une meilleure expérience utilisateur que les schémas d'URL personnalisés car ils fonctionnent même si votre application n'est pas installée — l'utilisateur sera redirigé vers votre site web à la place.
</Aside>

### Suivi des achats in-app

Par défaut, le suivi des achats in-app est désactivé. Si vous souhaitez suivre les achats in-app lors de la configuration des [Customer Journeys](/fr/product/customer-journey/pushwoosh-journey-overview), définissez l'indicateur _Pushwoosh\_PURCHASE\_TRACKING\_ENABLED_ sur _true_ dans le fichier _info.plist_. Vous pouvez trouver une liste des indicateurs disponibles dans le [tableau](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/advanced-integration-guide/#complete-list-of-infoplist-properties).

Si vous souhaitez suivre les achats in-app manuellement, vous pouvez utiliser le code ci-dessous.

Dans la méthode déléguée `paymentQueue:updatedTransactions:`, appelez la méthode `sendSKPaymentTransactions` de `PushManager`

<Tabs>
<TabItem label="Swift">
```swift
 func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
     // In-Apps Tracking Pushwoosh code here
     Pushwoosh.sharedInstance().sendSKPaymentTransactions(transactions)
     // the rest of the code, consume transactions, etc
 }
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

  [[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions];

  //the rest of the code, consume transactions, etc
}
```
</TabItem>
</Tabs>

<img src="/ios-push-notifications-customizing-ios-sdk-4.webp" alt="InAppTrackingViewController.swift"/>

<LinkCard title="Exemple" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/In-Apps%20Tracking/InAppTrackingViewController.swift" />

### Notifications push de Geozones

Les notifications push de Geozones sont encapsulées dans un framework distinct **PushwooshGeozones**.

1. Ajoutez PushwooshGeozones.framework à votre projet

Pour ajouter PushwooshGeozones.framework à votre projet à l'aide d'un gestionnaire de dépendances, mettez les lignes suivantes
dans votre `podfile` ou `cartfile` :

<Tabs>
  <TabItem value="podfile" label="Podfile">

  ```plaintext
  pod 'PushwooshXCFramework/Geozones'
  ```

  </TabItem>
  
  <TabItem value="carfile" label="Carfile">

  ```plaintext
  github "Pushwoosh/pushwoosh-ios-sdk"
  ```

  </TabItem>
  
  <TabItem value="swiftpm" label="SwiftPM">
  
  Si vous voulez utiliser **PushwooshGeozones.xcframework**, entrez l'URL de paquet suivante :  
  [PushwooshGeozones-XCFramework](https://github.com/Pushwoosh/PushwooshGeozones-XCFramework)  

  </TabItem>
</Tabs>


Alternativement, vous pouvez simplement glisser-déposer le framework dans **Link Binaries With Libraries** dans les **Build Phases** de votre projet.


2. Ajoutez les clés suivantes à votre Info.plist :

- **NSLocationWhenInUseUsageDescription** – *(requis)* pour que l'application suive les Geozones uniquement lorsqu'elle est exécutée au premier plan.  
- **NSLocationAlwaysAndWhenInUseUsageDescription** – *(requis)* pour que l'application suive les Geozones **à la fois au premier plan et en arrière-plan** et pour afficher une boîte de dialogue de demande d'autorisation.  
- **NSLocationAlwaysUsageDescription** – *(optionnel)* pour que l'application suive les Geozones **à tout moment** ; doit être utilisé si votre application cible iOS 10 et les versions antérieures.  

```xml
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>for app to track Geozones in both conditions and to show a permission request dialog</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>for app to track Geozones only while running in the foreground</string>
```
![]() 

<LinkCard title="Exemple de Info.plist de Pushwoosh" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Info.plist" />

3. Importez le framework

<Tabs>
  <TabItem value="swift" label="Swift">

  ```swift
  import PushwooshGeozones
  ```

  </TabItem>
  
  <TabItem value="objective-c" label="Objective-C">

  ```objc
  #import <PushwooshGeozones/PWGeozonesManager.h>
  ```

  </TabItem>
</Tabs>

4. Démarrez le suivi des Geozones

<Tabs>
  <TabItem value="swift" label="Swift">

  ```swift
  PWGeozonesManager.shared()?.startLocationTracking()
  ```

  [Référence GitHub](https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Geozones%20Push%20Notification/GeozonesViewController.swift)

  </TabItem>
  
  <TabItem value="objective-c" label="Objective-C">

  ```objc
  [[PWGeozonesManager sharedManager] startLocationTracking];
  ```

  [Référence GitHub](https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Geozones%20Push%20Notification/PWGeozonesViewController.m)

  </TabItem>
</Tabs>

##### Exemple 
<Tabs>
  <TabItem value="swift" label="Exemple Swift">

  ```swift
  override func viewDidLoad() {
      super.viewDidLoad()

      // Start Geozones tracking when needed
      PWGeozonesManager.shared().startLocationTracking()
  }
  ```

  </TabItem>
  
  <TabItem value="objective-c" label="Exemple Objective-C">

  ```objc
  - (void)viewDidLoad {
      [super viewDidLoad];
      // Do any additional setup after loading the view.

      // Start Geozones tracking when needed
      [[PWGeozonesManager sharedManager] startLocationTracking];
  }
  ```

  </TabItem>
</Tabs>


### Création d'une file d'attente Rich Media

S'il y a plusieurs pages Rich Media à afficher simultanément (par exemple, des événements déclencheurs pour deux In-Apps ou plus ont lieu en même temps, ou une page Rich Media est déjà affichée au moment où un autre événement déclencheur se produit), vous pouvez configurer une file d'attente pour l'affichage des pages Rich Media. Pour créer une file d'attente, suivez les étapes décrites ci-dessous.

1. Créez une classe qui implémente PWRichMediaPresentingDelegate :

```objective-c
@interface ChainedRichMediaPresentingDelegate () <PWRichMediaPresentingDelegate>

@property (nonatomic) NSMutableArray *queue;

@property (nonatomic) BOOL inAppIsPresenting;

@end


@implementation ChainedRichMediaPresentingDelegate

- (instancetype)init {
    self = [super init];

    if (self) {
        _queue = [NSMutableArray new];
    }

    return self;
}

- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia {
    [_queue addObject:richMedia];
    return !_inAppIsPresenting;
}

- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia {
    _inAppIsPresenting = YES;
}

- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia {
    _inAppIsPresenting = NO;

    [_queue removeObject:richMedia];

    if (_queue.count) {
        [[PWRichMediaManager sharedManager] presentRichMedia:_queue.firstObject];
    }
}

- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error {
    [self richMediaManager:richMediaManager didCloseRichMedia:richMedia];
}

@end
```

2\. Définissez le délégué :

```objective-c
 [PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];
```

<Tabs>
<TabItem label="Swift (GitHub)">
<LinkCard title="Exemple" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/tree/main/customizing/customizing/Rich%20Media%20Queue" />
</TabItem>

<TabItem label="Objective-C (GitHub)">
<LinkCard title="Exemple" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/tree/main/customizing/customizingObjC/customizingObjC/Rich%20Media%20Queue" />
</TabItem>
</Tabs>

### Lecture automatique d'une vidéo envoyée dans une Notification Riche avec force touch

Pour qu'une vidéo envoyée en tant que [pièce jointe de Notification Riche](/fr/developer/pushwoosh-sdk/ios-sdk/ios-rich-notifications-integration/) se lise automatiquement lorsque la notification est développée sans aucune interaction de l'utilisateur, suivez les étapes ci-dessous :

1. Ajoutez l'Extension de contenu de notification à votre projet :

* Dans Xcode, sélectionnez Fichier > Nouveau > Cible.
* Choisissez Extension de contenu de notification.
* Attribuez-lui un nom et terminez la configuration.

<img src="/ios-push-notifications-customizing-ios-sdk-5.webp" alt="Extension de contenu de notification - Notification Push Riche iOS"/>

Si le message « Activer le schéma » s'affiche, choisissez Annuler.

<img
  src="/ios-push-notifications-customizing-ios-sdk-6.webp"
  alt="Activer le schéma de contenu de notification"
  style={{ display: "block", margin: "0 auto", maxWidth: "40%", height: "auto" }}
  width="400"
/>

2. Ajustez les propriétés et les méthodes dans l'Extension de contenu comme suit :

```
import UIKit
import UserNotifications
import UserNotificationsUI
import AVKit


class NotificationViewController: UIViewController, UNNotificationContentExtension {
    var playerController: AVPlayerViewController!
    @IBOutlet weak var playerBackgroundView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any required interface initialization here.
    }

    func didReceive(_ notification: UNNotification) {
        let attachment = notification.request.content.attachments.first

        playerController = AVPlayerViewController()
        // Set height programmatically
        // preferredContentSize.height = 250

        if let url = attachment?.url {
            setupVideoPlayer(url: url)
        } else {
            print("No valid URL...")
        }
    }

    private func setupVideoPlayer(url: URL) {
        guard let playerController = self.playerController else { return }
        let player = AVPlayer(url: url)
        playerController.player = player
        playerController.view.frame = self.playerBackgroundView.bounds
        playerBackgroundView.addSubview(playerController.view)
        addChild(playerController)
        playerController.didMove(toParent: self)
        player.play()
    }
```

3. Intégrez une UIView dans MainInterface.storyboard :

<img src="/ios-push-notifications-customizing-ios-sdk-7.webp" alt="UIView dans le MainInterface.storyboard"/>

4. Liez l'IBOutlet playerBackgroundView avec l'UIView que vous venez d'ajouter :

<img src="/ios-push-notifications-customizing-ios-sdk-8.webp" alt="Lier l'IBOutlet playerBackgroundView avec l'UIView"/>

5. Mettez à jour le fichier info.plist avec l'entrée suivante :

```
UNNotificationExtensionUserInteractionEnabled = true
```

<img src="/ios-push-notifications-customizing-ios-sdk-9.webp" alt="UNNotificationExtensionUserInteractionEnabled = true"/>

Pour joindre une vidéo à votre notification, saisissez l'URL d'une vidéo dans le champ Pièce jointe média du Panneau de configuration :

<img src="/ios-push-notifications-customizing-ios-sdk-10.webp" alt="URL de la vidéo dans le champ Pièce jointe média du Panneau de configuration de Pushwoosh"/>

Lors de l'envoi d'une notification via une requête API [/createMessage](/fr/developer/api-reference/messages-api#createmessage), incluez l'URL dans le paramètre « ios\_attachment » et assurez-vous que l'indicateur « mutable-content » est défini sur \`1\`.

<Aside type="note">
Pour tester la fonctionnalité de lecture automatique, vous pouvez utiliser l'exemple de vidéo suivant : [Exemple de vidéo Hello World](https://docs-assets.developer.apple.com/published/efa8e7a0a97cfab20bf0f4c307b9b121/Hello-World-overview.mp4).
</Aside>

<video src="/ios-push-notifications-customizing-ios-sdk-11.webm" title="Exemple de vidéo Hello World" autoplay loop muted playsinline />

### Son de push personnalisé

Pour jouer un son personnalisé lors de la réception d'une notification push, placez d'abord le fichier audio dans le dossier racine de votre projet.

<img
  src="/ios-push-notifications-customizing-ios-sdk-12.webp"
  alt=""
  style={{ display: "block", margin: "0 auto", maxWidth: "40%", height: "auto" }}
  width="400"
/>

Ensuite, spécifiez le nom du fichier son dans les paramètres de push – remplissez le champ Son des [paramètres spécifiques à iOS](/fr/product/messaging-channels/push-notifications/send-push-notifications/one-time-push#ios) de votre message ou spécifiez le nom du fichier comme valeur pour le paramètre « ios\_sound » de la [requête API createMessage](/fr/developer/api-reference/messages-api/).

Le fichier audio pour un son iOS personnalisé doit être dans l'un des formats suivants : **.aif**, **.caf**, **.wav**. **Assurez-vous de spécifier le format dans le nom du fichier ; sinon, il sera ignoré par le SDK iOS de Pushwoosh.**

<Aside type="tip">
Tenez compte des limitations de l'App Store sur la taille du bundle lorsque vous ajoutez le fichier son à votre bundle.
</Aside>


### Push provisoire iOS

<Aside>
Pris en charge sur iOS 12 et versions ultérieures.
</Aside>

#### Comment ça marche

Les notifications push provisoires apparaissent silencieusement dans le Centre de notifications de l'utilisateur mais pas sur l'écran de verrouillage. Ce type de push n'a pas besoin d'être autorisé explicitement par un utilisateur : vous pouvez commencer à les envoyer dès qu'un utilisateur installe et lance votre application.

Cependant, les utilisateurs peuvent toujours s'abonner à vos notifications push proéminentes : en ouvrant le Push provisoire, ils ont deux options pour choisir leur expérience – garder les pushs dans le Centre de notifications sans alertes ni sons ou vous autoriser à envoyer des pushs de manière proéminente afin qu'ils apparaissent sur l'écran de verrouillage.

Les Pushs provisoires sont conçus pour permettre aux utilisateurs de prendre des décisions éclairées sur leur souhait de recevoir des notifications de votre application. Comme la demande d'abonnement native de l'APN n'est montrée aux utilisateurs qu'une seule fois et que pour s'abonner plus tard, ils doivent se rendre dans les paramètres système de leur téléphone, certains utilisateurs pourraient ne pas s'abonner car ils ne sont pas conscients de la valeur qu'ils obtiennent avec vos pushs. Les Pushs provisoires donnent aux utilisateurs cette compréhension : ils peuvent voir quel contenu vous livrez dans les notifications push et décider s'ils ont besoin d'être informés de ce contenu de manière proéminente.

<Aside type="caution" title="Important">
Veuillez noter que les Pushs provisoires, lorsqu'ils sont mis en œuvre, remplacent l'invite native de l'APN, ce qui signifie que les utilisateurs ne peuvent pas s'abonner aux notifications proéminentes tant qu'ils n'ont pas ouvert leur Centre de notifications et choisi de recevoir les Pushs provisoires de manière proéminente.
</Aside>

#### Comment l'implémenter

1\. Intégrez le SDK iOS de Pushwoosh en suivant le [guide](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/quick-start/).

2\. Ajoutez la chaîne suivante à l'AppDelegate de votre projet avant d'appeler la méthode `registerForPushNotifications()` :

<Tabs>
<TabItem label="Swift">
```swift
if #available(iOS 12.0, *) {
    Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional
}
```

<LinkCard title="Exemple" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/provisionalpush/provisionalpush/AppDelegate/AppDelegate.swift" />
</TabItem>

<TabItem label="Objective-C">
```objective-c
if (@available(iOS 12.0, *)) {
	[Pushwoosh sharedInstance].additionalAuthorizationOptions = UNAuthorizationOptionProvisional;
}
```

<LinkCard title="Exemple" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/provisionalpush/provisionalpushObjC/provisionalpushObjC/AppDelegate/AppDelegate.m" />
</TabItem>
</Tabs>

C'est tout ! Les utilisateurs de l'application recevront des messages directement dans leur Centre de notifications dès qu'ils auront installé l'application.

### Partagez vos commentaires avec nous

Vos commentaires nous aident à créer une meilleure expérience, nous serions donc ravis de vous entendre si vous rencontrez des problèmes lors du processus d'intégration du SDK. Si vous rencontrez des difficultés, n'hésitez pas à nous faire part de vos réflexions [via ce formulaire](https://docs.google.com/forms/d/e/1FAIpQLSd\_0b8jwn-V\_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform).