2010-06-15 32 views
5

¿Cómo se puede detectar si Safari ha sido deshabilitado por los controles parentales en el iPhone? Sé que es posible porque la aplicación X3Watch se niega a funcionar hasta que Safari se desactive. Por lo que puedo ver, no hay API para los controles parentales, entonces, ¿qué técnica se puede usar para esto?Cómo detectar si Safari está deshabilitado en el iPhone

Respuesta

4

No he probado esto, pero es OS3.0 y posterior, puede detectar si una URL puede ser abierta por cualquier aplicación en el sistema usando [[UIApplication sharedApplication] canOpenURL:myURL]. Apuesto a que devolverá NO si Safari está deshabilitado.

+0

Sí, lo probé y tienes razón. ¡Gracias! – zorro2b

+2

¿Esto todavía funciona? Intenté esto en iOS 6 (iPad 3), pero devuelve SÍ incluso si Safari está deshabilitado en Restricciones. Sin embargo, si realmente llamo a openURL :, Safari NO se abre cuando está deshabilitado, como se esperaba. – Michael

+2

Para responder a mi propia pregunta: [link] (http://stackoverflow.com/questions/12771177/uiapplications-canopenurl-openurl-return-misleading-result) – Michael

0

Aquí está mi intento de incluir la solución a esto en un controlador de vista. Deben utilizarse los dos bools porque un usuario puede abrir un programa externo independientemente de safari cuando se carga la vista, pero el botón que necesita safari aún no se ha abierto.

@implementation ViewController { 
@private BOOL externalProgramOpened; 
@private BOOL buttonPressed; 
} 

-(void) setExternalProgramOpened { 
    // Only set to yes if we're trying to open safari 
    if(buttonPressed) { 
     externalProgramOpened = YES; 
    } 
} 

-(void) notifyUserOfRestrictedAccess { 

    if(externalProgramOpened == NO) { 
      [[[UIAlertView alloc] initWithTitle:@"Safari Needs to be enabled!" 
            message:@"It looks like the Safari browser is 
               disabled. Please enable it 
               (Settings>General>Restrictions) in order to 
               continue." 
            delegate:nil 
          cancelButtonTitle:@"Ok" 
          otherButtonTitles: nil] show]; 
    } else { 
     externalProgramOpened = NO; 
    } 

    buttonPressed = NO; 
} 

-(void) viewWillAppear:(BOOL)animated { 
    externalProgramOpened = NO; 
    buttonPressed = NO; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(setExternalProgramOpened) 
              name:UIApplicationWillResignActiveNotification 
              object:nil]; 
} 

-(void) viewWillDisappear:(BOOL)animated { 

    [[NSNotificationCenter defaultCenter] removeObserver:self 
              name:UIApplicationWillResignActiveNotification 
              object:nil]; 
    [super viewWillDisappear:animated]; 

} 

- (IBAction)buttonPressed:(id)sender { 
    buttonPressed = YES; 

    NSString * URL = *someURL*; 

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]]; 

    [self performSelector:@selector(notifyUserOfRestrictedAccess) withObject:self 
       afterDelay:.75]; 
} 
Cuestiones relacionadas