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.
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..
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..
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".
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 ".
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.
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.
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ó..
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!
Pros:
Abra nuestra aplicación de iPhone
Contras:
Cuando no usar esquemas de URL:
Recursos: