Alguns amigos desenvolvedores me reportaram nos últimos tempos sobre uma falha nas requisições que seus aplicativos fazem para domínios externos através do método AJAX (http://api.jquery.com/jquery.ajax/).

De modo geral, essa falha se torna complexa, num primeiro momento, pois em testes dentro da IDE o aplicativo funciona corretamente, permitindo-nos acessar informações externas oriundas de domínios externos (API’s desenvolvidas para esse fim) mas quando o aplicativo é testado no dispositivo móvel a requisição simplesmente não funciona.

Como ouvi muitos relatos, procurei entender melhor o que estava ocorrendo e, após algumas pesquisas e testes, consegui encontrar a causa e consequentemente a solução.

CAUSA DO PROBLEMA

A plataforma Intel XDK irá desativar o modo de BUILD ‘Legacy Hybrid’, que nada mais é do que um modo de gerar instaladores do projeto de modo mais ‘rústico’, baseado no antigo AppMobi. Para tornar a geração de instaladores mais íntegro, a IDE Intel XDK está migrando seu BUILD para o modo ‘Cordoba Hybrid’, que possui muito mais vantagens, sendo uma delas a possibilidade de diminuir drasticamente o tamanho do pacote de instalação do aplicativo para ser publicado nas lojas (Play Store, App Store, etc.).

Porém, esse modo também precisa obedecer algumas regras próprias de BUILD do framework Cordova, pois este preocupa-se de modo abrangente com a segurança do aplicativo. É exatamente neste ponto que nosso erro ocorre, pois precisamos habilitar uma regra no Cordova (dentro do Intel XDK) que irá permitir nosso aplicativo acessar dados de domínios externos.

DOMÍNIOS EXTERNOS

Como disse anteriormente, o Cordova possui uma regra de segurança na qual restringe o acesso do aplicativo a informações de domínios externos, chamada Whitelist Domains.

Para mais detalhes a cerca desta regra, recomendo o amigo leitor olhar a documentação oficial do Cordova (https://cordova.apache.org/docs/en/4.0.0/guide_appdev_whitelist_index.md.html), pois assim poderá compreender melhor como esta regra afeta nosso aplicativo no que diz respeito ao acesso a dados externos e causa o erro que estamos tratando neste artigo.

 SOLUÇÃO

Para nosso aplicativo funcionar corretamente e acessar dados de domínios externos, tudo que precisamos fazer é, com a ferramenta Intel XDK aberta e nosso projeto selecionado, ir até a “PROJECTS”, e logo em seguida ir na seção de configurações do Cordova em “CORDOVA HYBRID MOBILE APP SETTINGS”. Dentro desta, teremos a opção “BUILD SETTINGS”, no qual iremos encontrar a opção de habilitar os domínios na Whitelist Domains, através do campo “Domain List”.

Veja na figura abaixo exatamente onde se encontra esse campo na ferramenta Intel XDK:

whitelist-domain

Agora, neste campo, tudo que precisamos fazer é adicionar a URL que irá acessar ou colocar “*” pra permitir acesso irrestrito aos dados de qualquer domínio.

Written by Diego Cavalca

Graduado em Análise e Desenvolvimento de Sistemas pela UNILINS em 2012, atualmente Mestrando em Ciência da Computação na Universidade Federal de São Carlos (UFSCar).

  • Existe uma falha na versão 4.1.2 do cordova combinado com o android kitkat (4.4) que mesmo liberando o acesso com o DomainList, a conexão via AJAX/REST falha. A solução que eu encontrei foi usar a versão 3.5 do cordova.

    • Janio A Pimentel

      Cara, como faço para usar a versão 3.5 no intel XDK?

      • Vinicius

        Como faz para fazer o Downgrade do Cordova? Obrigado!

        • Márcim André

          Uma vergonha o cara não poder mostrar as falhar do xdk

    • Wesly Lopes

      Olá!
      Estou com mesmo problema…
      Como faz para fazer o Downgrade do Cordova?

  • Pingback: Diego Cavalca - Parte 5 – Criando o aplicativo mobile e integrando dados via API()

  • Janio A Pimentel

    Diego, boa noite!

    Realizei os passos da acima (inclusão do domínio na Whitelist) e mesmo assim a aplicação não funciona dentro do aparelho com Android, já na aba EMULATE funciona perfeitamente. Testei na rede local como em um domínio externo e todos os dois casos dá falha na conexão (dentro do android). O que acha que está acontecendo?

    Janio Pimentel

    • Janio A Pimentel

      Achei o problema, era mesmo a versão do cordova 4.1.2. Voltei para 3.5 como indicado pelo Moacir e deu certo. Obrigado.

      • Sebastian

        Puse en version 3.5 pero no me funciono el GPS en Android que puedo hacer?

  • Sebastian

    No me funciona en Android que puedo hacer?

    • Márcim André

      Vai ETUDENT ENTÃO
      Ajax não está aceito agora

  • Sebastian

    Gps para IOS funciona pero para Android NO

  • intercambian

    Bom dia, eu to usando a nova versão do intelxdk, e essa função do Whitelist pro AJAX funciona não funciona de forma nenhuma, alguém poderia me ajudar ?

    • Marcelo

      Cara, estou com o mesmo problema. Você conseguiu solução?

      • intercambian

        Amigo, quando for gerar pra Android usa sempre o Crosswalk,

      • Márcim André

        Ajax Parou agora …

        tenho monte de app !!!!!!!!Aqui

  • Luis Gustavo Leal

    Ola Srs, alguem consegui fazer o ajax funcionar? estou usando a versao 3240 do XDK, mas esse erro persiste.
    Existe uma alternativa?
    Abs a todos

    skype: lgmlleal

    • Márcim André

      O erro está no cordova

    • acoliveira

      Use csp tambem

  • Márcim André

    Está defasado agora.
    Ajax e cordova precisa de muitas aulas

  • Márcim André

    entrei para pagar o curso mas sem resposta

  • Márcim André

    xdk com acesso em ajax ainda está em corvoda e eles não querem WIN

  • Márcim André

    Melhor tirar o post é uma vergomha

  • Márcim André

    Sem resposta mesmo.
    ajax simples não é aceito.
    Agora vamos CSP????

  • Márcim André

    Vamos para HIBRIDO mesmo pois bug tá de monrte……

  • Márcim André

    Ajax foi tirada sem comando
    cordova com erros:

  • Márcim André

    Site fraco até para contatos né?????????????????????????????????

  • Márcim André

    Cordova e ajax ainda não deu certo por eles viu….

  • acoliveira

    Meu funcionou em um projeto teste e quando fui passar no projeto real não funcionou no init-dev mas funcionou no init-app, mas estragou o crosswalk com viblast +hls. Ontem atualizei o xdk e vou voltar versão com o crosswalk funcionando e vou repassar um a um as mods.

  • Márcim André

    ALguem conseguiu solucionar o problema nas requisições ajax com xdk?
    Não consigo já fiz todas as configurações que a documentação pede mas não funciona.
    No emulador tudo vai bem mas depois de compilado não funciona as requisições.

  • Márcim André

    Agora na versão 3641 do XDK o link do ajax pode ser local.
    Melhorou bastante a performance dos APP .

  • Marcio Santos

    Alguma solução para a forma correta de acessar domínios externos… Aqui não funciona de jeito nenhum, nem no SIMULATE e nem no TEST.
    Já fiz tudo que foi pedido quanto add um config.xml e adicionei as … MAS NADA!! Não Roda! Help me. Valeu

  • Lucas Linhares

    Estou usando a versão 3900 do Intel XDK, configurei a API e consigo trazer os dados, está funcionando perfeitamente no Simulate, porém quando exporto o APK ele não carrega os dados. Já adicionei o domínio na whitelist e mesmo assim não funciona.
    Alguém sabe o que pode ser?

    • Janice Schmitz

      Estou com o mesmo problema, conseguiu resolver?

      • Lucas Linhares

        Oi Janice, consegui sim.
        Ao invés de adicionar o domínio, deixe com asterisco ‘*’ (sem as aspas). Depois de muito pesquisar, descobri que isto é um bug nesta nova versão, mas deixando com o asterisco funciona normal.

        • Janice Schmitz

          Já havia feito isso e não tinha funcionado, mas atualizei novamente a ferramenta Intel XDK e graças a Deus funcionou :D. Obrigada

  • Paulo Carlos O Incōrrïgîvęl

    Olá amigos, havia feito o build do meu APP na boa… Só que havia me esquecido das imagens pra o ícone e o splash screen… Depois adicionei as imagens e tudo, mas quando tento fazer a build novamente, ele falha… Alguém ali pode me ajudar??