2012-02-01 59 views
0

我正在使用SyncAdapter,自定義ContentProviderAccountManager服務進行同步。我對同步實現有點困惑。 SDK的示例「SampleSyncAdapter」對於聯繫人很有幫助,它將移動設備ID(Android中的_id)存儲在服務器表中,因此,當它使用髒列表響應時,設備知道是否添加或更新內容。如何同步來自不同設備(Android,iPhone等)和後端服務器ID的客戶端ID

此模式是否意味着我必須爲每個客戶端添加一個新的服務器端列?我將來可能會支持其他平臺(例如iPhone數據ID--我不熟悉其SDK)。

回答

1

在服務器端數據庫中使用映射表。

基本上:

DeviceID | DeviceItemID | ServerItemID 
    Dev1  100   8912831 
    Dev1  101   8819111 
    Dev1  108   7717719 
    Dev2  971   12091231 
    ....  ...   ........ 
  • 的DeviceID將是一個柱,它唯一地標識所述客戶端,即 具體Android手機。
  • DeviceItemID是客戶數據庫中的項目標識
  • ServerItemID是服務器數據庫中的項目標識

將此表與服務器條目結合使用,您可以過濾出並準確找到設備上存在的標識符。

這是傳統同步協議OMA DS中使用的方法(您可以在諾基亞手機等中找到此方法)。

如果您要進行「多客戶端」同步,即在服務器上的一個特定數據集在多個客戶端之間共享 - 您可以向映射表添加列(例如更改計數器/最後修改)允許你的服務器找到更新/刪除和添加項目&只發送它們。

+0

感謝您的新角度。要跟進我讀這[帖子](http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id)這似乎表明我的設備/安裝ID不可靠。然而,這是共享後端服務器數據庫的多個設備的標準實現嗎? Alex – Alex 2012-02-01 16:15:09

+0

yup,獲取唯一的設備標識符是不完全可靠的 - 但由於您沒有爲了廣告目的而追蹤它們,所以當應用程序第一次初始化時,您可以在客戶端自由生成 - 我強烈建議你看看使用UUID類 - 它爲您提供可靠的唯一標​​識符。 – Jens 2012-02-01 17:24:35

+0

謝謝Jens。我不知道UUID類。考慮映射表......以及同一行中跨設備的延遲同步:我是否應該爲原始事務存儲客戶機時間戳,以便忽略對已刪除行的傳入「更新」操作?我還沒有做過同步工作,所以想知道如果你能看到一個問題。 – Alex 2012-02-02 09:26:56

相關問題