Buscar..


Observaciones

  1. Cuando admite enlaces universales, los usuarios de iOS 9 pueden tocar un enlace a su sitio web y redirigirse 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.
  2. En general, cualquier enlace compatible que se UIWebView clic en Safari o en instancias de UIWebView / WKWebView debería abrir la aplicación.
  3. Para iOS 9.2 y menos, esto solo funcionará en un dispositivo. iOS 9.3 también soporta el simulador.
  4. 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 demás clics los llevarán a Safari, no a la aplicación. Pueden volver a abrir la aplicación por defecto seleccionando Abrir en el banner de la aplicación en el sitio web.

Servidor de configuración

Necesitas tener un servidor corriendo 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, denominado apple-app-site-association . Este es un archivo JSON que describe el dominio y las rutas admitidas.

El archivo apple-app-site-association debe estar 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": [ "*" ]
        }
    ]
}
}

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 su valor y debe estar presente. Así es como Apple lo quiere.
details : es una variedad 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 las identificaciones del paquete.

Hay 3 formas de definir caminos:
Static : toda la ruta admitida está codificada para identificar un enlace específico, por ejemplo, / static / términos
Wildcards : se puede usar A * para hacer coincidir las rutas dinámicas, por ejemplo, / books / * puede coincidir con la ruta a la página de cualquier autor. ? Dentro de los componentes del camino específico, por ejemplo, libros / 1? se puede utilizar para emparejar cualquier libro cuyo ID comience con 1.
Exclusions : al anular una ruta con NO se excluye esa ruta para que no coincida.

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 camino distingue entre mayúsculas y minúsculas.


# Código del sitio web

El código del sitio web se puede encontrar en la rama de gh-pages en https://github.com/vineetchoudhary/iOS-Universal-Links/tree/gh-pages

Apoyo a múltiples dominios

Cada dominio admitido en la aplicación debe tener disponible 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 utilizar el mismo archivo, pero debe ser accesible en todos los dominios compatibles.

Firma del archivo App-Site-Association

Nota : puede omitir esta parte si su servidor utiliza HTTPS para servir contenido y pasar a la guía de configuración de la aplicación.

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

Para firmar el archivo, primero cree y guarde una versión simple de .txt. A continuación, en el 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 dará salida al archivo firmado en el directorio actual. Los archivos example.com.key , example.com.pem , y 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 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 iOS 9 API de búsqueda. 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/

Instalar la aplicación iOS (habilitando los enlaces universales)

La configuración en el lado de la aplicación requiere dos cosas:

  1. Configuración de los derechos de la aplicación y habilitación de los enlaces universales activando la capacidad de Dominios asociados en el proyecto.
  2. Manejo de enlaces entrantes en su AppDelegate .

1. Configuración de los derechos de la aplicación y habilitación de enlaces universales.

El primer paso para configurar los derechos de su aplicación es habilitarla para su ID de aplicación. Haz esto en el Centro de Miembros 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 el derecho de Dominios asociados.

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

El prefijo y el sufijo de la ID de la aplicación deben coincidir con el del archivo de asociación-sitio-asociación-apple.

A continuación en Xcode , seleccione el destino de su aplicación, haga clic en Capacidades y active Dominios asociados para Activar. Agregue una entrada para cada dominio que admita su aplicación, con el prefijo de los enlaces de la aplicación:

Por ejemplo, applinks: YourCustomDomainName.com

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 al seleccionar el archivo y, en el inspector de archivos, asegúrese de que su destino esté marcado.


2. Manejo de enlaces entrantes en su AppDelegate

Todos los redireccionamientos desde Safari a la aplicación para enlaces universales se realizan a través del método a continuación en la clase AppDelegate de la aplicación. Analiza esta URL para determinar la acción correcta en la aplicación.

[UIApplicationDelegate application: continueUserActivity: restorationHandler:]

C objetivo

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    ///Checking whether the activity was from a web page redirect to the app.
    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
        ///Getting the URL from the UserActivty Object.
        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, 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 la rama principal aquí .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow