iOS SDK Trabajar con esquemas de URL

La comunicación entre aplicaciones le brinda a su aplicación la oportunidad de aprovechar la funcionalidad de otras aplicaciones, enviar y recibir datos entre aplicaciones y brindar una experiencia de usuario enriquecida que "simplemente funciona".

En este tutorial vamos a crear dos aplicaciones, una aplicación que envía datos y otra aplicación que recibe esos datos. Juntas, estas aplicaciones demostrarán esquemas de URL, un método para enviar y recibir datos entre aplicaciones. Este es un tutorial bastante avanzado con respecto a la comprensión de Xcode, y recomendaría encarecidamente que antes de comenzar este tutorial se sienta cómodo utilizando Xcode y Interface Builder..

Nota: se requiere un dispositivo físico para probar esta aplicación.

Paso 1: Creando un Proyecto Sender

Continuemos y creemos un nuevo proyecto de Xcode, seleccione? Ver Aplicación Basada. "Golpee a continuación. Nombre el proyecto? Remitente" e ingrese su Identificador de Compañía. Este proyecto albergará la aplicación que envía información a la aplicación? Receiver "que crearemos en breve..

Paso 2: Configurar las conexiones XIB y Interface Builder

Antes de configurar nuestro XIB, crearemos algunas declaraciones antes de tiempo.

En el panel de navegación izquierdo, abra SenderViewController.h y configúrelo así:

#importar  @interface SenderViewController: UIViewController IBOutlet UITextField * textBox;  - (IBAction) openMaps: (id) sender; - (IBAction) openYoutube: (id) remitente; - (IBAction) openReceiverApp: (id) sender; @ propiedad (no atómica, retener) IBOutlet UITextField * textBox; @fin

Al hacer esto, estamos declarando algunos métodos que serán llamados por UIButtons en el futuro y una variable que hace referencia a un UITextField. Estos elementos de la interfaz de usuario se agregarán a continuación.

Ahora, en el panel de navegación izquierdo, abra SenderViewController.xib y arrastre un UITextField y tres UIButtons desde el panel de utilidades del lado derecho. Apílelos verticalmente en la vista y cambie el nombre del primer botón para "Enviar texto a la aplicación del receptor", el segundo botón para "Abrir mapas" y el tercer botón para "Abrir YouTube". Su vista debería parecerse a la de la imagen de abajo..

Ahora, nuestro último paso es finalizar nuestras Conexiones de IB. Seleccione Propietario del archivo (el cuadro de la estructura metálica naranja) a la izquierda y luego, en el panel Utilidades a la derecha, elija la pestaña Inspector de conexiones (la flecha). Conectar caja de texto a la UITextField. A continuación, conecte openMaps:, OpenYoutube:, y openReceiverApp: a su respectivo evento "Touch Up Inside" por una línea de conexión desde el círculo a la derecha hasta los botones. Las conexiones deben ser similares a las que se muestran a continuación..

Paso 3: Abrir URLs para la comunicación

Para comenzar, abra el archivo SenderViewController.m desde el panel de navegación. Debajo @implementación Agregue la siguiente línea para sintetizar nuestra propiedad:

@synthesize textBox;

Asegurémonos también de seguir las reglas de administración de memoria correctas y de limpiar la retención que teníamos en nuestra propiedad, arriba [super dealloc]; añadir:

[versión de textBox];

Por último, en nuestro método viewDidUnload a continuación? [Super viewDidUnload]; "agregue:

self.textBox = nil;

Un breve resumen de los esquemas de URL es que los esquemas de URL permiten que las aplicaciones registren su propio protocolo para permitir la transferencia de datos. Algunos ejemplos comunes de protocolos que puede usar de manera regular son,? Http: // ",? Https: //", y? Ftp: // ". Por ejemplo, una aplicación de marcadores puede querer registrarse? Bookmark: // ", por lo que otras aplicaciones podrían marcar enlaces usando el esquema de URL,? bookmark: //www.envato.com". Las aplicaciones no pueden registrarse en el protocolo? http: // ", aunque algunas aplicaciones de Apple infringen esta regla y están registradas? http : // "para abrir aplicaciones como Maps, iTunes y YouTube. Nuestra aplicación Receiver se registrará para? readtext: // texthere". Podemos abrir estas URL llamando al método de UIApplication openURL:. Cuando usamos openURL: lanzará la aplicación especificada y le entregará los datos que proporcionó.

