Crea una aplicación iMessage en iOS 10

Introducción

Con iOS 10, Apple ha abierto la aplicación de Mensajes a desarrolladores externos a través de una nueva función llamada aplicaciones de iMessage. Los desarrolladores ahora pueden crear sus propios tipos de aplicaciones, desde paquetes de adhesivos hasta interfaces totalmente interactivas, que crean contenido en línea de iMessage.. 

En este tutorial, te presentaré el nuevo marco de Messages y te mostraré cómo crear tus propias aplicaciones iMessage..

Este tutorial requiere que esté ejecutando Xcode 8 en OS X El Capitan o posterior y asume que se siente cómodo al crear una aplicación iOS basada en UIKit. Si aún está comenzando con el desarrollo de iOS, consulte la serie de tutoriales iOS From Scratch With Swift. A lo largo de esa serie, aprenderá cómo comenzar a desarrollar para la plataforma iOS con artículos y tutoriales detallados.. 

1. Ecosistema

El ecosistema de la aplicación iMessage comienza con una App Store completa a la que los usuarios pueden acceder a través de la aplicación Mensajes. Esta tienda está completamente separada de la tienda de aplicaciones regular de iOS y mostrará solo las aplicaciones relacionadas con iMessage.

Las aplicaciones de iMessage existen como extensiones de las aplicaciones regulares de iOS, similares a las extensiones de fotos y los teclados personalizados. La diferencia clave es que, dado que la tienda de aplicaciones iMessage existe por sí misma dentro de la aplicación Messages, puede crear una aplicación iMessage sin tener que crear una aplicación iOS que se muestre en la pantalla de inicio del usuario; La aplicación iMessage se crea como una extensión de una aplicación de iOS efectivamente en blanco e invisible. Sin embargo, es importante tener en cuenta que, por supuesto, si desea desarrollar una aplicación iOS o iMessage, puede crear una extensión iMessage como cualquier otro tipo de extensión..

Por último, aunque las aplicaciones de iMessage solo estarán disponibles en iOS, su contenido seguirá siendo visible en dispositivos macOS y watchOS. Además, los usuarios de watchOS 3 podrán ver sus pegatinas recientemente usadas y enviarlas a sus contactos directamente desde un Apple Watch..

2. Paquetes básicos de pegatinas

Para las personas que solo desean crear un paquete de adhesivos de iMessage rápido y fácil, Xcode proporciona una plantilla para hacerlo sin tener que escribir ningún código. Esta será una gran herramienta para permitir que los artistas gráficos sin conocimientos de programación puedan crear un paquete de pegatinas..

Al utilizar el nuevo marco de Mensajes para crear un paquete de pegatinas, puede crear pegatinas pequeñas, medianas o grandes. Este tamaño, sin embargo, se aplica a todos los adhesivos en su paquete. Solo necesita proporcionar el tamaño de imagen más grande para cada etiqueta en su paquete, y el sistema reducirá la escala de sus imágenes cuando se muestren en otros dispositivos.

Si bien no se aplica estrictamente, estos son los tamaños de archivo que Apple recomienda para sus paquetes de pegatinas:

  • Pequeño: 100 x 100 pt @ escala 3x (imagen de 300 x 300 píxeles)
  • Medio: 136 x 136 pt @ escala 3x (imagen de 378 x 378 píxeles)
  • Grande: 206 x 206 pt @ escala 3x (imagen de 618 x 618 píxeles)

Sin embargo, existen algunas limitaciones para las imágenes que puede utilizar en sus paquetes de pegatinas:

  • Las imágenes no pueden tener más de 500 KB en tamaño de archivo.
  • Las imágenes no pueden ser más pequeñas que 100 x 100 pt (300 x 300 píxeles).
  • Las imágenes no pueden ser más grandes que 206 x 206 pt (618 x 618 píxeles).
  • Los archivos de imagen deben tener formato PNG, APNG, JPEG o GIF; Se recomienda PNG para adhesivos estáticos y APNG para animados porque manejan el escalado y los fondos transparentes mucho mejor que JPEG y GIF respectivamente.

Abre Xcode y crea un nuevo proyecto. Bajo la iOS> Aplicación En la sección, verás que ahora hay opciones para Aplicación iMessage y Aplicación de Paquete de Pegatinas proyectos Para este primer ejemplo, seleccione la Aplicación de Paquete de Pegatinas modelo:

