将客户端与 Gmail 同步

本文档介绍了如何使用 Gmail API 同步客户端。

在大多数应用场景中,让客户端与 Gmail 保持同步非常重要。同步方法有两种:完全同步部分同步。当客户端首次连接到 Gmail 时,以及在一些其他极少见的情况下,需要进行完全同步。如果您的客户端最近已同步,则部分同步是比完全同步更轻量级的替代方案。您还可以使用推送通知来实时触发部分同步,并且仅在必要时触发,从而避免不必要的轮询。

完全同步

如果您的应用是首次连接到 Gmail,或者无法进行部分同步,则必须执行完整同步。在完全同步操作中,您的应用应检索并存储尽可能多的最新消息或会话,以满足您的需求。例如,如果您的应用显示最近消息的列表,您可能需要检索并缓存足够的消息,以便在用户滚动浏览前几条显示的消息之外的内容时,界面能够快速响应。

请按照以下步骤执行完整同步:

  1. 调用 messages.list 方法以检索第一页消息 ID。

  2. 为列表请求返回的每条消息创建 messages.get 方法请求的批量请求

    如果您的应用显示消息内容,则应在应用首次检索到消息时将 Format 设置为 format=FULLformat=RAW,并缓存结果,以避免额外的检索操作。如果您要检索之前缓存的消息,则应使用 format=MINIMAL 来减小响应的大小,因为只有 labelIds 可能会发生变化。

  3. 将更新合并到缓存结果中。您的应用应存储最新消息(list 响应中的第一条消息)的 historyId,以供将来进行部分同步。

部分同步

如果您的应用最近同步过,则可以使用 history.list 方法执行部分同步,以返回比您在请求中必须指定的 startHistoryId 查询参数更新的所有历史记录。

startHistoryId 查询参数必须设置为最近一条消息的 historyId。如需检索最近一条消息的 historyId,请使用 messages.getmessages.list 方法。您还可以在完全同步或部分同步期间设置该值,以供日后使用。

返回的 History 对象包含自所提供的 startHistoryId 时间以来每封邮件的消息 ID 和更改类型,例如添加邮件或修改标签。

限制

历史记录通常至少保留一周,有时会保留更长时间。 不过,记录的可用时间段可能会短得多,并且在极少数情况下,记录可能无法使用。

如果客户端提供的 startHistoryId 超出了历史记录的可用范围,Gmail API 会返回 HTTP 404 错误响应。在这种情况下,您的客户端必须执行完全同步