Artigos de Tecnologia e Negócios > Mobile

Tratamento de erro de conexão no IOS

andriu-felipe
andriu-felipe

Nesse artigo, trabalharemos com um aplicativo que lista filmes:

Fomos contratados para desenvolver um aplicativo que contém um catálogo de filmes. Quando o usuário acessa o aplicativo, uma lista com os filmes é apresentada:

Para listar os filmes, foi consumida a API do The Movie DB.

Vamos começar criando o método que vai fazer a requisição para a API do The Movie:


func getFilmes(sucesso: @escaping(_ resultado: [Movie]) -> Void, falha: @escaping(_ erro: Error) -> Void) {  
        Alamofire.request(Session.urlDefault() + "movie/popular?api_key=\(Session.getAuthorizationToken())&language=pt-BR&page=1", method: .get).responseJSON { (resposta) in
            // Verificar retorno do servidor
        }
}

Em seguida, precisamos verificar o status da requisição. Ou seja, se o servidor conseguiu retornar os filmes ou ocorreu alguma falha:


func getFilmes(sucesso: @escaping(_ resultado: [Movie]) -> Void, falha: @escaping(_ erro: Error) -> Void) {

        Alamofire.request(Session.urlDefault() + "movie/popular?api_key=\(Session.getAuthorizationToken())&language=pt-BR&page=1", method: .get).responseJSON { (resposta) in

            switch resposta.result {
            case .success:
                guard let json = resposta.result.value as? Dictionary<String, Any> else { return }
                if let movieList = json["results"] as? Array<Dictionary<String, Any>> {
                    sucesso(Movie.serializeObject(movieList))
                }
                break
            case .failure:
                print(resposta.error!)
                break
            }
        }
}

Vamos criar o método recuperaFilmes e chamá-lo no método viewDidLoad() do ViewController:


func recuperaFilmes() {
        FilmeQueryAPI().getFilmes(sucesso: { (listaDeFilmes) in
            self.filmes = listaDeFilmes
 self.filmesCollectionView.reloadData()
        }) { (error) in
            print(error)
        }
}

Agora temos a lista de filmes:

Legal! Conseguimos exibir os filmes na CollectionView. Criamos uma requisição utilizando o Alamofire, chamamos a API e ela nos devolveu as informações necessárias. Mas, o que acontece se tentarmos utilizar o app e o iPhone não tiver conexão com a internet?

Hum… o aplicativo fica carregando, carregando, mas não aparece a listagem. Será que ocorreu algum erro?

Avisando o usuário

Provavelmente você já utilizou algum aplicativo que te deixou esperando sem saber de fato o que estava acontecendo. Ou pior, você ficou esperando por um bom tempo e na verdade tinha ocorrido uma falha em alguma requisição.

Deixar as pessoas esperando por um longo tempo, e pior, sem mostrar o que está acontecendo é péssimo para a usabilidade do usuário.

Se você já implementou alguma requisição HTTP no seu aplicativo, seja de forma nativa ou utilizando alguma biblioteca como o Alamofire, por exemplo, você já deve ter visto um print(response.error.localizedDescription) espalhado pelo código.

O problema é o print que temos no caso de erro, onde simplesmente estamos imprimindo o erro do servidor no console.

Vamos dar uma olhada na mensagem de erro:

A mensagem nos diz que a conexão com a internet parece estar offline.

Para quem trabalha com desenvolvimento, é ótimo ver essa mensagem no console, assim conseguimos rapidamente saber qual é o problema. Porém, a pessoa ficará aguardando em um load infinito sem saber o que está acontecendo:

Para resolver esse problema, começaremos criando uma classe que implementará um alerta:

import UIKit

class Alerta: NSObject {

    func exibir(_ controller: UIViewController, _ titulo: String, _ mensagem: String) {
        let alerta = UIAlertController(title: titulo, message: mensagem, preferredStyle: .alert)
        let botao = UIAlertAction(title: "Ok", style: .default, handler: nil)
        alerta.addAction(botao)

        controller.present(alerta, animated: true, completion: nil)
    }

}

Agora que temos essa classe, no callback de erro do método recuperaFilmes() vamos implementá-la:


func recuperaFilmes() {
        FilmeQueryAPI().getFilmes(sucesso: { (listaDeFilmes) in
            self.filmes = listaDeFilmes
            self.filmesCollectionView.reloadData()
        }) { (error) in
            Alerta().exibir(self, "Atenção", error.localizedDescription)
        }
}

Vamos testar novamente:

Ótimo, agora estamos apresentando um alerta para o usuário indicando qual foi o problema.

Requisições e avisos

Fazer requisições para buscar informações é uma tarefa comum no desenvolvimento. Seja em aplicações mobile, web, e até mesmo em algumas aplicações desktops.

Porém, algumas vezes não existe a conexão com a internet. Então como fazemos? Uma forma, é mostrar uma mensagem para o usuário falando que a conexão com a internet é requerida.

Além dessa forma, existem diversas outras que podemos utilizar para tratar esse tipo de erro. Como, por exemplo, fazendo um cache da última requisição e utilizar esses dados para compor a tela que desejamos.

Aqui na Alura, temos uma formação IOS. Nela você aprenderá técnicas de construção de layouts que ajudem na experiência do usuário, formatar dados como CPF, CNPJ, e até comunicação com web services.

Leia também:

Artigos de Tecnologia e Negócios > Mobile

Cursos profissionais de Mobile é na Alura, comece agora!

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana