Quickstarters
Feature Overview
Como Construir um Backend para Kotlin?
39 min
introdução neste tutorial, você aprenderá como construir um backend completo para um aplicativo android (escrito em kotlin) usando o back4app vamos passar pela integração de recursos essenciais do back4app—incluindo gerenciamento de banco de dados, funções de cloud code, apis rest e graphql, autenticação de usuários e consultas em tempo real (live queries)—para criar um backend seguro, escalável e robusto que se comunica perfeitamente com seu aplicativo android você também verá como a configuração rápida e o ambiente intuitivo do back4app podem reduzir drasticamente o tempo e o esforço em comparação com a configuração manual de servidores e bancos de dados ao longo do caminho, você ganhará experiência prática com funcionalidades chave, incluindo recursos avançados de segurança, agendamento de tarefas com cloud jobs e configuração de webhooks para integrações externas ao final deste tutorial, você estará bem preparado para aprimorar essa configuração básica em um aplicativo pronto para produção ou incorporar facilmente lógica personalizada e apis de terceiros conforme necessário pré requisitos para completar este tutorial, você precisará uma conta back4app e um novo projeto back4app começando com o back4app https //www back4app com/docs/get started/new parse app se você não tiver uma conta, pode criar uma gratuitamente siga o guia acima para preparar seu projeto ambiente básico de desenvolvimento android/kotlin certifique se de ter o android studio instalado em sua máquina você pode seguir a documentação oficial de configuração do android studio https //developer android com/studio se ainda não o configurou um mínimo de android 4 0 ou superior na configuração gradle do seu aplicativo normalmente, você definirá isso em seu minsdkversion na build gradle do seu módulo familiaridade com kotlin e conceitos básicos de android documentação do desenvolvedor android https //developer android com/docs se você é novo no android ou kotlin, revise a documentação oficial ou um tutorial para iniciantes antes de começar certifique se de ter todos esses pré requisitos em ordem antes de começar ter seu projeto back4app configurado e seu ambiente android local pronto ajudará você a acompanhar mais facilmente passo 1 – configurando o projeto back4app criar um novo projeto o primeiro passo para construir seu backend android no back4app é criar um novo projeto se você ainda não criou um, siga estas etapas faça login na sua conta back4app clique no botão “novo app” no seu painel do back4app dê um nome ao seu app (por exemplo, “android kotlin backend tutorial”) uma vez que o projeto é criado, você verá ele listado no seu painel do back4app este projeto será a base para todas as configurações de backend discutidas neste tutorial conectar o sdk parse back4app depende da parse platform para gerenciar seus dados, fornecer recursos em tempo real, lidar com autenticação de usuários e mais integrar seu aplicativo android com o back4app envolve adicionar as dependências do parse android sdk aos seus arquivos gradle e inicializá las com credenciais do seu painel do back4app recupere suas chaves parse no seu painel do back4app, navegue até a seção “configurações do app” ou “segurança & chaves” para encontrar seu id da aplicação e chave do cliente você também encontrará a url do servidor parse (geralmente no formato https //parseapi back4app com ) adicione o sdk parse ao seu build gradle arquivos no seu build gradle raiz (nível do projeto) allprojects { repositories { maven { url "https //jitpack io" } } } no seu build gradle de nível de módulo (geralmente app/build gradle ) dependencies { implementation "com github parse community parse sdk android\ parse\ latest version here" } inicialize o parse em seu aplicativo android crie uma application personalizada (por exemplo, app kt ) se você ainda não tiver uma package com example app import android app application import com parse parse import com parse parseinstallation class app application() { override fun oncreate() { super oncreate() // initialize parse parse initialize( parse configuration builder(this) applicationid("your app id") // from back4app dashboard clientkey("your client key") // from back4app dashboard server("https //parseapi back4app com/") build() ) // (optional) track statistics around app opens parseinstallation getcurrentinstallation() saveinbackground() } } em seguida, abra seu androidmanifest xml e registre a application personalizada \<?xml version="1 0" encoding="utf 8"?> \<manifest xmlns\ android="http //schemas android com/apk/res/android" package="com example app"> \<application android\ name=" app" android\ icon="@mipmap/ic launcher" android\ label="@string/app name" android\ usescleartexttraffic="true" > \</application> \</manifest> ao completar esta etapa, você estabeleceu uma conexão segura entre seu front end android (kotlin) e o backend do back4app todas as solicitações e transações de dados são roteadas de forma segura através deste sdk, reduzindo a complexidade de chamadas rest ou graphql manuais (embora você ainda possa usá las quando necessário) etapa 2 – configurando o banco de dados salvando e consultando dados com seu projeto back4app configurado e o sdk parse integrado ao seu aplicativo android, você pode agora começar a salvar e recuperar dados abaixo está um exemplo usando kotlin para criar e buscar dados import com parse parseobject import com parse parsequery import com parse savecallback import com parse parseexception // example create a todo item fun createtodoitem(title string, iscompleted boolean) { val todo = parseobject("todo") todo put("title", title) todo put("iscompleted", iscompleted) todo saveinbackground { e parseexception? > if (e == null) { println("todo saved successfully") } else { println("error saving todo ${e localizedmessage}") } } } // example query all todo items fun fetchtodos() { val query = parsequery\<parseobject>("todo") query findinbackground { results, e > if (e == null) { println("fetched todo items ${results size}") } else { println("error fetching todos ${e localizedmessage}") } } } alternativamente, você pode usar os endpoints da api rest do back4app curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo o back4app também fornece uma interface graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } essas opções diversas permitem que você integre operações de dados da maneira que melhor se adapta ao seu processo de desenvolvimento—seja através do sdk parse, rest ou graphql design de esquema e tipos de dados por padrão, o parse permite criação de esquema em tempo real , mas você também pode definir suas classes e tipos de dados no painel do back4app para mais controle navegue até a seção “banco de dados” no seu painel do back4app crie uma nova classe (por exemplo, “todo”) e adicione colunas relevantes, como título (string) e iscompleted (boolean) o back4app oferece um agente de ia que pode ajudá lo a projetar seu modelo de dados abra o agente de ia no seu painel de aplicativos ou no menu descreva seu modelo de dados em linguagem simples (por exemplo, “por favor, crie um novo aplicativo todo no back4app com um esquema de classe completo ”) deixe o agente de ia criar o esquema para você usar o agente de ia pode economizar seu tempo ao configurar sua arquitetura de dados e garantir consistência em seu aplicativo dados relacionais se você tem dados relacionais—digamos, um category objeto que aponta para múltiplos todo itens—você pode usar pointers ou relations no parse por exemplo, adicionando um ponteiro a um category // linking a todo to a category with a pointer fun createtaskforcategory(categoryobjectid string, title string) { val todo = parseobject("todo") val categorypointer = parseobject("category") categorypointer objectid = categoryobjectid todo put("title", title) todo put("category", categorypointer) todo saveinbackground { e > if (e == null) { println("created task with category relationship") } else { println("error creating task ${e localizedmessage}") } } } quando você consulta, você também pode incluir dados de ponteiro val query = parsequery getquery\<parseobject>("todo") query include("category") query findinbackground { todos, e > if (e == null) { println("fetched ${todos size} todos with category data") } } esta include("category") chamada busca detalhes da categoria junto com cada todo, tornando seus dados relacionais facilmente acessíveis consultas ao vivo para atualizações em tempo real, o back4app fornece live queries você pode se inscrever para mudanças em uma classe específica a partir do seu aplicativo android ative as consultas ao vivo no seu painel do back4app sob as configurações do servidor do seu aplicativo inicialize uma assinatura de consulta ao vivo no seu código import com parse parselivequeryclient import com parse parsequery import com parse subscriptionhandling val parselivequeryclient = parselivequeryclient factory getclient() val parsequery = parsequery\<parseobject>("todo") val subscriptionhandling subscriptionhandling\<parseobject> = parselivequeryclient subscribe(parsequery) subscriptionhandling handleevent(subscriptionhandling event create) { querytodo, todo > println("new todo created ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event update) { querytodo, todo > println("todo updated ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event delete) { querytodo, todo > println("todo deleted ${todo getstring("title")}") } sempre que uma nova todo é criada, atualizada ou deletada, o cliente recebe um callback em tempo real—perfeito para aplicativos colaborativos ou dinâmicos passo 3 – aplicando segurança com acls e clps mecanismo de segurança do back4app o back4app leva a segurança a sério, fornecendo listas de controle de acesso (acls) e permissões de nível de classe (clps) esses recursos permitem restringir quem pode ler ou escrever dados em uma base por objeto ou por classe, garantindo que apenas usuários autorizados possam modificar seus dados listas de controle de acesso (acls) uma acl é aplicada a objetos individuais para determinar quais usuários, funções ou o público podem realizar operações de leitura/escrita por exemplo fun createprivatetodo(title string, owneruser parseobject) { val todo = parseobject("todo") todo put("title", title) // create an acl granting read/write access only to the owner val acl = com parse parseacl(owneruser) acl publicreadaccess = false acl publicwriteaccess = false todo acl = acl todo saveinbackground { e > if (e == null) { println("saved private todo") } else { println("error ${e localizedmessage}") } } } permissões de nível de classe (clps) os clps governam as permissões padrão de toda a classe, como se a classe é legível ou gravável publicamente vá para o seu painel do back4app , selecione seu aplicativo e abra a base de dados seção selecione uma classe (por exemplo, “todo”) abra as permissões de nível de classe aba configure seus padrões, como “requer autenticação” para leitura ou gravação, ou “sem acesso” para o público passo 4 – escrevendo funções de código em nuvem o código em nuvem permite que você execute código javascript personalizado semelhante ao kotlin no parse server (carregado como js arquivos), sem precisar gerenciar a infraestrutura do servidor isso é ideal para lógica de negócios, validações, gatilhos e chamadas de api externas como funciona você normalmente coloca funções javascript, gatilhos e quaisquer módulos npm necessários em um main js arquivo este arquivo é implantado no seu projeto back4app e executa no ambiente do parse server casos de uso típicos lógica de negócio validações de dados gatilhos (como beforesave , aftersave ) aplicação de segurança integrações com apis de terceiros implante sua função abaixo está uma função simples de cloud code main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); implantando via o https //www back4app com/docs/local development/parse cli \# for linux/mac curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# for windows, download the exe from the releases page então configure e implante b4a configure accountkey b4a deploy chamando sua função do seu código android (kotlin) via o parse sdk import com parse parsecloud import com parse functioncallback import com parse parseexception fun calltextlengthfunction(sometext string) { val params = hashmapof("text" to sometext) parsecloud callfunctioninbackground\<map\<string, any>>("calculatetextlength", params) { result, e > if (e == null) { val length = result\["length"] as int println("text length $length") } else { println("error calling cloud code ${e localizedmessage}") } } } você também pode chamá lo via rest ou graphql de maneira semelhante passo 5 – configurando autenticação autenticação de usuário no back4app o back4app utiliza a classe parse user para autenticação o parse lida com a criptografia segura de senhas, tokens de sessão e mais, de forma nativa configurando a autenticação de usuário em kotlin, você pode criar um novo usuário import com parse parseuser fun signupuser(username string, password string, email string) { val user = parseuser() user username = username user setpassword(password) user email = email user signupinbackground { e > if (e == null) { println("user signed up successfully!") } else { println("error signing up user ${e localizedmessage}") } } } faça login de um usuário existente fun loginuser(username string, password string) { parseuser logininbackground(username, password) { user, e > if (user != null && e == null) { println("user logged in ${user username}") } else { println("error logging in ${e? localizedmessage}") } } } logins sociais como google, facebook e apple também podem ser integrados confira documentação de login social https //www back4app com/docs/platform/sign in with apple para mais detalhes gerenciamento de sessão o parse gerencia automaticamente os tokens de sessão você pode acessar o usuário atual val currentuser = parseuser getcurrentuser() if (currentuser != null) { println("currently logged in user ${currentuser username}") } else { println("no user is logged in") } e faça logout parseuser logout() passo 6 – gerenciando armazenamento de arquivos fazendo upload e recuperando arquivos o parse inclui a parsefile classe para gerenciar uploads de arquivos import com parse parsefile import com parse parseexception fun uploadimage(file java io file) { val bytes = file readbytes() val parsefile = parsefile(file name, bytes) parsefile saveinbackground { e parseexception? > if (e == null) { println("file saved ${parsefile url}") } else { println("error uploading file ${e localizedmessage}") } } } e faça logout segurança de arquivos você pode controlar quem pode fazer upload ou download de arquivos ajustando acls e clps ou usando configurações específicas de arquivos na configuração do parse server passo 7 – verificação de email e redefinição de senha ative a verificação de email nas configurações do seu painel back4app configure seu endereço de remetente, modelos de email ou domínio personalizado, se desejado use parseuser requestpasswordresetinbackground(email, callback) para acionar um fluxo de redefinição de senha em seu aplicativo passo 8 – agendando tarefas com cloud jobs cloud jobs permitem que você automatize tarefas rotineiras, como limpar dados ou enviar notificações periódicas parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo') const query = new parse query(todo) // e g , remove todos older than 30 days const cutoff = new date(date now() 30 24 60 60 1000) query lessthan('createdat', cutoff) const oldtodos = await query find({ usemasterkey true }) await parse object destroyall(oldtodos, { usemasterkey true }) return `deleted ${oldtodos length} old todos ` }) agende o trabalho no seu painel back4app em configurações do servidor > tarefas em segundo plano passo 9 – integrando webhooks webhooks permitem que seu aplicativo back4app envie solicitações http para um serviço externo sempre que certos eventos ocorrerem adicione um webhook no seu painel do back4app em mais > webhooks configure os gatilhos (por exemplo, após salvar um novo objeto) adicione um endpoint de url (como um webhook do slack ou stripe) passo 10 – explorando o painel de administração do back4app o aplicativo de administração do back4app é uma interface amigável baseada na web para usuários não técnicos gerenciarem dados ative o em painel do aplicativo > mais > aplicativo de administração crie seu primeiro usuário administrador escolha um subdomínio para acessar o painel de administração faça login para visualizar, editar ou remover registros do seu banco de dados facilmente conclusão ao seguir este tutorial abrangente, você criou um backend seguro para um aplicativo android no back4app configurou um banco de dados com esquemas de classe, tipos de dados e relacionamentos integrou consultas em tempo real (consultas ao vivo) para atualizações imediatas de dados aplicou medidas de segurança usando acls e clps para proteger e gerenciar o acesso aos dados implementou funções de cloud code para executar lógica de negócios personalizada no lado do servidor configurou a autenticação de usuários com suporte para verificação de e mail e redefinições de senha gerenciou uploads de arquivos e recuperação, com controles de segurança de arquivos opcionais agendou cloud jobs para tarefas automatizadas em segundo plano usou webhooks para integrar com serviços externos explorou o painel de administração do back4app para gerenciamento de dados com um front end sólido em android (kotlin) e um robusto backend no back4app, você está agora bem equipado para desenvolver aplicativos ricos em recursos, escaláveis e seguros continue explorando funcionalidades mais avançadas, integre sua lógica de negócios e aproveite o poder do back4app para economizar inúmeras horas na administração de servidores e bancos de dados boa codificação! próximos passos construa um aplicativo android pronto para produção estendendo este backend para lidar com modelos de dados mais complexos, estratégias de cache e otimizações de desempenho integre recursos avançados como fluxos de autenticação especializados, controle de acesso baseado em funções ou apis externas (como gateways de pagamento) confira a documentação oficial do back4app para mergulhos mais profundos em segurança avançada, ajuste de desempenho e análise de logs explore outros tutoriais sobre aplicativos de chat em tempo real, painéis de iot ou serviços baseados em localização você pode combinar as técnicas aprendidas aqui com apis de terceiros para criar aplicativos complexos do mundo real