test - ¿Cómo admitir Universal Links en la aplicación iOS y el servidor de configuración?
well known universal links (3)
Soporta enlaces universales
Cuando admite enlaces universales, los usuarios de iOS 9 pueden tocar un enlace a su sitio web y ser redirigidos sin problemas a su aplicación instalada sin pasar por Safari. Si su aplicación no está instalada, al tocar un enlace a su sitio web se abre su sitio web en Safari.
Aquí, cómo configurar su propio servidor y manejar los enlaces correspondientes en su aplicación.
Servidor de configuración
Necesita tener un servidor ejecutándose en línea.
Para asociar de forma segura su aplicación iOS con un servidor, Apple requiere que ponga a disposición un archivo de configuración, llamado
apple-app-site-association
.
Este es un archivo
JSON
que describe el dominio y las rutas compatibles.
El archivo
apple-app-site-association
debe ser accesible a través de
HTTPS
, sin redireccionamientos, en
https: // {domain} / apple-app-site-association
.
El archivo se ve así:
{
"applinks": {
"apps": [ ],
"details": [
{
"appID": "{app_prefix}.{app_identifier}",
"paths": [ "/path/to/content", "/path/to/other/*", "NOT /path/to/exclude" ]
},
{
"appID": "TeamID.BundleID2",
"paths": [ "*" ]
}
]
}
}
NOTA
-
No agregue
.json
al nombre de archivo
apple-app-site-association
.
Las claves son las siguientes:
apps
: debe tener una matriz vacía como valor y debe estar presente.
Así es como lo quiere Apple.
details
: es un conjunto de diccionarios, uno para cada aplicación iOS compatible con el sitio web.
Cada diccionario contiene información sobre la aplicación, el equipo y los ID de paquete.
Hay 3 formas de definir rutas:
Static
: toda la ruta admitida está codificada para identificar un enlace específico, por ejemplo, / static / terms
Wildcards
: A * puede usarse para hacer coincidir rutas dinámicas, por ejemplo, / books / * puede hacer coincidir la ruta a la página de cualquier autor.
?
dentro de componentes de ruta específicos, por ejemplo, libros / 1?
se puede usar para hacer coincidir cualquier libro cuya identificación comience con 1.
Exclusions
: al anteponer una ruta con NOT, se excluye la coincidencia de esa ruta.
El orden en que se mencionan las rutas en la matriz es importante. Los índices anteriores tienen mayor prioridad. Una vez que una ruta coincide, la evaluación se detiene y otras rutas se ignoran. Cada ruta distingue entre mayúsculas y minúsculas.
Soportando múltiples dominios
Cada dominio admitido en la aplicación debe poner a disposición su propio archivo de asociación de sitio de aplicación de apple. Si el contenido servido por cada dominio es diferente, entonces el contenido del archivo también cambiará para admitir las rutas respectivas. De lo contrario, se puede usar el mismo archivo, pero debe ser accesible en todos los dominios compatibles.
Firmando el archivo App-Site-Association
Nota
:
Puede omitir esta parte si su servidor usa
HTTPS
para servir contenido y saltar a la guía de Configuración de la aplicación.
Si su aplicación se dirige a iOS 9 y su servidor usa
HTTPS
para servir contenido, no necesita firmar el archivo.
Si no es así (por ejemplo, cuando admite Handoff en iOS 8), debe firmarse con un certificado
SSL
de una autoridad de certificación reconocida.
Nota
: Este no es el certificado proporcionado por Apple para enviar su aplicación a la App Store.
Debe ser proporcionado por un tercero, y se recomienda usar el mismo certificado que usa para su servidor
HTTPS
(aunque no es obligatorio).
Para firmar el archivo, primero cree y guarde una versión simple .txt del mismo. Luego, en la terminal, ejecute el siguiente comando:
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
Esto generará el archivo firmado en el directorio actual.
example.com.key
,
example.com.pem
e
intermediate.pem
son los archivos que su Autoridad de Certificación pondría a su disposición.
Nota
: Si el archivo no está firmado, debe tener un
Content-Type
de
Content-Type
de
application/json
.
De lo contrario, debería ser
application/pkcs7-mime
.
Valide su servidor con la herramienta de validación de búsqueda de aplicaciones de Apple
Pruebe su página web para las API de búsqueda de iOS 9.
Ingrese una URL y Applebot rastreará su página web y le mostrará cómo puede optimizar para obtener los mejores resultados
https://search.developer.apple.com/appsearch-validation-tool/
Código del sitio web
El código del sitio web se puede encontrar en gh-pages branch en https://github.com/vineetchoudhary/iOS-Universal-Links/tree/gh-pages
Configurar la aplicación de iOS
La aplicación apuntará a iOS 9 y usará Xcode 7.2 con
Objective-C
.
Habilitación de enlaces universales
La configuración en el lado de la aplicación requiere dos cosas:
1. Configurar los derechos de la aplicación y habilitar enlaces universales.
2. Manejo de enlaces entrantes en su
AppDelegate
.
1. Configurar los derechos de la aplicación y habilitar enlaces universales.
El primer paso para configurar los derechos de su aplicación es habilitarlo para su ID de aplicación.
Haga esto en el Centro de miembros de desarrolladores de Apple.
Haga clic en Certificados, identificadores y perfiles y luego en identificadores.
Seleccione su ID de aplicación (créelo primero si es necesario), haga clic en Editar y habilite los derechos de Dominios asociados.
A continuación, obtenga el prefijo y sufijo de la ID de la aplicación haciendo clic en la ID de la aplicación correspondiente.
El prefijo y el sufijo de ID de la aplicación deben coincidir con el del archivo de asociación de sitio de la aplicación de apple.
A continuación, en
Xcode
, seleccione el objetivo de su aplicación, haga clic en Capacidades y active Dominios asociados.
Agregue una entrada para cada dominio que admita su aplicación, con el prefijo de aplicaciones :.
Por ejemplo: aplicaciones: vineetchoudhary.github.io
Que se ve así para la aplicación de muestra:
Nota
: Asegúrese de haber seleccionado el mismo equipo e ingresado la misma ID de paquete que la ID de aplicación registrada en el Centro de miembros.
También asegúrese de que Xcode incluya el archivo de derechos seleccionando el archivo y en el Inspector de archivos, asegúrese de que su objetivo esté marcado.
Manejo de enlaces entrantes en su AppDelegate
[UIApplicationDelegate application: continueUserActivity: restorationHandler:]
en
AppDelegate.m
maneja los enlaces entrantes.
Analiza esta URL para determinar la acción correcta en la aplicación.
Por ejemplo, en la aplicación de muestra:
C objetivo
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
if ([userActivity.activityType isEqualToString: 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;
}
Rápido:
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
//handle url
}
return true
}
Código de aplicación de iOS
El código de la aplicación se puede encontrar en la rama maestra en https://github.com/vineetchoudhary/iOS-Universal-Links/
Nota:
- En general, cualquier enlace admitido que haga clic en Safari o en instancias de UIWebView / WKWebView debería abrir la aplicación.
- Para iOS 9.2 y menos, esto solo funcionará en un dispositivo. iOS 9.3 (todavía en beta en el momento de la escritura) también es compatible con el simulador.
- iOS recuerda la elección del usuario al abrir Universal Links. Si tocan la ruta de navegación superior derecha para abrir el enlace en Safari, todos los clics adicionales los llevarán a Safari, y no a la aplicación. Pueden volver a abrir la aplicación de forma predeterminada seleccionando Abrir en el banner de la aplicación en el sitio web.
Hecho. Se trata de Universal Links.
Referencias
¿Cómo puedo admitir
Universal Links
en mi aplicación
iOS
y configurar mi servidor para admitir Universal Links?
Aquí está el código para manejar enlaces universales en Swift 3+, basado en la respuesta de Vineet Choudhary :
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL {
//handle URL
}
return true
}
Si completa todas las publicaciones de Vineet y todavía no funciona, intente utilizar un perfil de aprovisionamiento de distribución. Hice todo desde la publicación anterior, pero tuve que emitir un perfil de distribución para que funcione.
Con el perfil de desarrollo, la aplicación descargó con éxito el archivo AASA, pero nunca abrió mi aplicación cuando estaba presionando los enlaces.
Espero eso ayude.