Skip to content


Création de liens profonds pour iOS

Pour obtenir des informations de base sur les liens profonds, consultez notre article sur le Guide de l’utilisateur. Si vous souhaitez implémenter des liens profonds pour la première fois dans votre application Braze, veuillez suivre les étapes ci-dessous pour commencer.

Étape 1 : Enregistrement d’un schéma

Le schéma personnalisé doit être indiqué dans le fichier Info.plist. La structure de navigation est définie par un ensemble de dictionnaires. Chacun de ces dictionnaires contient un tableau de chaînes de caractères.

Utiliser l’éditeur Xcode pour modifier votre fichier Info.plist :

  1. Ajouter une nouvelle clé, URL types. Xcode fera automatiquement en sorte qu’un tableau contenant un dictionnaire appelé Item 0.
  2. Dans Item 0, ajouter une clé URL identifier. Définissez la valeur sur votre schéma personnalisé.
  3. Dans Item 0, ajouter une clé URL Schemes. Ce sera automatiquement un tableau contenant une chaîne Item 0.
  4. Définir URL Schemes » Item 0 à votre schéma personnalisé.

Sinon, si vous souhaitez modifier votre fichier Info.plist directement, vous pouvez suivre cette spécification :

1
2
3
4
5
6
7
8
9
10
11
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>{YOUR.SCHEME}</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>{YOUR.SCHEME}</string>
        </array>
    </dict>
</array>

Étape 2 : Autoriser la liste blanche du schéma personnalisé (iOS 9+)

À partir d’iOS 9, les applications doivent avoir une liste blanche de schémas personnalisés que l’application est autorisée à ouvrir. Si vous tentez d’appeler des schémas en dehors de cette liste, le système enregistrera une erreur dans les journaux d’appareil et le lien profond ne s’ouvrira pas. Voici un exemple de cette erreur :

1
<Warning>: -canOpenURL: failed for URL: "yourapp://deeplink" – error: "This app is not allowed to query for scheme yourapp"

Par exemple, si un message intégré à l’application doit ouvrir l’application Facebook lorsqu’il est tapé, l’application doit avoir le schéma personnalisé Facebook (fb) dans la liste autorisée. Sinon, le système rejettera le lien profond. Les liens profonds qui dirigent vers une page ou s’affichent dans votre propre application nécessitent toujours que le schéma personnalisé de votre application soit répertorié dans le Info.plist de votre application.

Vous devez ajouter tous les schémas dont l’application a besoin pour créer des liens profonds dans une liste blanche dans le Info.plist de votre application avec la clé LSApplicationQueriesSchemes. Par exemple :

1
2
3
4
5
6
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>myapp</string>
    <string>facebook</string>
    <string>twitter</string>
</array>

Pour plus d’informations, reportez-vous à la documentation d’Apple sur la clé LSApplicationQueriesSchemes.

Étape 3 : Implémenter un gestionnaire

Après avoir activé votre application, iOS appellera la méthode application:openURL:options:. L’argument important est l’objet NSURL.

1
2
3
4
5
6
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  NSString *path  = [url path];
  NSString *query = [url query];
  // Here you should insert code to take some action based upon the path and query.
  return YES;
}
1
2
3
4
5
6
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  let path = url.path
  let query = url.query
  // Here you should insert code to take some action based upon the path and query.
  return true
}

Liens universels

Pour utiliser des liens universels, assurez-vous d’avoir ajouté un domaine enregistré aux capacités de votre application et avez téléchargé un fichier apple-app-site-association. Puis implémentez la méthode application:continueUserActivity:restorationHandler: dans votre AppDelegate. Par exemple :

1
2
3
4
5
6
7
8
9
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
  restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
  if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
    NSURL *url = userActivity.webpageURL;
    // Handle url
  }
  return YES;
}
1
2
3
4
5
6
7
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  if (userActivity.activityType == NSUserActivityTypeBrowsingWeb) {
    let url = userActivity.webpageURL
    // Handle url
  }
  return true
}

Consultez Apple pour plus d’informations.

Application Transport Security (ATS)

iOS 9 a introduit un changement de rupture affectant les URL web intégrées dans les messages in-app, et les notifications push.

Prérequis ATS

Extrait de la documentation d’Apple: « App Transport Security est une fonctionnalité qui améliore la sécurité des connexions entre une application et des services Web. » La fonctionnalité consiste en des exigences de connexion par défaut conformes aux meilleures pratiques visant les connexions sécurisées. Les applications peuvent remplacer ce comportement par défaut et désactiver la sécurité du transport. »

L’ATS est appliqué par défaut sur iOS 9+. Il nécessite que toutes les connexions utilisent HTTPS et soient chiffrées à l’aide de TLS 1.2 avec confidentialité de transmission. Pour plus d’informations, reportez-vous à la section Exigences pour la connexion à l’aide de l’ATS. Toutes les images servies par Braze aux terminaux sont gérées par un réseau de diffusion de contenu (« CDN ») qui prend en charge TLS 1.2 et est compatible avec ATS.

Sauf s’ils sont spécifiés comme des exceptions dans le Info.plist de votre application, les connexions qui ne suivent pas ces exigences échoueront avec des erreurs qui ressemblent à ceci :

1
2
CFNetwork SSLHandshake failed (-9801)
Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred, and a secure connection to the server cannot be made."
1
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

La conformité ATS est appliquée aux liens ouverts dans l’application mobile (notre gestion par défaut des liens cliqués) et ne s’applique pas aux sites ouverts à l’extérieur via un navigateur web.

Gestion des exigences ATS

Vous pouvez gérer l’ATS de l’une des trois manières suivantes :

