terça-feira, 10 de julho de 2012

MVC4 - Mobile Display Mode

Oi de novo. Raro isso, duas postagens em um dia. Essa vai ser mais curta.

A segunda coisa que fui ver no MVC4 foi a parte de display mode. Agora você simplesmente cria uma view com o mesmo nome da original e .mobile antes da extensão e o MVC magicamente detecta se a requisição vem de um celular, e direciona para a view certa. Bom demais pra ser verdade?

Pois é. Criei a aplicação MVC4, criei minhas views, publiquei a aplicação no meu IIS para ver do celular. Tenho um android e meu browser é o firefox lá também. Não funcionou. Procurei a achei uma variável que retorna se é Mobile*. Trazia false.

Mas há uma solução para que você adicione seus próprios display modes. Vi que o user agent do meu browser no celular: "Mozilla 5.0 (Android; Mobile; rv:14.0) (...)". Coloquei no Global.asax, no Application_Start, como ensinado em vários sites:

    DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")
    {
        ContextCondition = (context => context.Request.UserAgent.IndexOf
            ("mobile", StringComparison.OrdinalIgnoreCase) >= 0)
    });

Funcionou. Chamou a view que tinha antes da extensão ".mobile". Agora, o celular da minha irmã, só para fazer um teste final... Não funcionou. A palavra mobile não está no user agent. Ela tem um samsung que não é android. O browser é o que veio com o próprio SO. Baixei novamente o browser que veio no meu android: Dolphin. Este possuía a palavra mobile na descrição.

Tentando evitar problemas, uma das soluções que achei é testar, além de mobile, mais alguns nomes de aparecem em celulares. Encontrei uma pequena lista neste artigo: http://www.add-digital.com.br/blog/como-acessar-a-versao-mobile-do-seu-site-atraves-do-javascript/. Caso o artigo saia do ar, aqui está a lista:

nokia, iphone, blackberry, sony, lg, htc_tattoo, samsung, symbian, SymbianOS, palm, series60, windows ce, android, obigo, netfront, openwave, mobilexplorer, operamini

So, that's all for now, folks!



* na view - ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice

Nenhum comentário:

Postar um comentário