Agregue los siguientes métodos a su archivo SenderViewController.m:

-(IBAction) openMaps: (id) sender // Abre un mapa que contiene la aplicación UIA de la sede de Envato * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://maps.google.com/maps?ll=-37.812022,144.969277"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [nuestra aplicación openURL: ourURL];  - (IBAction) openYoutube: (id) sender // Abre un video de una aplicación UIA comercial para iPad 2 * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://www.youtube.com/watch?v=TFFkK2SmPg4"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [nuestra aplicación openURL: ourURL];  - (IBAction) openReceiverApp: (id) sender // Abre la aplicación Receiver si está instalada, de lo contrario muestra un error UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString * ourPath = [@ "readtext: //" stringByAppendingString: URLEncodedText]; NSURL * ourURL = [NSURL URLWithString: ourPath]; if ([ourApplication canOpenURL: ourURL]) [ourApplication openURL: ourURL];  else // Mostrar error UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ Mensaje "Receiver no encontrado": @ "La aplicación Receiver no está instalada. Debe estar instalada para enviar texto". delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; 

Estos métodos están utilizando el openURL Método de la aplicación UIA para enviar datos a otras aplicaciones. Apple ha registrado la aplicación Maps y la aplicación YouTube con? Http: // "esencialmente, por lo que simplemente llamamos openURL en esas URLs. Para crear nuestra URL, también utilizamos el stringByAddingPercentEscapesUsingEncoding: Método para garantizar que la cadena sea una URL válida, ya que la URL la codificará (la descodificaremos en nuestra aplicación Receiver). Para nuestra URL personalizada? Readtext: // "primero verificamos si el enlace se puede abrir con canOpenURL. Básicamente, esto verifica si la aplicación que está registrada en ese esquema de URL en particular está instalada, y si lo está, podemos abrir la URL con nuestro texto. Si la aplicación no está instalada, mostramos un mensaje de error. Recuerde que cuando publique su aplicación al público, es posible que el esquema de URL del que depende su aplicación no funcione porque la otra aplicación no está instalada. Siempre debes realizar el canOpenURL al abrir esquemas de URL no http: //.

Sigue adelante y crea y ejecuta la aplicación. Observe que los botones de Mapas y YouTube abren sus respectivas aplicaciones. Además, el botón "Texto enviado" devuelve un mensaje de error ya que aún no hemos creado nuestra aplicación "Receptor".

Paso 4: Crear una aplicación de Receiver

Cree un nuevo proyecto XCode y seleccione? Ver aplicación basada. "Golpear a continuación. Nombre el proyecto? Receptor" e ingrese su Identificador de compañía. Este proyecto albergará la aplicación que lee la información enviada por la aplicación? Sender ".

Paso 5: Registrar el esquema de URL personalizado

En Project Navigator, expanda el grupo Archivos de soporte y abra el archivo Receiver-Info.plist.

Puede agregar una nueva fila yendo al menú y haciendo clic en Editor> Añadir elemento. Configure un elemento de Tipos de URL agregando un nuevo elemento. Expanda la clave de Tipos de URL, expanda el Elemento 0 y agregue un nuevo elemento, "Esquemas de URL". Complete? Texto de lectura "para el Elemento 0 de? Esquemas de URL" y el identificador de su compañía para el "Identificador de URL". Su archivo debe parecerse a la imagen de abajo cuando termine.

Paso 6: Manejar la URL

Abra ReceiverAppDelegate.m y reemplace el aplicación: applicationDidFinishLaunchingWithOptions: Método con el siguiente código:

