Comment gérer les liens profonds dans SwiftUI

Apprenez à implémenter et à gérer à la fois les schémas d'URL personnalisés et les liens universels │ dans votre application SwiftUI afin de diriger les utilisateurs vers un contenu spécifique.

Intermediate

La gestion des liens profonds dans SwiftUI implique de configurer votre application pour qu'elle réponde à des URL spécifiques, puis d'analyser ces URL pour naviguer vers le contenu approprié au sein de votre application. Il existe deux types principaux de liens profonds : les schémas d'URL personnalisés et les liens universels.

1. Schémas d'URL personnalisés

Les schémas d'URL personnalisés vous permettent de définir un préfixe unique (par exemple, myapp://) qui, lorsqu'il est sélectionné, ouvre votre application.

Configuration :

  1. Ajouter un type d'URL dans Xcode :
    • Dans votre projet Xcode, sélectionnez votre cible.
    • Accédez à l'onglet « Info ».
    • Sous « Types d'URL », cliquez sur le bouton « + » pour ajouter un nouveau type d'URL.
    • Définissez l'« Identifiant » (par exemple, com.votresociété.votreaпp). Il est recommandé d'utiliser l'identifiant de votre application comme préfixe.
    • Définissez les « Schémas d'URL » selon le schéma souhaité (par exemple, myapp).

Gestion dans SwiftUI :

Vous utilisez le modificateur de vue .onOpenURL pour gérer les URL entrantes. Ce modificateur est disponible depuis iOS 14.

import SwiftUI

struct ContentView: View {
 @State private var receivedURL: URL?  var body: some View {
 VStack {  Texte(« Gestionnaire de liens profonds »)  si laisser url = receivedURL {  Texte("URL reçue : \(url.absoluteString)")
 // Analyser l'URL et naviguer en conséquence
 // Exemple : myapp://product?id=123  if url.host == "product",  let composants = URLComponents(url : url, resolvingAgainstBaseURL : false),
 let id = composants.queryItems?.first(where: { $0.name == "id" })?.valeur {
 Texte(« ID produit : \(id)»)  }
 } else {  Texte(« Aucun lien profond reçu pour l'instant. »)  }  }  .onOpenURL { url in
 URL reçue = URL  imprimer(«Schéma d'URL personnalisé reçu : \(url)")  }  } } 

2. Liens universels

Les liens universels sont des liens HTTPS standard (par exemple, https://yourwebsite.com/path) qui peuvent ouvrir directement votre application si elle est installée, ou rediriger vers votre site web si ce n'est pas le cas. Ils offrent une expérience utilisateur fluide.

Configuration :

  1. Droit d'accès aux domaines associés :

    • Dans votre projet Xcode, sélectionnez votre cible.
    • Accédez à l'onglet « Signing & Capabilities » (Signature et capacités).
    • Cliquez sur « + Capability » et ajoutez « Associated Domains ».
    • Ajoutez une entrée au format applinks:votresiteweb.com (par exemple, applinks:example.com).
  2. apple-app-site-association Fichier :

    • Créez un fichier JSON nommé apple-app-site-association (sans extension .json).
    • Hébergez ce fichier sur votre site web à la racine ou dans le répertoire .well-known (par exemple, https://yourwebsite.com/apple-app-site-association ou https://yourwebsite.com/.well-known/apple-app-site-association).
    • Le fichier spécifie les chemins d'accès de votre site Web qui doivent ouvrir votre application. Vous aurez besoin de votre identifiant d'équipe et de votre identifiant de bundle pour ce fichier.

    Exemple de fichier apple-app-site-association :

    json { "applinks": { "details": [ { "appIDs": [ "YOUR_TEAM_ID.com.yourcompany.yourapp" ], "components": [ { "/": "/products/*", "comment": "Correspond à n'importe quelle URL dans le chemin /products/" }, { "/": "/profile/*", "comment": "Correspond à n'importe quelle URL dans le chemin /profile/" } ] } ] } }

Gestion dans SwiftUI :

Comme pour les schémas d'URL personnalisés, vous utilisez le modificateur .onOpenURL.

import SwiftUI struct ContentView: View {
 @State private var receivedUniversalLink: URL?  var body: some View {  VStack {  Texte("Gestionnaire de liens universels")  si let url = receivedUniversalLink {
 Texte("Lien universel reçu : \(url.absoluteString)")
 // Analyser l'URL et naviguer  // Exemple : https://yourwebsite.com/products/123  if url.pathComponents.contains("products"),  let productId = url.lastPathComponent {  Texte("ID produit à partir du lien universel : \(productId)")  }  } else {  Texte(« Aucun lien universel reçu pour le moment. »)  }  }  .onOpenURL { url in  receivedUniversalLink = url  print("Lien universel reçu : \(url)")  }
 } } 

3. Analyse et navigation

Pour les applications plus complexes, vous devrez analyser l'URL entrante et utiliser les outils de navigation de SwiftUI pour diriger l'utilisateur vers la vue appropriée.

import SwiftUI

enum AppRoute: Hashable {
 case home  case product(id: Chaîne)  cas profil(id: Chaîne)  cas paramètres } class DeepLinkManager: ObservableObject {
 @Published var navigationPath = NavigationPath()

 func handleURL(_ url: URL) {  guard let host = url.host else { return }  // Exemple de schéma d'URL personnalisé : myapp://product?id=123  // Exemple de lien universel : https://yourwebsite.com/products/123  if host == "product" || url.pathComponents.contains("products") {  if let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
 let id = components.queryItems?.first(where: { $0.name == "id" })?.value ?? url.lastPathComponent {
 navigationPath.append(AppRoute.product(id: id))  }
 } else if host == "profile" || url.pathComponents.contient(« profil ») {  si let composants = URLComponents(url: url, resolvingAgainstBaseURL: false),
 let id = components.queryItems?.first(where: { $0.nom == "id" })?.valeur ?? url.lastPathComponent {  navigationPath.append(AppRoute.profile(id: id))  }  }
 // Ajouter davantage de logique de routage pour d'autres chemins  } }