Confirmez que tous les liens sont conformes aux ATS (recommandé)

Votre intégration à Braze peut satisfaire aux exigences de l’ATS en veillant à ce que tous les liens existants vers lesquels vous conduisez les utilisateurs (par le biais de messages in-app et de campagnes in-app) satisfassent aux exigences de l’ATS. Bien qu’il existe des moyens de contourner les restrictions ATS, nous vous recommandons de vous assurer que tous les liens URL sont conformes aux exigences ATS. Compte tenu de l’importance croissante accordée par Apple à la sécurité des applications, il n’est pas garanti que les approches suivantes pour autoriser les exceptions ATS soient prises en charge par Apple.

Un outil SSL peut vous aider à identifier les problèmes de sécurité du serveur Web. Ce test de serveur SSL de Qualys, Inc. fournit un élément de ligne spécifiquement pour la conformité à Apple ATS 9 et iOS 9.

Désactiver partiellement l’ATS

Vous pouvez autoriser un sous-ensemble de liens avec certains domaines ou programmes à traiter comme des exceptions aux règles ATS. Votre intégration Braze satisfera aux exigences ATS si chaque lien que vous utilisez dans un canal de communication Braze est soit conforme ATS, soit géré par une exception.

Pour ajouter un domaine à une exception de l’ATS, ajoutez l’élément suivant au fichier Info.plist de votre application :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Pour plus d’informations, consultez l’article d’Apple sur les clés de sécurité pour le transport d’applications.

Désactiver complètement ATS

Vous pouvez désactiver complètement ATS. Notez que ce n’est pas une pratique recommandée, en raison à la fois des protections de sécurité perdues et de la future compatibilité iOS. Pour désactiver ATS, insérez les éléments suivants dans le fichier Info.plist de votre application :

1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Reportez-vous à la section Expédition d’une application avec App Transport Security pour plus d’informations sur le débogage des échecs ATS.

Encodage d’URL

À partir de SDK Braze pour iOS v2.21.0, SDK encode les liens en pourcentage pour créer des NSURL valides. Tous les caractères de lien qui ne sont pas autorisés dans une URL correctement formée, tels que les caractères Unicode, seront échappés en pourcentage.

Pour décoder un lien encodé, utilisez la méthode NSString stringByRemovingPercentEncoding. Notez que vous devez également renvoyer YES dans le ABKURLDelegate et qu’un appel à l’action est nécessaire pour déclencher la gestion de l’URL par l’application. Par exemple :

1
2
3
4
5
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)options {
  NSString *urlString = url.absoluteString.stringByRemovingPercentEncoding;
  // Handle urlString
  return YES;
}
1
2
3
4
5
  func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let urlString = url.absoluteString.removingPercentEncoding
    // Handle urlString
    return true
  }

Personnalisation

Personnalisation de WebView par défaut

La classe personnalisable ABKModalWebViewController affiche les URL Web ouvertes par le SDK, généralement lorsque l’option « Ouvrir l’URL Web dans l’application » est sélectionnée pour un lien profond Web.

Vous pouvez déclarer une catégorie ou modifier directement la classe ABKModalWebViewController pour appliquer la personnalisation à la vue Web. Vérifiez le fichier .h de la classe et le fichier .m pour plus de détails.

Gestion de la personnalisation des liens

Le protocole ABKURLDelegate peut être utilisé pour personnaliser la gestion des URL telles que les liens profonds, les URL Web et les liens universels. appboyOptions Pour définir le délégué lors de l’initialisation de Braze, passez un objet délégué à l’adresse ABKURLDelegateKey dans la section startWithApiKey:inApplication:withAppboyOptions:. Braze appellera ensuite l’implémentation de votre délégué handleAppboyURL:fromChannel:withExtras: avant de gérer les URI.

Exemple d’intégration : ABKURLDelegate

1
2
3
4
5
6
7
8
- (BOOL)handleAppboyURL:(NSURL *)url fromChannel:(ABKChannel)channel withExtras:(NSDictionary *)extras {
  if ([[url.host lowercaseString] isEqualToString:@"MY-DOMAIN.com"]) {
    // Custom handle link here
    return YES;
  }
  // Let Braze handle links otherwise
  return NO;
}
1
2
3
4
5
6
7
8
func handleAppboyURL(_ url: URL?, from channel: ABKChannel, withExtras extras: [AnyHashable : Any]?) -> Bool {
  if (url.host == "MY-DOMAIN.com") {
    // Custom handle link here
    return true;
  }
  // Let Braze handle links otherwise
  return false;
}

Pour plus d’informations, voir ABKURLDelegate.h.

Cas d’utilisation fréquents

Création de liens profonds vers les paramètres d’application

iOS peut conduire les utilisateurs de votre application vers sa page dans l’application de paramètres iOS. Vous pouvez tirer parti de UIApplicationOpenSettingsURLString pour créer des liens profonds entre les utilisateurs et les paramètres à partir de notifications push et de messages in-app.

  1. Tout d’abord, assurez-vous que votre application est configurée pour des liens profonds basés sur des schémas ou des liens universels.
  2. Décidez d’un URI pour le lien profond vers la page Paramètres (par exemple, myapp://settings ou https://www.braze.com/settings).
  3. Si vous utilisez des liens profonds basés sur un schéma personnalisé, ajoutez le code suivant à votre méthode application:openURL:options: :
1
2
3
4
5
6
7
8
9
10
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
  NSString *path  = [url path];
  if ([path isEqualToString:@"settings"]) {
    NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:settingsURL];
  }
  return YES;
}
1
2
3
4
5
6
7
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
  let path = url.path
  if (path == "settings") {
    UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
  }
  return true
}
New Stuff!