0

SyncAdapter、カスタムContentProviderAccountManagerサービスを使用して同期しています。私は同期の実装で少し立ち往生しています。モバイルデバイスID(Androidの場合)をサーバーテーブルに保存する連絡先のSDKの例「SampleSyncAdapter」に大いに助けられた_idので、ダーティリストで応答すると、デバイスはコンテンツを追加するか更新するかを認識します。

このパターンは、クライアントごとに新しいサーバー側の列を追加する必要があることを意味しますか?将来的には他のプラットフォームをサポートする可能性があります(たとえば、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で使用されているアプローチです(これはNokiaの電話などで見られます)。

これは、「マルチクライアント」同期を行う場合、つまりサーバー上の1つの特定のデータセットが複数のクライアント間で共有される場合に適しています。たとえば、マッピングテーブルに列を追加できます(変更カウンター/最終変更など)。 )サーバーが更新/削除および追加されたアイテムを検索し、それらのみを送信できるようにします。

于 2012-02-01T15:26:38.720 に答える