Tengo que revisar porque me esta saliendo el siguiente mensaje de error cuando envío la version de mi app a TestFlight "Invalid Siri Suport -No example provided for INGetRideStatusIntent in the en-CO language"....
He agregado las posibles traducciones a mi archivo de internacionalización de mi app pero esto no ha dado resultado tender que seguir revisando...
Creo que encontre la solución, debo agregar las traducciones dentro del archivo infoPlist.string, este es el archivo que maneja las internacionalización para cualquier testo dentro del archivo info.plist.
Lo anterior funciona unicamente para el archivo info.plist, para el archivo AppIntentVocabulary.plist debo crear la localización propia por medio del botón Localized que existen en el panel Inspector de Xcode, con esto agrego todos los lenguajes que necesito y asigno las posibles traducciones.
Solucionado! ^_^
miércoles, 7 de septiembre de 2016
Localized info.plist
Etiquetas:
AppIntentVocabulary,
Apple,
iOS,
iPhone,
SiriKit
Ubicación:
Bogotá, Bogota, Colombia
martes, 6 de septiembre de 2016
iOS 10 - Integrando SiriKit
Integrando SiriKit
Inicie leyendo la documentación publicada en el sitio de desarrolladores de apple sobre SiriKit y me encontré con muchas dudas al respecto.
En el inicio explican que Siri funciona con un grupo restringido de domains (dominios) los cuales hace que Siri solo funcione para ciertos tipos de peticiones o integración con aplicaciones que funcionan de manera especifica. Los únicos domains que están disponibles por el momento son los siguientes:
- VoIP calling
- Messaging
- Payments
- Photo
- Workouts
- Ride booking
- CarPlay (automotive vendors only)
- Restaurant reservations (requires additional support from Apple)
Cada uno de estos domains utiliza el mismo flujo el cual esta definido en tres pasos, resolve, confirm y handle.
Primero tengo que crear un nuevo Target para Siri, afortunadamente la nueva version de Xcode soluciona el problema de forma automática de crear provisioning profiles y la firma de certificado de este nuevo Target lo cual me quita un problema de encima.
Ahora debo configurar los Intents que soportare dentro de mi app, en este caso serán solo dos correspondientes al domain Ride booking que serán
Debo agregar estos dos Intent al archivo .plist de mi nuevo Target para Siri dentro del diccionario NSExtension->NSExtensionsAttributes->IntentsSupported
INRequestRideIntent -> con este puedo manejar las peticiones de solicitud de taxis
INGetRideStatusIntent -> con este manejare las consultas del estado de taxis
Ahora debo empezar con la implementación de la lógica necesaria para que mi app responda a las peticiones que llegue desde Siri
Cuando cree el nuevo Target para Siri se creo una clase llamada IntentHandler la cual es el punto de entrada de las peticiones.
Debo crear dos clases mas y redireccionar el flujo a cada una según corresponda, esto lo puedo hacer desde el método -(void)handlerForIntent: que tiene la clase IntentHandler.
La primera clase que voy a crear sera RequestRideBookingHandler la cual implementará los métodos necesarios del protocolo INRequestRideIntentHandling
Ahora necesitare implementar primero el método -(void)resolvePickupLocationForRequestRide: en este realizaré la validación de la posición del usuario también consultare el reverse geocode para obtener los datos de la dirección y pasarlos dentro del objeto CLPlacemark, en dado caso que no pueda obtener una ubicación del usuario valida tender que devolver uno de los posible resultados de error que me provee el api de SiriKit que seria [INPlacemarkResolutionResult needsValue].
Listo con esto ya tengo validad la primera parte de la petición (resolve), me he dado cuenta que este método se invoca cuando el usuario le pregunta a Siri "Pideme un auto con <App>".
por el momento no veo necesario utilizar la segunda parte del flujo que seria el "confirm".
Ahora si puedo empezar a implementar la parte de handle. Para esto voy a implementar el método -(void)handleRequestRide: este método recibe un objeto de tipo INRequestRideIntent con el cual puedo obtener la posición de recogida del usuario por medio de la propiedad pickupLocation el cual es un objeto de tipo CLPlacemark al cual le agregue información sobre el reverse geocode en el método de resolve anteriormente.
Ubicación:
Bogotá, Bogota, Colombia
Suscribirse a:
Entradas (Atom)