Cómo puedo apoyar Universal Enlaces en mi iOS de la aplicación y la configuración de mi servidor con el fin de apoyar Universal de Enlaces?

3 Comentarios

  1. 80

    Soporte Universal Enlaces

    Al soporte universal enlaces, iOS 9 los usuarios pueden pulsar un enlace a su sitio web y obtener la perfección redirigido a su aplicación instalada sin necesidad de ir a través de Safari. Si la aplicación no está instalada, pulsando en un enlace a su sitio web se abrirá su página web en Safari.

    Aquí, cómo configurar su propio servidor, y manejar los enlaces correspondientes en su aplicación.


    Servidor De Instalación

    Usted necesita tener un servidor que se ejecuta en línea. De forma segura asociar su app de iOS con un servidor, Apple requiere que usted ponga a su disposición un archivo de configuración, llamado apple-app-site-association. Este es un JSON archivo que describe el dominio y apoyado rutas.

    La apple-app-site-association archivo debe ser accesible a través de HTTPS, sin ningún tipo de redirecciones, en https://{domain}/apple-app-sitio de la asociación de.

    El archivo tiene este aspecto:

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

    NOTAno anexar .json a la apple-app-site-association nombre de archivo.

    Las claves son como sigue:

    apps: Debe tener una matriz vacía como su valor, y debe estar presente. Esta es la forma en que Apple quiere.

    details: Es una matriz de diccionarios, uno para cada app de iOS, apoyado por el sitio web. Cada diccionario contiene información acerca de la aplicación, el equipo y el paquete de Id.

    Hay 3 maneras de definir rutas de acceso:

    Static: La totalidad del camino está codificada para identificar un enlace específico, por ejemplo, /static/términos

    Wildcards: Una * se puede utilizar para que coincida con dinámica de caminos, por ejemplo, /libros/* puede coincide con la ruta de acceso a cualquier página del autor. ? dentro específicos de componentes de la ruta, por ejemplo, libros/1? se puede utilizar para que coincida con cualquiera de los libros cuya IDENTIFICACIÓN se inicia con 1.

    Exclusions: Anteponiendo una ruta que NO excluye la posibilidad de que la ruta de ser correspondidos.

    El orden en el que los caminos se mencionan en la matriz es importante. Anterior de los índices de mayor prioridad. Una vez que una ruta de acceso de los partidos, la evaluación se detiene, y otros caminos ignorados. Cada ruta es sensible a mayúsculas.

    Soporte De Múltiples Dominios

    Cada dominio soportado en la aplicación necesita para poner a disposición sus propios apple-app-sitio-asociación de archivo. Si el contenido servido por cada dominio es diferente, entonces el contenido del archivo cambiará también para apoyar a los respectivos caminos. De lo contrario, el mismo archivo se puede utilizar, pero debe ser accesible a cada dominio soportado.

    La firma de la Aplicación-Sitio-Asociación de Archivo

    Nota: puede omitir esta parte si su servidor utiliza HTTPS para servir contenido y saltar a la Aplicación de la guía de Configuración.

    Si su aplicación de los objetivos de iOS 9 y el servidor utiliza HTTPS para servir contenido, no es necesario firmar el archivo. Si no (por ejemplo, cuando el apoyo a la Transferencia en iOS 8), tiene que ser firmado con un SSL certificado de un certificado reconocido de la autoridad.

    Nota: Este no es el certificado proporcionado por Apple para presentar su aplicación a la App Store. Debe ser prestado por un tercero, por lo que se recomienda utilizar el mismo certificado que desee usar para su HTTPS servidor (aunque no es necesario).

    Para firmar el archivo, primero debe crear y guardar un simple .txt versión de la misma. 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. El example.com.key, example.com.pem, y intermediate.pem son los archivos que estaría disponible a través de su Autoridad de Certificación.

    Nota: Si el archivo no está firmado, debe tener un Content-Type de application/json. De lo contrario, debe ser application/pkcs7-mime.

    Validar su Servidor con la Aplicación de Apple de búsqueda de la herramienta de validación de

    Prueba de su página web para iOS 9 de Búsqueda de la Api. Introducir una dirección URL y Applebot de rastreo de tu web y mostrar cómo se puede optimizar para obtener los mejores resultados
    https://search.developer.apple.com/appsearch-validation-tool/

    Código De La Página Web

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


    De configuración de la Aplicación de iOS

    Aplicación de destino iOS 9 y estará usando Xcode 7.2 con Objective-C.

    Permitiendo Universal Enlaces

    La configuración de la aplicación se requiere de dos cosas:

    1. La configuración de la aplicación del derecho, y la habilitación de la universal de los enlaces.

    2. Manejo de Enlaces Entrantes en su AppDelegate.

    1. La configuración de la aplicación del derecho, y la habilitación de la universal de los enlaces.

    El primer paso en la configuración de su aplicación a los derechos de habilitarlo para su ID de Aplicación. Hacer esto en la de Desarrollador de Apple Centro de Miembros. Haga clic en Certificados, los Identificadores & Perfiles y, a continuación, los Identificadores. Seleccione su ID de Aplicación (crear primero si es necesario), haga clic en Editar y habilitar los Dominios Asociados derecho.

    Cómo apoyar Universal de los Enlaces en la Aplicación de iOS y configuración del servidor para que?

    Siguiente, obtener el ID de la Aplicación de prefijo y sufijo haciendo click en el respectivo ID de Aplicación.

    El ID de la Aplicación de prefijo y sufijo debe coincidir con el en la apple app-sitio-asociación de archivos.

    Siguiente en Xcode, seleccione la Aplicación de destino, haga clic en Capacidades y alternar los Dominios Asociados a On. Agregue una entrada para cada dominio que admite la aplicación, con el prefijo applinks:.

    Por ejemplo: applinks:vineetchoudhary.github.io

    Que tiene este aspecto para la aplicación de muestra:
    Cómo apoyar Universal de los Enlaces en la Aplicación de iOS y configuración del servidor para que?

    Nota: Asegúrese de que ha seleccionado el mismo equipo y entró en el mismo Paquete de ID de la Aplicación registrada de IDENTIFICACIÓN en el Centro de Miembros. Asegúrese también de que los derechos archivo está incluido en Xcode, seleccionar el archivo y en el Inspector de Archivo, asegúrese de que su destino está marcado.

    Cómo apoyar Universal de los Enlaces en la Aplicación de iOS y configuración del servidor para que?

    Manejo de Enlaces Entrantes en el AppDelegate

    [UIApplicationDelegate application: continueUserActivity: restorationHandler:] método en AppDelegate.m asas de enlaces entrantes. Analizar esta URL para determinar el derecho de acción en la aplicación.

    Por ejemplo, en la aplicación de ejemplo:

    Objective-C

    -(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;
    }  

    Swift :

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

    iOS Código de la Aplicación

    El código de la aplicación se puede encontrar en la rama master
    https://github.com/vineetchoudhary/iOS-Universal-Links/

    Nota:

    1. En general, cualquier enlace en Safari, o en los casos de UIWebView/WKWebView debe abrir la aplicación.
    2. Para iOS 9.2 y menos, esto sólo funciona en un dispositivo. iOS 9.3 (aún en versión beta en el momento de la escritura) también apoya el simulador.
    3. iOS recuerda la elección del usuario cuando la apertura Universal de los Enlaces. Si se pulsa en la parte superior derecha de la ruta de exploración para abrir el enlace en Safari, todos más clics que los llevará a Safari, y no la aplicación. Se puede volver a abrir la app por defecto, seleccionando Abrir en la aplicación de banner en el sitio web.

    Hecho. Es todo acerca de Universal Enlaces.


    Referencias

    1. Soporte Universal de Enlaces en su App de iOS
    • En HTTP necesita firmado por apple app-sitio-asociación de archivo. Para archivo firmado leer el punto Signing the App-Site-Association File o leer este post de aquí
    • Trataremos de que el día de mañana. la carga de un archivo firmado a los staging.domain.com en HTTP se debe trabajar, ¿verdad?
    • Sí…
    • Gran tutorial @VineetChoudhary, tengo una pregunta. ¿Qué pasaría si puedo abrir una url de Whatsapp, por ejemplo? ¿El Universal Enlace debería funcionar? Gracias!
    • Sí.. porque si cualquier aplicación intentado abrir una url externa, se debe llamar a [[UIApplication sharedApplication] openURL:] y creo que ese es el selector de donde Universal Links cosas implementado por Apple
    • Gracias @VineetChoudhary. He implementado Universal Enlaces en mi App, pero cuando intento abrir una URL de Whatsapp por ejemplo no funciona. Pero cuando abro la url de Safari funciona! Estoy confundido :/ Si usted tiene alguna sugerencia, se lo agradezco! Gracias de nuevo.
    • Como por Apple Universal de los Enlaces de la documentación -> Universal enlaces que iOS9 a los usuarios abrir la aplicación cuando se pulsa en los enlaces a su sitio web dentro de WKWebView y UIWebView vistas y Safari páginas, además de los enlaces que resultan en una llamada a openURL:, tales como los que ocurren en el Correo, los Mensajes y otras aplicaciones. Allí se han mencionado Call to openURL
    • Puede agregar su apple-app-sitio-asociación de archivo? @VineetChoudhary
    • usted puede encontrar aquí github.com/vineetchoudhary/iOS-Universal-Links/blob/gh-pages/…
    • Hola, he intentado hacer esto pero ,por desgracia, supongamos que mi aplicación no se puede instalar en IOS 9 dispositivo que tiempo acabo de leer el universal enlace en safari pero no es redirigir a la app store es descargar el archivo ,en realidad debería redirigir.Cómo resolver esto?dónde me he equivocado?
    • funciona si la aplicación no está en la tienda de apple ?
    • Sí, va a funcionar
    • Gracias por este increíble tutorial.
    • Gracias @VineetChoudhary Por esta gran respuesta. Todavía tengo una pregunta, tengo un sitio accesible a través de HTTPS, con el auto de certificados firmados, con la aplicación de-sitio-asociación de archivo en la carpeta raíz. Pero aún no funciona. Así que estaba pensando en el certificado autofirmado que puede estar causando el problema. ¿qué te parece ?
    • Nunca he intentado universal vínculos con certificado autofirmado. Puedes probar con github pages pages.github.com o base avanzada de hosting firebase.google.com/docs/hosting
    • Muchas gracias. Pero me están diciendo que podemos recibir a la asociación de archivos en un servidor que es diferente de la que será en los enlaces que redireccionen al usuario a la app ??
    • sólo para propósitos de prueba
    • Increíble tutorial de hombre. Gracias. Me faltaba la applinks: palabra clave antes de que el nombre de dominio.
    • Swift 3 AppDelegate firma de método – func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool
    • Si estoy usando iOS 10 y Xcode 8.3.2 entonces ?
    • sí, va a funcionar, pero trate de en dispositivo físico con el perfil de suministro de distribución.
    • Tengo el iPhone 5s y el perfil de distribución también. Pero no estoy recibiendo en realidad. stackoverflow.com/questions/46055847/…
    • Mi objetivo no es establecer para los derechos archivo y no se puede establecer la misma. al hacer clic sobre él no hace nada. Cualquier ayuda se agradece.
    • ¿Es un trabajo en desarrollo a construir o tiene que cargar en la prueba beta ?
    • Cómo podemos hacer universal vínculo de trabajo con el perfil de desarrollo? Estoy instalando la aplicación en modo de depuración de xcode y universal, el enlace no funciona, pero funciona bien si puedo instalar la aplicación desde la app store, alguna ayuda?

  2. 1

    Si completa todos los de Vineet el post y aún así no funciona, pruebe a utilizar un perfil de suministro de distribución. Hice todo lo del post anterior, pero tuvo que emitir un perfil de distribución con el fin de hacer que funcione.

    Con el perfil de desarrollo de la aplicación se ha descargado correctamente el AASA archivo, pero nunca abrir mi aplicación cuando estaba pulsando los enlaces.

    Espero que ayude.

    • Podría ser otra sugerencia útil. ¿Se emplean manual de la firma, en lugar de marcar la casilla en «administrar Automáticamente la firma» en la Ficha General y vamos a Xcode hacer la firma de instalación para usted?
    • De forma manual. Hemos encontrado que el perfil de suministro incorrectamente se ha generado. Hemos añadido la TeamID para el aprovisionamiento de ID de perfil, que se tradujo en un doble prefijo. Quitando que en realidad se fija el error, no importa desarrollar o perfil de distribución. Usted podría tratar mediante la generación de un perfil independiente con un ID exclusivo sólo para pruebas. Después de que asegurarse de que el ID de paquete en Xcode es el mismo como el uno en el perfil y manualmente señal de que.
    • ¿Es un trabajo en desarrollo a construir o tiene que cargar en la prueba beta ?
  3. 0

    Aquí está el código para el manejo de universal enlaces en Swift 3+, basado en la respuesta por 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
    }

Dejar respuesta

Please enter your comment!
Please enter your name here