Si está siguiendo la pauta y desea que se usen algunos elementos adhesivos en su aplicación, puede descargarlos de la Etiquetas engomadas de la aplicación iMessage Carpeta del tutorial GitHub repo..

Verá en la barra lateral izquierda de Xcode que ahora tiene un Pegatinas.xcstickers Catálogo de activos en su proyecto. Esta carpeta contendrá el ícono de la aplicación iMessage y todos los adhesivos en su paquete. Agregar etiquetas adhesivas a su aplicación es tan fácil como arrastrarlas a la Paquete de Pegatinas carpeta de su catálogo de activos.

Tenga en cuenta que si desea agregar una pegatina animada utilizando una serie de imágenes, puede hacer clic derecho en su Paquete de Pegatinas carpeta y elige la Añadir activos> Nueva secuencia de adhesivos opción. Con esto en su paquete de pegatinas, puede arrastrar para reordenar marcos individuales.

Por último, con su catálogo de activos abierto, si va a la Inspector de atributos en la barra lateral derecha de Xcode, puede cambiar el nombre de su paquete de pegatinas y también el tamaño de la etiqueta que está usando.

Probando tu paquete de pegatinas

Para probar el paquete de pegatinas, simplemente presione el botón de reproducción en la esquina superior izquierda de Xcode o presione Comando-R en tu teclado Una vez que el simulador se haya iniciado, Xcode debería presentarle el siguiente menú.

Escoger Mensajes y luego haga clic en el correr botón. Una vez que el simulador ha lanzado el Mensajes aplicación, presione el botón de la tienda de aplicaciones en la parte inferior de la pantalla para acceder a sus aplicaciones de iMessage. 

Tu paquete de pegatinas debería aparecer inicialmente, pero si no lo hace, deslízalo hasta que lo alcances. Una vez que la aplicación se haya cargado, debería ver los dos adhesivos que agregamos disponibles para usar y enviar. 

Al tocar en cualquiera de estos adhesivos se agregará al mensaje actual, y desde aquí puede presionar enviar.. 

Como puede ver, es muy rápido y fácil crear paquetes de pegatinas para iMessage en iOS 10 sin necesidad de utilizar ningún código.. 

3. Aplicaciones de calcomanías personalizadas

Para algunos casos de uso, la funcionalidad muy básica proporcionada por la plantilla de aplicación de etiqueta básica puede no ser suficiente. Debido a esto, Apple también proporciona una forma de crear una aplicación de paquete de pegatinas más personalizada. Si quieres seguir adelante, crea un nuevo proyecto llamado CustomStickerPack como se muestra al comienzo de este tutorial, pero esta vez elija el Aplicación iMessage modelo. 

Una vez que Xcode haya creado tu proyecto, verás que ahora tienes carpetas similares a las de una aplicación de iOS con un complemento adicional. MensajesExtensión carpeta. La parte superior CustomStickerPack carpeta simplemente contiene un catálogo de activos y Info.plist archivo para su aplicación de iOS "en blanco". Es importante que proporcione todos los íconos de aplicaciones del tamaño correcto en este catálogo de activos porque iOS aún lo usará para cosas como la configuración de uso de almacenamiento del usuario.

La carpeta que vamos a enfocar es la Extensión de mensaje Carpeta, que por el momento contiene los siguientes archivos:

  • MensajesViewController.swift que es el controlador de vista raíz para la interfaz de usuario de su aplicación iMessage
  • MainInterface.storyboard donde puedes diseñar la interfaz de tu aplicación fácilmente
  • Assets.xcassets que contiene los archivos de iconos de su aplicación iMessage, así como cualquier otro activo de imagen que necesite utilizar en su interfaz
  • Info.plist para los valores de configuración de su extensión

Para nuestra aplicación de etiqueta personalizada de ejemplo, solo vamos a crear nuestra interfaz mediante programación utilizando el nuevo MSStickerBrowserViewController clase.

Abre tu MensajesViewController.swift archivo, y en primer lugar verá que su MensajesViewController clase es una subclase de MSMessagesAppViewController, que en sí es una subclase de UIViewController. Esto significa que todo UIKit está disponible para que lo use en sus aplicaciones iMessage. 

los MSMessagesAppViewController class proporciona muchos métodos de devolución de llamada que puede anular para personalizar aún más la funcionalidad de su aplicación, pero no tenemos que preocuparnos por esto en este tutorial. Por ahora, simplemente edite su definición de clase para que su clase se ajuste a la MSStickerBrowserViewDataSource protocolo:

