extension - cual es la extensión de ios
Comunicándose con/abriendo la aplicación que contiene desde la extensión Share (1)
Esto es lo que he intentado que NO ha funcionado:
- Usando openURL para intentar abrir la aplicación que contiene
Esto es lo que he pensado que no funcionaría:
- Usar notificaciones locales para proporcionar un enlace a la aplicación que lo contiene (creando la notificación local desde la extensión)
Estas son las opciones que estoy considerando:
- Usar un UIDocumentInteractionController y un tipo de extensión de archivo personalizado para proporcionar un enlace a mi aplicación contenedora (y solo a mi aplicación contenedora)
- Iniciar una sesión NSURL "falsa" para obtener la siguiente funcionalidad: en iOS, si su extensión no se ejecuta cuando se completa una tarea en segundo plano, el sistema inicia la aplicación que lo contiene en segundo plano y llama a la aplicación: handleEventsForBackgroundURLSession: completionHandler: método delegado de la aplicación .
Se ha confirmado que UIDocumentInteractionController funciona en Xcode 6.5, pero el flujo es un poco inestable. Lo de NSURL debería funcionar también, pero también es un poco sospechoso. ¿Alguien tiene alguna otra idea para abrir mi aplicación contenedora desde una extensión compartida o una idea para comunicarse con ella desde una extensión compartida?
He confirmado que el modo NSURLSession (segundo punto debajo de las opciones "considerar" arriba) sí funciona. Todavía estoy resolviendo algunos problemas, pero aquí están los fundamentos. Con este método, puedes abrir tu aplicación desde una extensión para compartir.
Este método requiere 3 pasos principales, de la siguiente manera:
- Haga un fondo NSURLSesión en una extensión compartida.
- Comience una tarea de descarga.
- Salida de llamada (0).
Asegúrese de que lo que está descargando tarda lo suficiente para que la extensión finalice antes de que finalice la descarga.
NSString *address = @"https://googledrive.com/host/0B5zObXR9UzgmbFpob2J5eXpjNXc/file3m";
self.mySession = [self configureMySession];
NSURL *url = [NSURL URLWithString:address];
NSURLSessionTask *myTask = [self.mySession downloadTaskWithURL:url];
[myTask resume];
exit(0);
Luego, en la clase UIApplicationDelegate de su aplicación contenedora, implemente la
application:handleEventsForBackgroundURLSession:completionHandler:
método. Se llama a este método cuando la tarea de descarga finaliza después de que se ha terminado su extensión. Entonces, en este método, puedes llamar
[[UIApplication sharedApplication] openURL:url];
o haga otras cosas en su aplicación que lo contiene.
El principal problema con este método es que hay un retraso entre el momento en que finaliza la extensión y el momento en que se inicia la aplicación que contiene. La principal ventaja de este método sobre el método UIDocumentInteractionController es que no se necesita interacción adicional del usuario. Más detalles vendrán mientras continúo experimentando.