2016-08-19 129 views
1

我正在編寫應用程序中的一項功能,將所有用戶的收藏夾同步到Google Drive。該功能的全部重點在於該用戶的所有設備都處於同步狀態。將文件同步到Google Drive AppFolder與多個客戶端

有出頭是很好的瞭解:

  • 是該應用程序中提取所有來自谷歌驅動器的收藏夾中在啓動時,它們與本地收藏夾進行比較。如果Google雲端硬盤文件夾中存在本地存儲中不存在的最喜歡的內容,則將該最喜歡的內容添加到本地存儲中,反之亦然。
  • 該應用使用Google Drive API。

上面第一點的問題是比較雲和本地存儲的方式。當用戶刪除收藏夾並且連接不好時,收藏夾不會在Google雲端硬盤中刪除。當啓動相同的最愛被再次添加的應用程序。 該應用無法在離線狀態下啓動,因此無法離線刪除收藏夾。

我正在考慮一種方法來創建某種'更改日誌',以查看最喜歡的內容已被刪除或添加,其中包含已添加/刪除的時間以及某些設備標識。 (我現在想大聲)這樣做的一個問題是,使用應用程序一段時間後changelog文件變得非常大(每個最喜歡的添加和刪除都記錄)

我面臨的問題不是代碼,但是同步需要工作並檢查收藏夾的方式。我已嘗試將自己的收藏夾自己提交給Google雲端硬盤,但佔用了太多空間(並且無法輕鬆調試)。

請大聲想一想(在評論中哈哈),我不知道我將如何解決這個挑戰,我需要指出某人正確的方向。

任何解決方案,歡迎。

回答

1

讓您的應用程序能夠接收ChangeEvents,即使它沒有運行。例如,即使應用程序未運行時發生更改,您的應用程序也可能會在其關心的文件或文件夾發生更改時顯示通知。

下面的示例代碼顯示了邏輯分析,你可以實現一個改變訂閱添加到文件:

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, 
mSelectedFileId); 
file.addChangeSubscription(mGoogleApiClient); 

辦理變更訂閱事件

處理變更的訂閱事件,你必須創建一個類延伸DriveEventService並重寫onChange方法。這是發生在ChangeEvent的應用程序特定處理的地方。

public class MyDriveEventService extends DriveEventService { 

@Override 
public void onChange(ChangeEvent event) { 
Log.d(TAG, event.toString()); 
// Application-specific handling of event. 
} 

} 

添加到您的AndroidManifest。xml文件

<application ...> 
    ... 
    <service android:name=".MyDriveEventService" android:exported="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.drive.events.HANDLE_EVENT"/> 
     </intent-filter> 
    </service> 
</application> 

您的應用程序將收到一個的ChangeEvent每當一個文件或文件夾被通過設備上的其他應用程序或從服務器驅動器API下載更新的變化。

您也可以嘗試使用Push Notifications(驅動器REST API):

的驅動器API提供推,讓你看更改對資源的通知。您可以使用此功能來改善應用程序的性能。它允許您消除額外的網絡並計算輪詢資源所涉及的成本,以確定它們是否發生了變化。每當觀看的資源發生變化時,Drive API都會通知您的應用程序。

您可以閱讀博客push notification瞭解更多信息。

希望這會有所幫助!

+0

這就是我想要使用的實現!謝謝,但是你有跟上所有變化的想法嗎? – tim687

相關問題