clase MessagesViewController: MSMessagesAppViewController, MSStickerBrowserViewDataSource …

Antes de que podamos mostrar nuestros adhesivos, debemos agregar los archivos a nuestro proyecto y cargarlos. Arrastre los archivos de imagen que usamos anteriormente en este tutorial a su proyecto y asegúrese de que se agreguen a la MensajesExtensión objetivo. Los archivos deben agregarse al destino en lugar de a un catálogo de activos porque de esa manera podemos cargarlos desde una URL, que es mucho más fácil cuando se trabaja con etiquetas personalizadas..

Una vez que haya agregado estos archivos, agregue el siguiente código a su MensajesViewController clase:

var stickers = [MSSticker] () func loadStickers () para i en 1 ... 2 if let url = Bundle.main.urlForResource ("Sticker \ (i)", withExtension: "png") do let sticker = intente MSSticker (contentsOfFileURL: url, localizedDescription: "") stickers.append (sticker) catch print (error)

Con este código simplemente creamos un MSSticker matriz para almacenar nuestros adhesivos y una función para cargarlos desde el almacenamiento local.

A continuación, agregue el siguiente método a su clase:

func createStickerBrowser () let controller = MSStickerBrowserViewController (stickerSize: size: .large) addChildViewController (controller) view.addSubview (controller.view) controller.stickerBrowservasupas.as. (equalTo: controller.view.topAnchor) .isActive = true view.bottomAnchor.constraint (equalTo: controller.view.bottomAnchor) .isActive = true view.leftAnchor.constraint (equalTo: controller.view.leftAnchor). isActive = true view .rightAnchor.constraint (equalTo: controller.view.rightAnchor) .isActive = true

Con este código, creamos una instancia del MSStickerBrowserViewController Clase y agregue esto como un elemento secundario del controlador de vista raíz además de restringirlo a la altura y el ancho disponibles. 

A continuación, necesitamos implementar los requisitos MSStickerBrowserViewDataSource Métodos para proporcionar la información necesaria de la etiqueta. Para hacerlo, agregue los siguientes métodos a su código:

