我似乎无法围绕一个允许用户创建对象、保存到数据库并跟踪该对象是否已发布到服务器的良好设计。
就像在 snapchat 中一样 - 在离线时,您可以创建一个包含图片和接收者的快照对象,按发送,它会显示在快照列表(表格视图)中,但如果设备离线,请求超时或失败,它将显示一个红色感叹号,您可以选择单元格以重试。
进行类似设计的好方法是什么?有任何想法吗?
提前致谢!
我似乎无法围绕一个允许用户创建对象、保存到数据库并跟踪该对象是否已发布到服务器的良好设计。
就像在 snapchat 中一样 - 在离线时,您可以创建一个包含图片和接收者的快照对象,按发送,它会显示在快照列表(表格视图)中,但如果设备离线,请求超时或失败,它将显示一个红色感叹号,您可以选择单元格以重试。
进行类似设计的好方法是什么?有任何想法吗?
提前致谢!
我曾开发过类似的应用程序。这个想法是你如何构建你的数据库。在这种情况下,与表中的所有其他属性一起添加一个属性,例如 isSent,它是一个布尔值。默认情况下,这应该是 false,并且只有在服务器上更新时才应该设置为 true。
这将有助于找出哪些项目未同步到服务器并仅发送那些 isSent 为 false 的项目。
现在,一旦项目在服务器上更新,您的应用程序将如何了解?为此,您的服务器应该发回您发送的请求以及每个请求的成功消息。您的请求可以是一组项目,也可以是单个请求,具体取决于要求。
Azure 同步表也以同样的方式工作。当您第一次创建一个项目时,它存储在您的离线数据库中,isSent 为 false,然后该请求被发送到服务器,当服务器发送成功时,isSent 更新为 true。
让我们看一个例子:假设您正在离线评论。每条评论将被视为单独的项目。因此,当您连接到互联网时,这些所有请求都将被发送,并且每个项目都有其唯一的 ID 以与其他项目区分开来。您上传到服务器的请求将是:
[
{
"unique_id" : 1,
"Comment" : "Hello"
},
{
"unique-id" : 2,
"Comment" : "How r u"
}
]
现在来自服务器的响应应该是:
[
{
"unique_id" : 1,
"Status" : "success"
},
{
"unique_id" : 1,
"Status" : "failed"
}
]
解析您的响应并根据状态相应地更新数据库的 isSent 列。
我会谈谈 Parse Server 之类的服务。如果您不知道它是什么,它是一个开源服务器,您可以将其挂载(放置)在 Heroku 或 Amazon AWS 等服务上。当您使用 Parse SDK 将数据保存到服务器时,您可以选择创建一个块来处理是否发生错误或成功等于 true。您可以观看有关如何在 Heroku 等上设置 Parse Server 的 YouTube 视频。从那里开始,所有旧的“解析”视频将几乎保持不变,即使它们正在关闭(因此是开源项目)。此外,您可以使用 Reachability 来检测用户是在线还是离线 - 同样,您可以找到有关如何执行此操作的 YouTube 视频。