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 :
- 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 :
-
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).
-
apple-app-site-associationFichier :- 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-associationouhttps://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/" } ] } ] } } - Créez un fichier JSON nommé
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 } }