func numberOfStickers (en stickerBrowserView: MSStickerBrowserView) -> Int return stickers.count func stickerBrowserView (_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker return stickers [index]

Por último, para que todo nuestro código se ejecute realmente, reemplace su viewDidLoad Método con lo siguiente:

anular func viewDidLoad () super.viewDidLoad () loadStickers () createStickerBrowser ()

Ejecute su aplicación tal como lo hicimos anteriormente (recordando que es posible que tenga que desplazarse para llegar a la aplicación correcta), y una vez que todo haya terminado de cargar, debería ver una pantalla idéntica a la anterior, excepto ahora con un fondo azul:

En este tutorial, solo cargamos imágenes de calcomanías locales en nuestra aplicación personalizada para simplificar. Sin embargo, una de las principales ventajas de usar una aplicación de etiqueta personalizada es que puede cargar imágenes de etiqueta desde un servidor remoto e incluso, mediante el uso de otros controladores de vista antes de mostrar su MSStickerBrowserViewController, Deja que tus usuarios creen sus propias pegatinas. 

4. Aplicaciones personalizadas

En la última parte de este tutorial, vamos a crear una aplicación iMessage muy básica para crear un mensaje único.. 

Si quieres seguirlo, abre Xcode y crea otro. Aplicación iMessage llamado MessageApp. Abre tu MainInterface.storyboard y en el controlador de vista que se muestra, elimine la etiqueta predeterminada y agregue un paso a paso y un botón como se muestra:

Tenga en cuenta que para que su aplicación iMessage aparezca correctamente en todos los tamaños de dispositivos, deberá implementar el diseño automático en sus interfaces. En este ejemplo, he restringido el paso a paso al centro del controlador de vista y el botón a la parte inferior.

A continuación, abre la Inspector de atributos con su paso a paso seleccionado y cambie sus valores mínimo y máximo a 0 y 10 respectivamente:

A continuación, abre la Editor asistente con tu MensajesViewController.swift archivo para crear y conectar una salida para su paso a paso y un retoque dentro de la acción para su botón:

@IBOutlet débil var paso a paso: ¡UIStepper! @IBAction func didPress (remitente del botón: AnyObject) 

Ahora es el momento de que escribamos un código. En primer lugar, debo presentarle algunas clases que son cruciales al crear una aplicación iMessage:

  • MSConversación: Representa la conversación actualmente abierta. Puede usar esta clase para manipular la transcripción de la conversación, por ejemplo, insertando mensajes u obteniendo el mensaje seleccionado actualmente.
  • MSMessage: Representa un solo mensaje, ya sea creado por usted para insertarlo en la conversación o ya existente en la conversación.
  • MSMessageTemplateLayout: Crea una burbuja de mensaje para que muestres tu mensaje personalizado. Como se muestra en la imagen de abajo, este diseño de plantilla tiene muchas propiedades y lugares para que pongas tu propio contenido para personalizar tus mensajes..

Es importante tener en cuenta que el ícono de su aplicación iMessage llenará el espacio en la parte superior izquierda de este diseño. Además, todas estas propiedades son opcionales, y al no proporcionar cadenas de subtítulos se eliminará la parte inferior del diseño.

Aun en tu MensajesViewController.swift archivo, agregue el siguiente método a su MensajesViewController clase:

func createImageForMessage () -> UIImage? let background = UIView (marco: CGRect (x: 0, y: 0, ancho: 300, altura: 300)) background.backgroundColor = UIColor.white () let label = UILabel (marco: CGRect (x: 75, y : 75, ancho: 150, altura: 150)) label.font = UIFont.systemFont (ofSize: 56.0) label.backgroundColor = UIColor.red () label.textColor = UIColor.white () label.text = "\ (Int (stepper.value)) "label.textAlignment = .center label.layer.cornerRadius = label.frame.size.width / 2.0 label.clipsToBounds = true background.addSubview (label) background.frame.origin = CGPoint (x: view .frame.size.width, y: view.frame.size.height) view.addSubview (background) UIGraphicsBeginImageContextWithOptions (background.frame.size, false, UIScreen.main (). scale) background.drawHierarchy (in: background.bounds , afterScreenUpdates: true) let image = UIGraphicsGetImageFromCurrentImageContext () UIGraphicsEndImageContext () background.removeFromSuperview () devolver imagen

Con este método, tomamos el valor actual del control deslizante y lo colocamos en una etiqueta circular. Luego renderizamos esta etiqueta (y su vista principal que contiene) en una UIImage Objeto que podemos adjuntar a nuestro mensaje..

A continuación, reemplace su didPress (botón :) Método con el siguiente código:

@IBAction func didPress (remitente del botón: AnyObject) if let image = createImageForMessage (), let conversation = activeConversation let layout = MSMessageTemplateLayout () layout.image = image layout.caption = "Stepper Value" let message = MSMessage () message .layout = layout message.url = URL (string: "emptyURL") conversation.insert (message, completedHandler: (error: NSError?) en la impresión (error))

Verá que con este código, primero creamos el diseño del mensaje y configuramos el imagen y subtítulo propiedades A continuación, creamos nuestro MSMessage Objeto para insertar en la conversación.. 

Tenga en cuenta que para que iMessage procese su mensaje personalizado correctamente, debe establecer un diseño y url por tu mensaje Este URL está destinado a enlazar a una página web de algún tipo donde los usuarios de macOS también pueden ver su contenido personalizado de iMessage. Para este ejemplo simple, sin embargo, acabamos de crear una url básica a partir de una cadena. 

Por último, insertamos el mensaje en la conversación activa actual. Sin embargo, llamar a este método en realidad no envía el mensaje, sino que coloca el mensaje en el campo de entrada del usuario para que puedan presionar el envío..

Cree y ejecute su nueva aplicación una vez más, y verá una interfaz similar a la siguiente:

Una vez que presionas el Crear un mensaje botón, también debería ver la burbuja de diseño del mensaje que se muestra en el campo de entrada y está disponible para enviar:

Conclusión

En este tutorial, te presenté el nuevo marco de Messages en iOS 10, que te permite crear paquetes de pegatinas y aplicaciones para integrar con iMessage. Cubrimos las clases básicas que necesita conocer, incluyendo MSStickerBrowserViewController, MSConversación, MSMessage, y MSTemplateMessageLayout

El marco de Mensajes proporciona API para brindarle una gran cantidad de control sobre sus aplicaciones de iMessage. Para más información, recomendaría revisar la Referencia del marco de mensajes de Apple..

Como siempre, asegúrese de dejar sus comentarios y opiniones en la sección de comentarios a continuación.