widgets tiempo reloj poner pantalla como bloqueo bateria aparece ios ios8 ios-app-extension today-extension

ios - tiempo - widgets iphone 6



Widget de extensión de la aplicación Hoy Toque para abrir la aplicación que contiene (5)

EDIT: Ok, sólo una pequeña corrección aquí. Lo conseguí trabajando con la colocación de un botón sobre la etiqueta tal como se sugirió anteriormente y el siguiente código:

- (IBAction) goToApp: (id)sender { NSURL *url = [NSURL URLWithString:@"floblog://"]; [self.extensionContext openURL:url completionHandler:nil]; }

Lo vinculé a un evento "Retocar el interior". Sin embargo, esto también hace que la aplicación se inicie cuando el usuario desplaza la vista Hoy.

========================================

Me encontré con el mismo problema. Sin embargo, parece que no hay una solución por ahora, ya que las notas de la versión para la primera versión beta de iOS 8 mencionan:

Problemas conocidos: openURL no funciona desde una extensión.

Así que supongo que al menos tendremos que esperar hasta la beta 2.

He implementado un widget de Hoy para mi aplicación + Cotizaciones que muestra la cotización del día en el centro de notificaciones con la ayuda de estos documentos de Apple . Lo que me gustaría lograr es abrir la aplicación que contiene, en este caso, Cotizaciones, cuando el usuario toca el widget de Cotizaciones en su vista de notificación Hoy, sin estar completamente seguro de cómo llamar a esto, como lo haría el Calendario si lo pulsara en la Vista de hoy He intentado superponer un botón sobre la etiqueta que llamaría -(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler al presionarlo, luego abrir el Esquema de URL personalizado que tengo declarado para abrir la aplicación que contiene. El problema es que no abre la aplicación que contiene.

-(IBAction)myButton:(id)sender { NSURL *customURL = [NSURL URLWithString:@"PositiveQuotes://"]; [self openURL:customURL completionHandler:nil]; }


La respuesta de @sunseeker es la buena, pero está "oculta" en los comentarios. Y como la respuesta aceptada dice que esto no es posible, puede confundir a los visitantes.

este código funciona:

- (IBAction)launchHostingApp:(id)sender { NSURL *pjURL = [NSURL URLWithString:@"hostingapp://home"]; [self.extensionContext openURL:pjURL completionHandler:nil]; }

Estoy usando Xcode 6.0 (6A215l) con Yosemite Beta 1.

Y como dice Apple en Handling Commons Scenarios :

Una extensión no le dice directamente a su aplicación que contiene que se abra; en su lugar, utiliza el método openURL: completedHandler: de NSExtensionContext para decirle al sistema que abra su aplicación contenedora. Cuando una extensión utiliza este método para abrir una URL, el sistema valida la solicitud antes de cumplirla.


Otra forma de hacer esto sin agregar un botón oculto es agregar un UITapGestureRecognizer en el UILabel (asegúrese de establecer userInteractionEnabled en true en la etiqueta). Verifique el estado del reconocedor en el controlador para asegurarse de que alcanzó UIGestureReconizerStateEnded (y no Cancelado o Error) y luego ejecute el código openUrl.


Por si acaso, aquí está la versión para Swift 3 con la versión de manejo de errores:

let myAppUrl = URL(string: "main-screen:")! extensionContext?.open(myAppUrl, completionHandler: { (success) in if (!success) { print("error: failed to open app from Today Extension") } })

Para que funcione, necesita abrir el archivo de información de la aplicación (abrir como código fuente) y, en la parte superior, después de esto.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict>

agregue lo siguiente, para que la aplicación sepa qué URL debe manejar. Este es el ejemplo completo de cómo abrir la aplicación que contiene y compartir los valores predeterminados del usuario entre la aplicación y la extensión.


Versión Swift 2, según Apple Doc.

extensionContext?.openURL(NSURL(string: "foo://")!, completionHandler: nil)

Versión Swift 3

extensionContext?.open(URL(string: "foo://")! , completionHandler: nil)

Y no olvide agregar esquemas de URL personalizados en Info.plist