Parse モバイル バックエンドを介してデバイス間でコア データ モデルを同期するライブラリの開発に興味があります。iCloud コア データ同期が提供しようとしている機能をミラーリングしたいと考えています。
なぜ iCloud やEnsemblesを使わないのですか? 現在、本番アプリで iCloud コア データ同期を使用していますが、うまく機能していません。また、Apple ID とは独立した認証を提供したいと考えています。これは、iCloud から離れたいもう 1 つの理由です。Ensembles に関する限り、Dropbox 同期 API が廃止されたため、これが引き続き Dropbox で機能するかどうかはわかりません。
私はライブラリの開発を始めていません。以下に概説する私の計画についてのフィードバックを探しています。この設計は、この SO answerに基づいています。
ライブラリの一般的な設計:
ライブラリは、永続ストア コーディネーターと管理オブジェクト コンテキストを設定する標準コア データ スタックを提供します。すべての標準コア データ CRUD 操作は、ライブラリによって提供されるインターフェイスを介して処理されます。
CUD 操作が行われるたびに、操作の再現に必要なすべての情報を含む同期操作オブジェクトがバックグラウンドで Parse に保存されます。これには、実行された操作のタイプ、操作されたオブジェクトの一意の識別子、作成操作の場合は親オブジェクトと関係が提供されます。
- 各操作には、change_id 番号が関連付けられています。デバイスが操作をダウンロードして実行するたびに、その操作に関連付けられた最新の change_id が保存されます。
- 各同期操作をアップロードする前に、デバイスはサーバーにリクエストを送信して、保存されている change_id 番号がローカルに保存されている番号と一致することを確認します。サーバーの change_id の方が大きい場合、最初にすべての同期操作をダウンロードして実行し、次に独自の同期操作をアップロードします。
- 競合 (2 つのデバイスがオフライン中に同じ値を編集すること) は、どちらのデバイスが最後に値を変更したかを判別することによって解決されます。
ここで何か不足していますか?このアプローチの潜在的な落とし穴は何ですか? 同期は難しいと聞きましたが、この種の作業は経験豊富な開発者に任せるべきでしょうか?