La gestion des liens profonds dans UIKit implique deux mécanismes principaux : les Schémas d'URL Personnalisés (Custom URL Schemes) et les Universal Links. Bien que les deux permettent aux utilisateurs de naviguer directement vers un contenu spécifique dans votre application, les Universal Links sont généralement préférés pour leur expérience utilisateur transparente et leur meilleur comportement de repli.
1. Schémas d'URL Personnalisés
Les schémas d'URL personnalisés vous permettent de définir un préfixe unique pour les URL de votre application (par exemple, myapp://product/123). Lorsqu'un utilisateur touche un lien avec ce schéma, iOS lance votre application.
Configuration :
-
Enregistrer le schéma d'URL dans Xcode :
- Ouvrez votre projet dans Xcode.
- Sélectionnez votre projet dans le navigateur de projet, puis sélectionnez votre cible.
- Accédez à l'onglet "Info".
- Dans la section "URL Types", cliquez sur le bouton "+" pour ajouter un nouveau type d'URL.
- Pour "Identifier", vous pouvez utiliser l'ID de bundle de votre application (par exemple,
com.yourcompany.yourapp). - Pour "URL Schemes", entrez votre schéma personnalisé souhaité (par exemple,
myapp).
-
Gérer l'URL entrante dans
AppDelegateouSceneDelegate:-
Pour les applications utilisant
AppDelegate(anciennes applications ou celles n'utilisant pas les Scene Delegates) : Implémentez la méthodeapplication(_:open:options:).swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { // Parse the URL and navigate to the appropriate content print("Received URL: \(url)") handleDeepLink(url) return true } -
Pour les applications utilisant
SceneDelegate(iOS 13 et versions ultérieures) : Implémentezscene(_:openURLContexts:)ouscene(_:continue:).```swift func scene(_ scene: UIScene, openURLContexts URLContexts: Set
) { guard let url = URLContexts.first?.url else { return } print("Received URL: (url)") handleDeepLink(url) } // For Universal Links, you'll also use this method func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return } print("Received Universal Link: (url)") handleDeepLink(url) } ```
-
2. Universal Links
Les Universal Links sont des liens HTTPS standard qui fonctionnent à la fois pour votre site Web et votre application. Si votre application est installée, le lien s'ouvre directement dans votre application ; sinon, il s'ouvre dans Safari. Cela offre une expérience utilisateur beaucoup plus fluide.
Configuration :
-
Créer un fichier
apple-app-site-association:- Ce fichier JSON indique à iOS quelles URL votre application peut gérer.
- Hébergez ce fichier à la racine de votre serveur Web ou dans le sous-répertoire
.well-known(par exemple,https://yourdomain.com/apple-app-site-association). - Exemple de contenu :
json { "applinks": { "apps": [], "details": [ { "appID": "TEAM_ID.com.yourcompany.yourapp", "paths": [ "/product/*", "/settings/*" ] } ] } }RemplacezTEAM_IDetcom.yourcompany.yourapppar vos valeurs réelles.
-
Activer la capacité "Associated Domains" dans Xcode :
- Dans Xcode, sélectionnez votre projet et votre cible.
- Accédez à l'onglet "Signing & Capabilities".
- Cliquez sur "+ Capability" et sélectionnez "Associated Domains".
- Ajoutez une entrée pour chaque domaine que votre application doit gérer, préfixée par
applinks:(par exemple,applinks:yourdomain.com).
-
Gérer l'URL entrante dans
AppDelegateouSceneDelegate:- Les Universal Links sont gérés à l'aide de l'objet
NSUserActivity. -
Pour
AppDelegate: Implémentezapplication(_:continue:restorationHandler:).swift func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return false } print("Received Universal Link: \(url)") handleDeepLink(url) return true } -
Pour
SceneDelegate: Utilisez la méthodescene(_:continue:)comme montré dans la section Schémas d'URL Personnalisés ci-dessus.
- Les Universal Links sont gérés à l'aide de l'objet
3. Logique Générale de Gestion des Liens Profonds (fonction handleDeepLink)
Indépendamment de l'utilisation de schémas d'URL personnalisés ou d'Universal Links, la logique principale pour analyser l'URL et naviguer dans votre application reste similaire.
func handleDeepLink(_ url: URL) {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
return
}
// Example: myapp://product/123?color=red
// Example: https://yourdomain.com/product/123?color=red
if components.host == "product" {
// Extract product ID from path components or query parameters
let productID = components.path.replacingOccurrences(of: "/", with: "")
let color = components.queryItems?.first(where: { $0.name == "color" })?.value
// Navigate to product detail screen
// (e.g., using a UINavigationController or presenting a new view controller)
if let rootViewController = UIApplication.shared.windows.first?.rootViewController as? UINavigationController {
let productViewController = ProductDetailViewController() // Your custom VC
productViewController.productID = productID
productViewController.selectedColor = color
rootViewController.pushViewController(productViewController, animated: true)
}
} else if components.host == "settings" {
// Navigate to settings screen
if let rootViewController = UIApplication.shared.windows.first?.rootViewController as? UINavigationController {
let settingsViewController = SettingsViewController() // Your custom VC
rootViewController.pushViewController(settingsViewController, animated: true)
}
}
// Add more conditions for different paths/hosts
}
4. Considérations de Sécurité
Les liens profonds peuvent être un vecteur d'attaque potentiel. Validez toujours tous les paramètres d'URL et rejetez les URL malformées. Limitez les actions disponibles via les liens profonds à celles qui ne risquent pas les données de l'utilisateur, et ne leur permettez jamais de supprimer directement du contenu ou d'accéder à des informations sensibles.
5. Tester les Liens Profonds
Vous pouvez tester les liens profonds en :
* Entrant le schéma d'URL personnalisé dans Safari (par exemple, myapp://product/123).
* Utilisant la commande xcrun simctl openurl booted <URL> dans votre terminal pour ouvrir des URL dans le simulateur iOS.
* Appuyant sur des Universal Links à partir d'une page Web dans Safari.