Quickstarters
Feature Overview
如何为Kotlin构建后端?
35 分
介绍 在本教程中,您将学习如何使用 back4app 为 android 应用程序(用 kotlin 编写)构建完整的后端。 我们将逐步整合 back4app 的基本功能——包括数据库管理、云代码函数、rest 和 graphql api、用户身份验证以及实时查询(实时查询)——以创建一个安全、可扩展且强大的后端,与您的 android 应用程序无缝通信。 您还将看到 back4app 的快速设置和直观环境如何大幅减少与手动配置服务器和数据库相比所需的时间和精力。 在此过程中,您将获得关键功能的实践经验,包括高级安全功能、使用云作业调度任务以及为外部集成设置 webhook。 在本教程结束时,您将为将此基础设置提升为生产就绪的应用程序做好充分准备,或根据需要轻松集成自定义逻辑和第三方 api。 先决条件 要完成本教程,您需要: 一个 back4app 账户和一个新的 back4app 项目 开始使用 back4app。 https //www back4app com/docs/get started/new parse app 如果您没有账户,可以免费创建一个。请按照上面的指南准备好您的项目。 基本的 android/kotlin 开发环境 确保您的计算机上安装了 android studio。如果您还没有设置,可以参考 android studio 的官方设置文档 https //developer android com/studio 。 在您应用的 gradle 配置中至少需要 android 4 0 或更高版本 通常,您将在您的 minsdkversion 中设置此项,位于您的模块的 build gradle 文件中。 熟悉 kotlin 和基本的 android 概念 android 开发者文档。 https //developer android com/docs 如果您是 android 或 kotlin 的新手,请在开始之前查看官方文档或初学者教程。 在开始之前,请确保您已准备好所有这些先决条件。设置好您的 back4app 项目并准备好本地 android 环境将帮助您更轻松地跟随。 步骤 1 – 设置 back4app 项目 创建新项目 在 back4app 上构建 android 后端的第一步是创建一个新项目。如果您还没有创建一个,请按照以下步骤操作: 登录到您的 back4app 账户 。 点击您的 back4app 仪表板中的 “新应用” 按钮 。 给您的应用命名 (例如,“android kotlin backend tutorial”)。 项目创建后,您将在 back4app 仪表板中看到它列出。该项目将是本教程中讨论的所有后端配置的基础。 连接 parse sdk back4app依赖parse平台来管理您的数据,提供实时功能,处理用户身份验证等。将您的android应用与back4app集成涉及将parse android sdk依赖项添加到您的gradle文件中,并使用来自back4app仪表板的凭据进行初始化。 检索您的parse密钥 在您的back4app仪表板中,导航到您应用的“应用设置”或“安全性与密钥”部分以找到您的 应用程序id 和 客户端密钥 。您还会找到 parse服务器url (通常格式为 https //parseapi back4app com )。 将parse sdk 添加到您的 build gradle 文件中 在您的根 build gradle (项目级) allprojects { repositories { maven { url "https //jitpack io" } } } 在您的模块级 build gradle (通常是 app/build gradle ) dependencies { implementation "com github parse community parse sdk android\ parse\ latest version here" } 在您的 android 应用程序中初始化 parse 创建一个自定义 application 类(例如, app kt ) 如果您还没有的话: 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() } } 接下来,打开您的 androidmanifest xml 并注册自定义 application 类: \<?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> 通过完成此步骤,您已在 android(kotlin)前端和 back4app 后端之间建立了安全连接。所有请求和数据交易都通过此 sdk 安全路由,从而减少了手动 rest 或 graphql 调用的复杂性(尽管在需要时您仍然可以使用它们)。 步骤 2 – 设置数据库 保存和查询数据 在设置好您的 back4app 项目并将 parse sdk 集成到您的 android 应用后,您现在可以开始保存和检索数据。下面是一个使用 kotlin 创建和获取数据的示例。 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}") } } } 或者,您可以使用 back4app 的 rest api 端点: 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 back4app 还提供了 graphql 接口: mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } 这些多样的选项让您可以以最适合您开发过程的方式集成数据操作——无论是通过 parse sdk、rest 还是 graphql。 架构设计和数据类型 默认情况下,parse 允许 动态创建模式 , 但您也可以在 back4app 仪表板中定义您的类和数据类型,以获得更多控制。 导航到您的 back4app 仪表板中的 “数据库” 部分 创建一个新类 (例如,“待办事项”)并添加相关列,例如标题(字符串)和 iscompleted(布尔值)。 back4app 提供一个 ai 代理,可以帮助您设计数据模型: 从您的应用仪表板或菜单中打开 ai 代理 用简单的语言描述您的数据模型 (例如,“请在 back4app 上创建一个新的待办事项应用,带有完整的类模式。”)。 让 ai 代理为您创建模式 。 使用 ai 代理可以在设置数据架构时节省时间,并确保您的应用程序的一致性。 关系数据 如果您有关系数据——比如,一个 category 对象指向多个 todo 项目——您可以在 parse 中使用 pointers 或 relations 。例如,添加一个指向 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}") } } } 当您查询时,您还可以包含指针数据: val query = parsequery getquery\<parseobject>("todo") query include("category") query findinbackground { todos, e > if (e == null) { println("fetched ${todos size} todos with category data") } } 这个 include("category") 调用在每个 todo 旁边获取类别详细信息,使您的关系数据无缝可访问。 实时查询 为了实时更新,back4app 提供了 live queries 。您可以从您的 android 应用程序订阅特定类的更改: 在您的 back4app 控制面板中启用 live queries ,在您应用的 server settings 下。 在您的代码中初始化 live query subscription : 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")}") } 每当创建、更新或删除新的待办事项时,客户端会实时接收回调——非常适合协作或动态应用程序。 步骤 3 – 使用 acl 和 clp 应用安全性 back4app 安全机制 back4app 非常重视安全性,提供了 访问控制列表 (acls) 和 类级权限 (clps) 这些功能允许您限制谁可以在每个对象或每个类的基础上读取或写入数据,确保只有授权用户可以修改您的数据。 访问控制列表 (acls) 一个 acl 应用于单个对象,以确定哪些用户、角色或公众可以执行读/写操作。例如: 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}") } } } 类级别权限 (clps) clps 管理整个类的默认权限,例如该类是否可以公开读取或写入。 前往您的 back4app 控制面板 , 选择您的应用程序,然后打开 数据库 部分。 选择一个类 (例如,“todo”)。 打开类级别权限 标签。 配置您的默认设置,例如“需要身份验证”以进行读取或写入,或“无访问权限”给公众。 步骤 4 – 编写云代码函数 云代码让您在 parse server 上运行自定义的类似 kotlin 的 javascript 代码(作为 js 文件上传),无需管理服务器基础设施。这对于业务逻辑、验证、触发器和外部 api 调用非常理想。 它是如何工作的 您通常将 javascript 函数、触发器和任何所需的 npm 模块放在一个 main js 文件中。该文件被部署到您的 back4app 项目中,并在 parse server 环境中运行。 典型用例 业务逻辑 数据验证 触发器 (如 beforesave , aftersave ) 安全执行 与第三方 api 的集成 部署您的函数 下面是一个简单的 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 }; }); 通过 unhandled content type 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 然后配置和部署 b4a configure accountkey b4a deploy 调用您的函数 通过 parse sdk 从您的 android (kotlin) 代码 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}") } } } 您也可以通过 rest 或 graphql 以类似的方式调用它。 步骤 5 – 配置身份验证 back4app 中的用户身份验证 back4app 利用 parse user 类进行身份验证。parse 处理安全密码哈希、会话令牌等。 设置用户身份验证 在 kotlin 中,您可以创建一个新用户 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}") } } } 登录现有用户 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}") } } } 社交登录如 google、facebook 和 apple 也可以集成。请查看 社交登录文档 https //www back4app com/docs/platform/sign in with apple 以获取详细信息。 会话管理 parse 自动管理会话令牌。您可以访问当前用户: val currentuser = parseuser getcurrentuser() if (currentuser != null) { println("currently logged in user ${currentuser username}") } else { println("no user is logged in") } 并注销: parseuser logout() 步骤 6 – 处理文件存储 上传和检索文件 parse 包含了 parsefile 类来处理文件上传: 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}") } } } parse 包含了 parsefile 类来处理文件上传: 文件安全 您可以通过调整 acl 和 clp 或使用 parse server 配置中的文件特定设置来控制谁可以上传或下载文件。 步骤 7 – 邮件验证和密码重置 在您的 back4app 控制面板设置中启用 邮件验证。 配置 您的发件地址、电子邮件模板或自定义域(如有需要)。 使用 parseuser requestpasswordresetinbackground(email, callback) 在您的应用中触发密码重置流程。 步骤 8 – 使用云作业调度任务 云作业 让您自动化常规任务,例如清理数据或发送定期通知。 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 ` }) 在您的 back4app 控制面板中调度作业,路径为 服务器设置 > 背景作业 。 步骤 9 – 集成 webhooks webhooks 允许您的 back4app 应用在某些事件发生时向外部服务发送 http 请求。 添加一个 webhook 在您的 back4app 控制面板下 更多 > webhooks 配置触发器 (例如,保存新对象后)。 添加 一个 url 端点(如 slack 或 stripe webhook)。 步骤 10 – 探索 back4app 管理面板 “ back4app 管理应用 是一个友好的基于网络的界面,供非技术用户管理数据。 在 应用控制面板 > 更多 > 管理应用 下启用它。 创建 您的第一个管理员用户。 选择一个子域名 以访问管理面板。 登录 以轻松查看、编辑或删除数据库中的记录。 结论 通过遵循这个全面的教程,您已经: 创建了一个安全的后端 用于 back4app 上的 android 应用。 配置了一个数据库 具有类模式、数据类型和关系。 集成了实时查询 (实时查询)以实现即时数据更新。 应用了安全措施 使用 acl 和 clp 来保护和管理数据访问。 实现了云代码 函数以在服务器端运行自定义业务逻辑。 设置了用户身份验证 支持电子邮件验证和密码重置。 管理文件上传 和检索,具有可选的文件安全控制。 调度云作业 以进行自动化后台任务。 使用 webhooks 与外部服务集成。 探索了 back4app 管理面板 以进行数据管理。 凭借坚实的 android(kotlin)前端和强大的 back4app 后端,您现在已具备开发功能丰富、可扩展和安全的应用程序的能力。继续探索更高级的功能,集成您的业务逻辑,并利用 back4app 的强大功能为您节省无数小时的服务器和数据库管理时间。祝您编码愉快! 下一步 构建一个生产就绪的android应用 ,通过扩展这个后端以处理更复杂的数据模型、缓存策略和性能优化。 集成高级功能 ,例如专门的身份验证流程、基于角色的访问控制或外部api(如支付网关)。 查看back4app的官方文档 ,深入了解高级安全性、性能调优和日志分析。 探索其他教程 ,关于实时聊天应用、物联网仪表板或基于位置的服务。您可以将这里学到的技术与第三方api结合,创建复杂的现实世界应用。