- Aplicación (BOOL): (UIApplication *) aplicación didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Punto de reemplazo para la personalización después del inicio de la aplicación. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; // Error de visualización si no hay una URL si (! [LaunchOptions objectForKey: UIApplicationLaunchOptionsURLKey]) UIAlertView * alertView; alertView = [[UIAlertView alloc] initWithTitle: @ "Error" message: @ "Esta aplicación se inició sin texto. Abra esta aplicación utilizando la aplicación Sender para enviar texto". delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release];  devolver SÍ; 

Esto alerta un error si la aplicación se abre sin una URL. Generalmente, si esto ocurre, cargaría su aplicación normalmente, pero por el bien de la experimentación mostraremos un error.

Agregue el siguiente código debajo de aplicación: applicationDidFinishLaunchingWithOptions: método.

- Aplicación (BOOL): (UIApplication *) aplicación handleOpenURL: (NSURL *) url // Texto de pantalla UIAlertView * alertView; NSString * text = [[url host] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; alertView = [[UIAlertView alloc] initWithTitle: @ "Text" message: text delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; devuelve SÍ; 

Este código alerta al usuario con el texto que envió la aplicación Sender cuando la aplicación se abre con una URL. En general, debe usar estos datos para realizar un seguimiento con una acción apropiada dentro de su aplicación. Observe que usamos el nombre de host de la URL para obtener nuestro texto. Hicimos esto porque el esquema de URL que registramos funciona como cualquier otro esquema de URL: //hostname/path/file.php? Variable = x # section "(Recuerde que nuestra URL era? Readtext: // text"). También URL decodificado el texto usando el stringByReplacingPercentEscapesUsingEncoding: método como anteriormente teníamos la URL codificada.

Paso 7: Probando la aplicación

Por fin ha llegado el momento de probar estas dos aplicaciones. Ambos deben ser construidos e instalados en un dispositivo iOS físico. Asegúrese de haber desconectado el dispositivo de la computadora cuando realiza la prueba y de haber cerrado la aplicación Receiver después de desconectarla para evitar problemas. Abre la aplicación Sender, escribe un texto y pulsa enviar. La aplicación del receptor debería abrirse y le pedirá el texto que escribió..

Conclusión

Si tiene éxito, ahora debería poder implementar fácilmente las comunicaciones entre aplicaciones utilizando esquemas de URL. Si tiene preguntas o comentarios, no dude en dejarlos en la sección de comentarios a continuación. Gracias por leer!

Información adicional y recursos

Pros:

  • No obliga al usuario a conectarse a una red, ni requiere recursos adicionales para el manejo del servidor web.
  • Un método simple, rápido y fácil de implementar la comunicación..
  • Proporcionar una interfaz de comunicación pública que CUALQUIER aplicación pueda aprovechar.
  • Abra su aplicación desde su sitio web utilizando una etiqueta de anclaje. Ex: Abra nuestra aplicación de iPhone

Contras:

  • A diferencia de otras plataformas como Android, el iPhone no crea una pila de acciones (back stacking en Android). Lo que esto significa es que si decide iniciar otra aplicación, su aplicación no se reanudará cuando el usuario salga de la aplicación que abrió..

Cuando no usar esquemas de URL:

  • Envío de datos sensibles al usuario, como combinaciones de nombre de usuario y contraseña. Nunca debes hacer esto; en su lugar, consulte la API de llavero.
  • Evite usar Esquemas de URL cuando pueda implementar la funcionalidad de otras aplicaciones interna y directamente, para evitar que su aplicación se cierre. Por ejemplo, ¿debería usar un esquema de URL para iniciar la aplicación Mapas cuando podría implementar Mapas en la aplicación? Dependiendo de la situación, es posible que tenga que hacerlo, pero en muchos casos es suficiente con abrir la aplicación de mapas.
  • Ninguna autenticación que los datos que ha enviado llegarán a la aplicación correcta o si se ha alcanzado en absoluto, a saber, por qué no se deben enviar datos confidenciales..

Recursos:

  • Referencia para desarrolladores de Apple (proporciona información sobre esquemas de URL y cómo iniciar aplicaciones de Apple con ellos)
  • Plantillas de aplicaciones móviles iOS en Envato Market