Comment prendre en charge Universal Links dans iOS App et le server d'installation pour cela?

Comment puis-je prendre en charge Universal Links dans mon application iOS et configurer mon server afin de prendre en charge Universal Links?

Soutenir les liens universels

Lorsque vous prenez en charge les liens universels, les users d'iOS 9 peuvent cliquer sur un lien vers votre site Web et être redirigés de manière transparente vers votre application installée sans passer par Safari. Si votre application n'est pas installée, le fait d'appuyer sur un lien vers votre site Web ouvre votre site Web dans Safari.

Ici, comment configurer votre propre server, et gérer les liens correspondants dans votre application.


Configurer le server

Vous devez avoir un server en ligne. Pour associer votre application iOS à un server de manière sécurisée, Apple vous request de mettre à disposition un file de configuration appelé apple-app-site-association . Ceci est un file JSON qui décrit le domaine et les routes sockets en charge.

Le file apple-app-site-association doit être accessible via HTTPS , sans redirection, sur https: // {domain} / apple-app-site-association .

Le file ressemble à ceci:

 { "applinks": { "apps": [ ], "details": [ { "appID": "{app_prefix}.{app_identifier}", "paths": [ "/path/to/content", "/path/to/other/*", "NOT /path/to/exclude" ] }, { "appID": "TeamID.BundleID2", "paths": [ "*" ] } ] } } 

NOTEN'ajoutez pas .json au nom de .json apple-app-site-association .

Les keys sont les suivantes:
apps : Devrait avoir un tableau vide comme valeur, et il doit être présent. C'est comme ça qu'Apple le veut.
details : est un tableau de dictionarys, un pour chaque application iOS prise en charge par le site Web. Chaque dictionary contient des informations sur l'application, l'équipe et les ID de regroupement.

Il y a 3 façons de définir les paths:
Static : l'set du path pris en charge est codé en dur pour identifier un lien spécifique, par exemple / static / terms
Wildcards : A * peut être utilisé pour faire correspondre des paths dynamics, par exemple / books / * peut correspondre au path d'access à la page d'un auteur. ? à l'intérieur de composants de path spécifiques, par exemple des livres / 1? peut être utilisé pour faire correspondre tous les livres dont l'ID commence par 1.
Exclusions : Ajouter un path sans exclure ce path d'access.

L'ordre dans lequel les paths sont mentionnés dans le tableau est important. Les indices précédents ont une priorité plus élevée. Une fois qu'un path correspond, l'évaluation s'arrête et les autres paths sont ignorés. Chaque path est sensible à la casse.

Prise en charge de plusieurs domaines

Chaque domaine pris en charge dans l'application doit mettre à disposition son propre file apple-app-site-association. Si le contenu servi par chaque domaine est différent, le contenu du file changera également pour prendre en charge les paths respectifs. Sinon, le même file peut être utilisé, mais il doit être accessible sur tous les domaines pris en charge.

Signature du file App-Site-Association

Remarque : Vous pouvez ignorer cette partie si votre server utilise le HTTPS pour diffuser du contenu et accéder au guide de configuration de l'application.

Si votre application cible iOS 9 et que votre server utilise le HTTPS pour diffuser du contenu, vous n'avez pas besoin de signer le file. Sinon (par exemple, lors de la prise en charge Handoff sur iOS 8), il doit être signé à l'aide d'un certificate SSL d'une autorité de certificateion reconnue.

Remarque : ce n'est pas le certificate fourni par Apple pour soumettre votre application à l'App Store. Il doit être fourni par un tiers et il est recommandé d'utiliser le même certificate que celui que vous utilisez pour votre server HTTPS (bien que ce ne soit pas obligatoire).

Pour signer le file, commencez par créer et enregistrez une version .txt simple. Ensuite, dans le terminal, exécutez la command suivante:

 cat <unsigned_file>.txt | openssl smime -sign -inkey example.com.key -signer example.com.pem -certfile intermediate.pem -noattr -nodetach -outform DER > apple-app-site-association 

Cela affichera le file signé dans le directory courant. Les files example.com.key , example.com.pem et intermediate.pem sont les files mis à votre disposition par votre autorité de certificateion.

Remarque : Si le file n'est pas signé, il doit avoir un Content-Type d' application/json . Sinon, il devrait être application/pkcs7-mime .

