0

我正在使用SyncAdapter、自定义ContentProviderAccountManager服务进行同步。我有点坚持同步实现。联系人的 SDK 示例“SampleSyncAdapter”对我有很大帮助,它将移动设备 ID(_id在 Android 中)存储在服务器表中,因此当它响应脏列表时,设备知道是添加还是更新内容。

这种模式是否意味着我必须为每个客户端添加一个新的服务器端列?将来我可能会支持其他平台(例如 iPhone 数据 ID - 我不熟悉它的 SDK)。

4

1 回答 1

1

在服务器端数据库中使用映射表。

基本上:

DeviceID | DeviceItemID | ServerItemID
   Dev1        100           8912831
   Dev1        101           8819111
   Dev1        108           7717719
   Dev2        971           12091231
   ....        ...           ........
  • DeviceID 将是唯一标识客户端的列,即特定的 Android 手机。
  • DeviceItemID 是客户端数据库中的项目标识符。
  • ServerItemID 是服务器数据库中的项目标识符。

将此表与服务器项目连接起来,您可以过滤并准确找到设备上存在的标识符。

这是传统同步协议 OMA DS 中使用的方法(您可以在诺基亚手机等中找到此方法)。

如果您要进行“多客户端”同步,这将是更可取的,即服务器上的一个特定数据集在多个客户端之间共享 - 例如,您可以将列添加到映射表(例如更改计数器/上次修改) 以允许您的服务器找到更新/删除和添加的项目并仅发送它们。

于 2012-02-01T15:26:38.720 回答