Pergunta

Parece que o iOS 5.1 quebrou a codificação de URL padrão para navegar um usuário até uma preferência.

Por exemplo:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]];

Funciona no iOS 5.0, mas não no iOS 5.1 (dispositivo e simulador).

Alguém encontrou uma maneira de replicar essa funcionalidade no iOS 5.1?

Foi útil?

Solução

Não, não conheço uma maneira de replicar essa funcionalidade.

Mas o que você pode fazer é registrar um Radar solicitando a restauração. Aqui está um radar solicitando que os esquemas sejam documentados em primeiro lugar.

David Barnard confirmou que o iOS 5.1 quebra os esquemas de URL dos aplicativos de configurações.


Atualizar: iOS 8 tem funcionalidade semelhante para abrir as configurações do seu aplicativo.Obrigado Apple, Mike e Soto_iGhost.

A constante UIApplicationOpenSettingsURLString (Documentação do aplicativo UIA) abrirá as configurações do seu aplicativo e não, digamos, as configurações do Twitter.Não é exatamente a mesma funcionalidade, mas muito mais limpa do que antes e agora reconhecida oficialmente.

Isso deve ser ainda mais útil agora que cada aplicativo tem um lugar nas configurações para uso de privacidade, dados de celular, atualização de aplicativos em segundo plano e notificações.

Outras dicas

É um pouco complicado, consigo remover as subvisualizações em *TWTWeetComposeViewController*, então mostra apenas alerta quando o usuário não está logado e clicando no botão de configuração, podemos abrir a página de configuração no meu aplicativo.

     + (void)setAlertForSettingPage :(id)delegate 
    {
     // Set up the built-in twitter composition view controller.
        TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];


        // Create the completion handler block.
        [tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
            [delegate dismissModalViewControllerAnimated:YES];
        }];

        // Present the tweet composition view controller modally.
        [delegate presentModalViewController:tweetViewController animated:YES];
        //tweetViewController.view.hidden = YES;
        for (UIView *view in tweetViewController.view.subviews){
            [view removeFromSuperview];
        }

     } 

aqui, delegado é o seu viewcontroller, se você estiver usando este método dentro do seu viewcontroller, basta usar self em vez de delegate.

EDITAR: Se você receber algum erro obsoleto, use o seguinte código compatível com iOS6:

- (void)setAlertForSettingPage
{
    // Set up the built-in twitter composition view controller.
    SLComposeViewController *tweetViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

    // Present the tweet composition view controller modally.
    [self presentViewController:tweetViewController animated:YES completion:nil];
    for (UIView *view in tweetViewController.view.subviews){
        [view removeFromSuperview];
    }
}

você consegue fazer isso.

TWTweetComposeViewController *ctrl = [[TWTweetComposeViewController alloc] init];
                    if ([ctrl respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
                        // Manually invoke the alert view button handler
                        [(id <UIAlertViewDelegate>)ctrl alertView:nil
                                             clickedButtonAtIndex:0];
                    }

Se você olhar no framework do Twitter (aquele controlador de visualização do Twitter), ele contém "prefs:root=TWITTER", 5.1 também possui esta linha.Então provavelmente a Apple fez algo para desativá-lo para outros aplicativos, como alguma chave especial no plist ou o método "openURL" de alguma forma verifica se não é um aplicativo do sistema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top