Validez votre server avec l'outil de validation de search Apple App
Testez votre page Web pour les API de search iOS 9. Entrez une URL et Applebot explorera votre page Web et montrera comment vous pouvez optimiser les meilleurs résultats https://search.developer.apple.com/appsearch-validation-tool/

Code du site Web

Le code du site Web se trouve sur la page gh-pages https://github.com/vineetchoudhary/iOS-Universal-Links/tree/gh-pages


Configuration de l'application iOS

L'application ciblera iOS 9 et utilisera Xcode 7.2 avec Objective-C .

Activation des liens universels

La configuration du côté de l'application nécessite deux choses:
1. Configuration du droit de l'application et activation des liens universels.
2. Gestion des liens entrants dans votre AppDelegate .

1. Configuration du droit de l'application et activation des liens universels.
La première étape de la configuration des droits de votre application consiste à l'activer pour votre ID d'application. Pour ce faire, accédez au Centre des membres Apple Developer. Cliquez sur Certificats, identifiants et profils, puis sur Identifiants. Sélectionnez votre identifiant d'application (créez-le d'abord si nécessaire), click Modifier et activez le droit d'access aux domaines associés.

Ensuite, obtenez le préfixe et le suffixe de l'identifiant de l'application en cliquant sur l'identifiant de l'application correspondant.

Le préfixe et le suffixe de l'ID d'application doivent correspondre à celui du file apple-app-site-association.

Ensuite, dans Xcode , select la cible de votre application, click Capacités et activez les domaines associés. Ajoutez une input pour chaque domaine pris en charge par votre application, préfixée par des applinks:

Par exemple: applinks: vineetchoudhary.github.io

Ce qui ressemble à ceci pour l'exemple d'application:

Remarque : Vérifiez que vous avez sélectionné la même équipe et que vous avez entré le même ID d'set que l'ID d'application enregistré sur le Centre des membres. Assurez-vous également que le file des droits est inclus par Xcode en sélectionnant le file et dans l'inspecteur de files, assurez-vous que votre cible est cochée.

Gestion des liens entrants dans votre AppDelegate

[UIApplicationDelegate application: continueUserActivity: restorationHandler:] dans AppDelegate.m gère les liens entrants. Vous parsingz cette URL pour déterminer la bonne action dans l'application.

Par exemple, dans l'exemple d'application:

Objectif c

 -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{ if ([userActivity.activityType isEqualToSsortingng: NSUserActivityTypeBrowsingWeb]) { NSURL *url = userActivity.webpageURL; UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UINavigationController *navigationController = (UINavigationController *)_window.rootViewController; if ([url.pathComponents containsObject:@"home"]) { [navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"HomeScreenId"] animated:YES]; }else if ([url.pathComponents containsObject:@"about"]){ [navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"AboutScreenId"] animated:YES]; } } return YES; } 

Rapide :

 func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb { let url = userActivity.webpageURL! //handle url } return true } 

Code d'application iOS

Le code de l'application peut être trouvé twig principale sur https://github.com/vineetchoudhary/iOS-Universal-Links/

Remarque:

  1. En règle générale, tout lien pris en charge cliqué dans Safari, ou dans les instances de UIWebView / WKWebView devrait ouvrir l'application.
  2. Pour iOS 9.2 et less, cela ne fonctionne que sur un appareil. iOS 9.3 (toujours en version bêta au moment de la rédaction) prend également en charge le simulateur.
  3. iOS se souvient du choix de l'user lors de l'ouverture d'Universal Links. S'ils tapent le fil d'Ariane en haut à droite pour ouvrir le lien dans Safari, tous les autres clics les amèneront à Safari, et non à l'application. Ils peuvent revenir à l'ouverture de l'application par défaut en choisissant Ouvrir dans la bannière de l'application sur le site Web.

Terminé. Tout tourne autour des liens universels.


Les references

  1. Prise en charge des liens universels dans votre application iOS

Si vous remplissez tous les messages de Vineet et que cela ne fonctionne toujours pas, essayez d'utiliser un profil de provisionnement de dissortingbution. J'ai tout fait depuis le post ci-dessus, mais j'ai dû émettre un profil de dissortingbution afin de le faire fonctionner.

Avec le profil de développement, l'application a téléchargé avec succès le file AASA, mais il n'a jamais ouvert mon application lorsque j'appuyais sur les liens.

J'espère que cela aide.