Quickstarters
Feature Overview
如何为Xamarin构建后端?
28 分
介绍 在本教程中,您将学习如何使用 back4app 的强大功能为您的 xamarin 移动应用程序构建后端。 我们将依赖 back4app 的 rest api , graphql , 以及其他网络 api 选项,而不是使用专用的 sdk。这种方法使您的 移动客户端 保持轻量和灵活,使您能够通过简单的 http 调用连接到您的数据。 我们将涵盖创建数据库模型、应用安全性、处理身份验证和执行文件操作。 通过遵循这些步骤,您将看到如何快速安全地为 xamarin 构建后端。 您还将探索调度自动任务和集成 webhooks 以扩展您的 xamarin 应用程序的功能,这样您就可以专注于编写 ui 代码,而不是处理服务器配置。 完成本指南后,您将拥有一个可重用的模板,用于构建 移动应用程序 ,依赖于 back4app 作为其后端。 您还将了解如何应用 访问控制列表 (acls),编写 云代码 (如有需要),并在最终解决方案中结合高级工作流,如 实时查询 或 云作业 。 先决条件 为了充分利用本教程,请确保您具备: 一个 back4app 账户 在这里免费注册。 https //www back4app com/ 一个新的 back4app 项目 开始使用 back4app https //www back4app com/docs/get started/new parse app xamarin 开发环境 (visual studio 或 visual studio for mac) xamarin 安装文档 https //docs microsoft com/en us/xamarin/get started/installation/ c# 和 xamarin 的基本知识 (包括如何从 公共类 在 c# 中发出 web api 请求)。 准备好这些先决条件后,您将能够跟随并将您的 xamarin 项目连接到 back4app。 步骤 1 – 在 back4app 上创建新项目并连接 在您的 back4app 仪表板中创建一个 back4app 项目 。这是您后端的基础。 为您的项目命名 (例如,“xamarin backend tutorial”)。 通过访问应用程序的“安全性和密钥”部分找到您的应用密钥 。您将看到在从移动客户端发出请求时可能使用的 rest、graphql 或其他密钥。 配置您的 xamarin 项目 以进行 http 请求。您将使用 httpclient ,或您喜欢的任何网络库,来调用您的 back4app 应用的 rest 或 graphql 端点。 例如,您可以将您的 应用程序 id 和 rest api 密钥 存储在安全的地方或常量文件中: public class back4appconstants { public const string appid = "your application id"; public const string restapikey = "your rest api key"; public const string serverurl = "https //parseapi back4app com"; } 在调用 web api 时,始终在请求头中包含这些凭据。这确保您的请求被路由到具有所需授权的正确应用。 步骤 2 – 设置数据库 1\ 创建数据模型 使用 back4app 仪表板定义您的类,或者让它们在第一次请求时动态创建。例如,如果您想要一个 todo 类,您可以在 数据库 部分创建它,或者通过 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 2\ 使用 ai 代理创建数据模型 back4app 提供了一个 ai 代理 ,可以生成完整的类结构: 在您的 back4app 项目中打开 ai 代理 描述 您的模型(例如:“请创建一个名为‘todo’的新类,包含标题和 iscompleted 字段。”)。 确认 以自动生成模式。 3\ 读取和写入数据 (rest) 在你的 xamarin 项目中,你可以编写一个 public class (例如, restclient ) 来处理所有请求到 back4app using system net http; using system text; using newtonsoft json; public class restclient { private readonly httpclient client; public restclient() { client = new httpclient(); client defaultrequestheaders add("x parse application id", back4appconstants appid); client defaultrequestheaders add("x parse rest api key", back4appconstants restapikey); } public async task createtodoasync(string title, bool iscompleted) { var newtodo = new { title = title, iscompleted = iscompleted }; var content = new stringcontent(jsonconvert serializeobject(newtodo), encoding utf8, "application/json"); var response = await client postasync($"{back4appconstants serverurl}/classes/todo", content); // handle the response } public async task\<list\<todo>> gettodosasync() { var response = await client getasync($"{back4appconstants serverurl}/classes/todo"); var jsonstring = await response content readasstringasync(); // parse json into a c# model (todo) // return the result // return new list\<todo>(); // placeholder } } public class todo { public string objectid { get; set; } public string title { get; set; } public bool iscompleted { get; set; } } 4\ 读取和写入数据 (graphql) 对于 graphql 查询,你可以向 back4app graphql 端点发送请求 curl x post \\ h "content type application/json" \\ h "x parse application id your application id" \\ h "x parse master key your master key" \\ \ data '{"query" "mutation { createtodo(input {fields {title \\"wash the car\\" iscompleted\ false}}){ todo{ objectid title }}}"}' \\ https //parseapi back4app com/graphql 同样,从xamarin,您可以将包含graphql字符串的json主体post到 https //parseapi back4app com/graphql 5\ 使用实时查询(可选) 尽管您使用的是web api调用而不是parse sdk,但如果您想要实时数据更新,仍然可以启用实时查询。您将使用专用连接(websockets)来订阅类更改。 启用 实时查询从您应用的 服务器设置 在back4app中,然后在xamarin中使用兼容的客户端库(如果可用)。或者,您可以构建自己的websocket解决方案,或者如果实时支持对您的应用是可选的,则依赖轮询。 步骤3 – 使用acl和clp应用安全性 1\ acl和clp概述 back4app 的安全性包括 类级权限 (clps) 和 访问控制列表 (acls) clps 定义哪些用户或角色可以读取/写入整个类。acls 添加每个对象的安全性。将它们结合起来,以确保只有授权用户可以操作您的数据。 2\ 设置类级权限 打开 back4app 的 数据库 部分。 选择您的类 (如 todo)。 转到类级权限 以设置读/写规则。您可能只允许经过身份验证的用户读取或写入。这确保您的移动客户端在读取数据之前必须登录。 步骤 4 – 编写云代码函数 1\ 为什么使用云代码 云代码允许您运行自定义的服务器端逻辑。您可以创建业务规则、验证或在数据更改时运行的触发器。这减少了篡改的风险,因为逻辑在移动客户端之外运行。 2\ 示例函数和触发器 以下是 main js 文件中云函数的简化示例: parse cloud define('helloxamarin', async (request) => { return 'hello from xamarin cloud code!'; }); parse cloud beforesave('todo', (request) => { const todo = request object; if (!todo get('title')) { throw 'title is required'; } }); 3\ 部署 要部署,您可以使用 back4app cli 或仪表板中的云代码部分。部署后,您可以通过 rest 调用您的函数。 curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{}' \\ https //parseapi back4app com/functions/helloxamarin 4\ npm模块 如果您需要额外的库,请在您的云代码项目文件夹中通过 npm 安装它们。之后,您可以在您的 main js 中 require 它们。这种方法对于从服务器端调用第三方api非常有用。 步骤5 – 配置身份验证 1\ 启用用户身份验证 在back4app中, user 类管理用户凭据。在 应用设置 下,您可以启用用户身份验证、电子邮件验证和密码重置设置。 2\ 用户注册/登录(rest) 在您的xamarin项目中,您可以编写c#方法来处理注册和登录: public async task signupuserasync(string username, string password, string email) { var user = new { username = username, password = password, email = email }; var content = new stringcontent(jsonconvert serializeobject(user), encoding utf8, "application/json"); var response = await client postasync($"{back4appconstants serverurl}/users", content); // parse response } public async task loginuserasync(string username, string password) { var loginendpoint = $"{back4appconstants serverurl}/login?username={username}\&password={password}"; var response = await client getasync(loginendpoint); // parse response } 然后,您可以在客户端存储会话令牌以供将来的请求使用。 3\ 社交登录 要集成社交登录(例如,google、facebook),请参考 back4app社交登录文档 https //www back4app com/docs/platform/sign in with apple 。每个提供者都有自己的oauth流程,您可以从您的 移动客户端 处理。然后,将返回的令牌传递给back4app。 步骤 6 – 处理文件存储 1\ 设置文件存储 文件可以通过发送包含文件数据的 post 请求进行上传。例如,要从您的 xamarin 应用程序存储一张图片,请将图片读取到字节数组中,然后发送 curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type image/png" \\ \ data binary "@local image png" \\ https //parseapi back4app com/files/myimage png 2\ 使用 c# 的示例上传 public async task\<string> uploadfileasync(byte\[] filedata, string filename) { var filecontent = new bytearraycontent(filedata); filecontent headers contenttype = new system net http headers mediatypeheadervalue("image/png"); var response = await client postasync($"{back4appconstants serverurl}/files/{filename}", filecontent); var jsonresponse = await response content readasstringasync(); // parse the response to get file url return "file url from response"; } 3\ 安全考虑 要确保文件上传的安全性,请前往您的 back4app 服务器设置 并调整 文件权限 例如,您可以只允许经过身份验证的用户上传 步骤 7 – 电子邮件验证和密码重置 1\ 概述 电子邮件验证确保用户拥有他们注册时使用的电子邮件。密码重置链接允许他们在忘记密码时重新获得访问权限。 2\ back4app 仪表板配置 在 电子邮件设置 下启用 电子邮件验证 编辑 密码重置模板 并设置 “发件人” 地址 您还可以自定义电子邮件内容以匹配您的品牌 3\ 实施 一旦启用,如果用户使用电子邮件注册,他们将收到一个验证链接。密码重置请求将使用用户的电子邮件发送到相同的基础 api,以触发重置电子邮件 步骤 8 – 使用云作业调度任务 1\ 云作业的功能 云作业让您可以调度例行任务,例如清理旧数据或发送每日摘要电子邮件,所有这些都可以通过 back4app 平台完成 2\ 示例 parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days ago = new date(now 30 24 60 60 1000); query lessthan('createdat', thirty days ago); const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old items `; }); 部署云代码,然后在 应用设置 > 服务器设置 > 后台作业 下调度该作业 步骤 9 – 集成 webhooks 在 back4app 上定义一个 webhook ,通过导航到 更多 > webhooks 并点击 “添加 webhook ” 提供 端点,例如 https //your service com/webhook endpoint 选择 触发器,例如 “todo 类中的新对象 ” webhooks 可以通知第三方服务,因此您的 xamarin 应用可以保持轻量,而外部系统处理额外的逻辑或通知。 步骤 10 – 探索 back4app 管理面板 “ back4app 管理应用 是一种用户友好的方式,可以处理 crud 操作而无需编写查询。在 “ 应用仪表板 > 更多 > 管理应用 中启用它。创建一个管理员用户,选择一个子域名,然后登录。 这个管理应用非常适合需要管理数据但不应直接访问数据库的非技术团队成员。 结论 back4app clps acls 移动应用 保持快速和灵活,同时利用托管数据库和云环境的强大功能。 下一步 扩展您的 xamarin 应用 以处理更复杂的逻辑、缓存或高级角色和权限。 深入了解高级功能 ,例如推送通知,或如果您需要协作更新,则集成实时数据与实时查询。 访问官方 back4app 文档 以获取有关安全性、性能和调试的更深入指南。 通过混合第三方 api(支付网关、分析、社交媒体)与您的 back4app 后端,创建现实世界的解决方案。这个组合可以增强您的移动客户端的功能,并保持代码的组织。