Como se conectar ao servidor Node.js no iOS: um guia completo

Visão geral:-

  • Conectar um projeto iOS a um servidor Node.js é uma habilidade principal para qualquer desenvolvedor de aplicativos.
  • Este guia orienta você a configurar uma API básica do Node.js, fazer solicitações de GET e POST do Swift e solucionar as armadilhas comuns da rede.
  • Você aprenderá as etapas essenciais para obter seu aplicativo e back -end conversando sem problemas.

Você construiu este incrível aplicativo iOS, mas ele fica lá, fazendo suas próprias coisas. Isso é legal, mas o que acontece quando você precisa falar com outras partes? Para extrair dados de um back -end, para armazenar as preferências do usuário, fazer parte de um sistema real?

É aí que a diversão e o pesadelo começam. Você deve se conectar a um servidor e, para isso, o Node.js é uma opção popular.

Deixe de lado o jargão e os diagramas. Trata -se de fazer uma conexão, e a boa notícia é que, neste guia, levaremos você pelas etapas para conectar -se a um servidor Node.js no iOS usando o Swift.

O conceito central: interação cliente-servidor

O primeiro passo é entender o aperto de mão básico. Você tem o seu aplicativo iOSescrito em Swift, e você precisa obter (ou enviar) informações de seu Node.js back -end.

A maneira principal da maneira que isso acontece é através de um Rest APIusando boas e antigas solicitações HTTP. Quase toda a comunicação atual de aplicativos é construída nesta base.

iPhone (Swift) < -> Node.js Server < -> (talvez um banco de dados?)

Ao criar um back -end escalável com o Node.js, muitos desenvolvedores recorrem a plataformas como o Supabase para otimizar o gerenciamento e a autenticação do banco de dados. Um servidor Node.js com Supabase pode reduzir significativamente a complexidade da sua configuração de back -end.

Colocando o servidor Node

Seu servidor deve estar pronto para aceitar novas solicitações recebidas. Esta é a maneira mais mínima de escrever um código Node.js/Express que você está tentando fazer o trabalho.

Não é sofisticado, mas funciona. O pacote CORS é importante aqui; Ele permite que seu servidor receba solicitações de diferentes origens, o que é um desligamento comum quando você está depurando entre um dispositivo e sua própria máquina.

const express = require('express');
const cors = require('cors');
const app = express();
app.use(express.json());
app.use(cors());

app.get('/hello', (req, res) => {
  res.json({ message: 'Hey iOS, it's Node talking!' });  
});

app.listen(3000, () => {
  console.log('Server's on at 3000 (I hope)');
});

Agora o lado rápido

Tudo bem, aqui é onde a mágica acontece. Você precisa fazer uma solicitação simples de obter.

Este é um método sólido e sem frescuras para ligar para o seu servidor. O URLSession é a classe principal que você usará para solicitações de rede no Swift. É poderoso e, por enquanto, usaremos uma instância compartilhada básica.

func fetchMessage() {
    guard let url = URL(string: "http://192.168.1.x:3000/hello") else { return }
    let task = URLSession.shared.dataTask(with: url) { data, _, error in
        if let error = error {
            // Happens if server's off or URL's wrong
            print("No dice: \(error.localizedDescription)")
            return
        }
        guard let data = data else { return }
        if let json = try? JSONSerialization.jsonObject(with: data) as? (String: Any) {
            print(json("message") ?? "(no message?)")
        } else {
            print("JSON decode fail")
        }
    }
    task.resume()
}

Coisas comuns para cuidar

Estes são alguns trompas comuns.

  • Simulador para localhost? Sem problemas. 127.0.0.1 funciona bem.
  • Dispositivo físico para Mac? Use seu endereço IP. 192.168.1.xxx é o caminho a seguir.
  • Ambos os dispositivos devem estar no mesmo wifi!

Dados de pós-inging (como um formulário de login)

Enviar dados de outra maneira é um pouco mais de trabalho. Você precisa adicionar um corpo JSON, configurar cabeçalhos e especificar o método HTTP. É apenas mais digitação, mas o conceito é o mesmo. É assim que você enviaria uma solicitação de login ou um envio de formulário.

func sendData() {
    guard let url = URL(string: "http://192.168.1.x:3000/api/whatever") else { return }
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    let payload: (String: Any) = ("name": "Ash", "fav": "Swift")
    request.httpBody = try? JSONSerialization.data(withJSONObject: payload)

    let task = URLSession.shared.dataTask(with: request) { data, _, error in
        if data != nil {
            print("Data sent, probably")
        } else {
            print(error ?? "??")
        }
    }
    task.resume()
}

Debug, Maldição, repita

Alguns erros estranhos e como lidar com eles:

Nada acontece? Verifique seus URLs, portos, firewalls. Reinicie tudo.

Segurança de transporte de aplicativos? Apple bloqueia o HTTP simples por padrão; Pode ser necessário fazer uma pequena alteração na sua informação. Plista para fins de desenvolvimento. Este é um recurso de segurança crucial, portanto, você não deve ignorá -lo em um aplicativo de produção.

Ainda preso? Tente acessar o servidor do navegador do seu iPhone para descartar os bugs do iOS. Se funcionar lá, o problema será com o seu código SWIFT, não sua configuração de rede.

E quanto ao HTTPS & Production?

Aguentar. Você está usando um endereço HTTP simples, mas não pode enviar um aplicativo real dessa maneira. Você precisa de um SSL válido para produção, o que significa usar o HTTPS.

A verdade simples é que você precisará de um certificado assinado de uma autoridade de certificado. Este não é um ponto de dor que você pode “consertar” com um pouco de código. É uma etapa de implantação e configuração. É um grande negócio.
Por enquanto, lembre -se de que, no momento em que seu projeto for lançado, essa configuração HTTP simples precisa ser substituída por um HTTPS seguro.

Armadilhas e depuração comuns

Mesmo que tudo esteja configurado corretamente, os erros podem e acontecerão. Geralmente é apenas problemas de configuração de rede ou servidor e o código em si é bom. Aqui estão os problemas mais frequentes:

  • Redes que não combinam: Sua máquina de desenvolvimento e seu dispositivo iOS devem estar na mesma rede wifi para que uma conexão local funcione. Se eles estiverem em diferentes sub -redes ou um estiver usando uma conexão celular, a solicitação falhará.
  • CORS Equívoco: O compartilhamento de recursos de origem cruzada (CORS) é um recurso de segurança do navegador que, se não for bem ajustado, pode interromper as solicitações enviadas pelo seu aplicativo iOS. Então, quando o servidor não estiver configurado para permitir explicitamente solicitações da origem do seu aplicativo, seu servidor recusará a conexão.
  • URLs errados: Este é um erro tão fácil de cometer, mas esquecer de colocar corretamente o endereço IP, o número da porta ou o endpoint da API pode ser bastante frustrante. Sempre verifique duas vezes isso.

Conclusão

Olha, você fez isso. Um aplicativo real e ao vivo conversando com um servidor Node.js. A configuração local é simples e funciona. Mas agora o quê? O princípio central está inativo, então o próximo nível tem tudo a ver com expandir essa base.

Pense em dar um passo adiante: e se você fizesse a solicitação assíncrona, para que seu aplicativo não congelasse? A nova assíncona de Swift/Aguarda da Sintaxe faz deste um sonho. Que tal uma API mais sofisticada para um aplicativo do mundo real?

Deixe um comentário