¿Cómo apoyar enlaces universales en la aplicación de iOS y servidor de configuración para ello?

¿Cómo puedo admitir enlaces universales en mi aplicación de iOS y configurar mi servidor para admitir enlaces universales?

    Soporte Universal Links

    Cuando admite enlaces universales, los usuarios de iOS 9 pueden tocar un enlace a su sitio web y obtener una redirección 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 necesita ser accesible a través de HTTPS , sin redirecciones, 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": [ "*" ] } ] } } 

    NOTANo anexe .json al nombre de archivo apple-app-site-association .

    Las claves son las siguientes:
    apps : debe tener un conjunto vacío como su valor, y debe estar presente. Así es como Apple lo quiere.
    details : es una matriz de diccionarios, uno para cada aplicación de iOS compatible con el sitio web. Cada diccionario contiene información sobre la aplicación, el equipo y las ID del 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 * se puede usar para unir rutas dinámicas, por ejemplo, / books / * puede coincidir con la ruta a la página de cualquier autor. ? dentro de componentes de ruta específicos, por ejemplo, libros / 1? se puede usar para unir cualquier libro cuya ID comience con 1.
    Exclusions : anteponer una ruta con NOT excluye esa ruta de ser coincidente.

    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.

    Soporte de múltiples dominios

    Cada dominio admitido en la aplicación debe poner a disposición su propio archivo apple-app-site-association. 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 estar 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 acceder a la guía de Configuración de la aplicación.

    Si su aplicación está dirigida a iOS 9 y su servidor usa HTTPS para servir contenido, no necesita firmar el archivo. De lo contrario (por ejemplo, cuando se admite Handoff en iOS 8), debe firmarse con un certificado SSL de una autoridad certificadora 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 utilizar el mismo certificado que utiliza para su servidor HTTPS (aunque no es obligatorio).

    Para firmar el archivo, primero cree y guarde una versión .txt simple de él. Luego, en la terminal, ejecuta el siguiente comando:

     cat .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. El example.com.key , example.com.pem , y intermediate.pem son los archivos que pondría a su disposición su autoridad de certificación.

    Nota : Si el archivo no está firmado, debe tener un Content-Type of 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
    Pon a prueba tu 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 se dirigirá a iOS 9 y utilizará 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 el derecho de la aplicación y habilitar enlaces universales.
    2. Manejo de enlaces entrantes en su AppDelegate .

    1. Configurar el derecho de la aplicación y habilitar enlaces universales.
    El primer paso para configurar los derechos de su aplicación es habilitarla 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éela primero si es necesario), haga clic en Editar y habilite la titularidad de Dominios asociados.

    A continuación, obtenga el prefijo y el sufijo de ID de la aplicación haciendo clic en la ID de la aplicación respectiva.

    El prefijo y el sufijo de ID de aplicación deben coincidir con el del archivo apple-app-site-association.

    A continuación en Xcode , seleccione el objective de su Aplicación, haga clic en Capacidades y active Dominios asociados. Agregue una entrada para cada dominio compatible con su aplicación, con el prefijo applys aplicado.

    Por ejemplo: applinks: vineetchoudhary.github.io

    Que se parece a esto para la aplicación de muestra:

    Nota : Asegúrese de haber seleccionado el mismo equipo e ingresado la misma ID de paquete como ID de aplicación registrada en el Centro de miembros. Asegúrese también de que Xcode incluya el archivo de derechos seleccionando el archivo y en el Inspector de archivos, asegúrese de que su objective esté marcado.

    Manejo de enlaces entrantes en su AppDelegate

    [UIApplicationDelegate application: continueUserActivity: restrationHandler:] en AppDelegate.m maneja los enlaces entrantes. Analizas esta URL para determinar la acción correcta en la aplicación.

    Por ejemplo, en la aplicación de muestra:

    C objective

     -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restrationHandler:(void (^)(NSArray * _Nullable))restrationHandler{ 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; } 

    Swift:

     func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restrationHandler: ([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 twig principal en https://github.com/vineetchoudhary/iOS-Universal-Links/

    Nota:

    1. En general, cualquier enlace compatible hace clic en Safari, o en instancias de UIWebView / WKWebView debe abrir la aplicación.
    2. 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.
    3. iOS recuerda la elección del usuario al abrir enlaces universales. Si tocan la ruta de exploración superior derecha para abrir el enlace en Safari, todos los demás clics los llevarán a Safari y no a la aplicación. Pueden volver a abrir la aplicación de forma predeterminada al elegir Abrir en el banner de la aplicación en el sitio web.

    Hecho. Se trata de enlaces universales.


    Referencias

    1. Soporte de enlaces universales en su aplicación de iOS

    Si completa toda la publicación de Vineet y todavía no funciona, intente utilizar un perfil de aprovisionamiento de distribución. Hice todo lo que hice desde la publicación anterior, pero tuve que publicar 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.