Dropbox 核心 API 和同步 API

Posted

技术标签:

【中文标题】Dropbox 核心 API 和同步 API【英文标题】:Dropbox Core API and Sync API 【发布时间】:2014-02-21 09:40:40 【问题描述】:

我的 ios 应用程序使用 dropbox core api 访问用户的 dropbox 文件夹以保存/检索文件。

我的应用程序是基于核心数据的,我想使用 Sync API 在不同设备之间同步核心数据数据库(我不信任核心数据和 iOS 版本早于 7 的 iCloud)。我尝试将 Sync API 框架添加到我的应用程序中,但 xcode 返回许多重新定义错误。

有没有办法同时使用 Core API 和 Sync API?

谢谢, 最大

【问题讨论】:

【参考方案1】:

最近我需要集成 Core 和 Datastore API。通过在 Dropbox 论坛中提问以及检查已经给出的一些答案,我成功地在同一个项目中使用了两个 SDK。

以下步骤是我为了取得成功而执行的步骤。希望能解决你的问题。

对于以下版本,这些步骤有效

Dropbox Core iOS SDK v.1.3.11(2014 年 3 月 31 日) Dropbox Datastore/Sync v.2.1.2(2014 年 4 月 16 日)

一旦您获得源代码,所有修改都在 Dropbox Core SDK 中完成。

步骤

1) 删除所有特定于 OSX 的文件

DBAuthHelperOSX.m
DBKeychain-OSX.m
DBRestClient+OSX.m
DBAuthHelperOSX.h
DBRestClient+OSX.h
DropboxOSX.h
DropboxOSX-Info.plist
DropboxOSX-Prefix.pch
MPOAuthCredentiaIConcreteStore+KeychainAdditionsMac.m

2) 将文件 DBAccountInfo(.m 和 .h)重命名为 DBAccountInfoOld。在 SDK 的类中查找所有出现的 DBAccountInfo 并替换为新名称。

3)在 DBError.h 中,将 DBErrorCode 替换为 DBErrorCodeOld

4) 将文件 DBConnectController(.m 和 .h)重命名为 DBConnectControllerOld。在 SDK 的类中查找所有出现的 DBConnectController 并替换为新名称。

5) 将类 DBKeychain 和 DBKeychain-iOS 分别重命名为 DBKeychainOld 和 DBKeychainOld-iOS。在 SDK 类中查找所有出现的 DBKeychain,并将其替换为 DBKeychainOld。

6) 找到所有出现的“redential”并将它们替换为“redentialOld”。同时更新类的名称。 警告:仅替换包含属于 Core SDK 的表达式的变量和类名。 不要替换,例如,在以下情况下:useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]。这是 NSURL 类中的一个方法,修改会破坏代码。

7) 将源文件导入您的项目。从 Core SDK 导入的所有源文件都不能在 ARC 上运行。这样,必须为这些文件禁用它。选择项目并进入构建阶段 -> 编译源,选择所有关于核心 SDK 的文件,双击它们并插入 -fno-objc-arc

8) 如果你编译项目,你会发现一些重复的符号:

duplicate symbol _kDBDropboxAPIVersion in:
duplicate symbol _kDBDropboxAPIHost in:
duplicate symbol _kDBDropboxAPIContentHost in:
duplicate symbol _kDBDropboxWebHost in:
duplicate symbol _kDBSDKVersion in:
duplicate symbol _DBErrorDomain in:
duplicate symbol _DBStringFromLogLevel in:
duplicate symbol _DBLogFilePath in:
duplicate symbol _DBSetupLogToFile in:
duplicate symbol _DBLogSetLevel in:
duplicate symbol _DBLogSetCallback in:
duplicate symbol _DBLog in:
duplicate symbol _DBLogInfo in:
duplicate symbol _DBLogWarning in:
duplicate symbol _DBLogError in:
duplicate symbol _DBLogFatal in:

将“旧”附加到这些变量名称的末尾。不要忘记更新代码,以便对这些变量的所有调用都使用它们的新名称。

9) 为了在两个 SDK 中管理您的 Dropbox 帐户,请转到 Core 的 DBSession+iOS.m 和 handleURL 方法内并注释以下行:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:kDBLinkNonce];
[[NSUserDefaults standardUserDefaults] synchronize];

10) 在您的 App Delegate 的 application:openURL:sourceApplication:annotation: 方法中插入以下代码:

[[DBSession sharedSession] handleOpenURL:url];//Core API
[[DBAccountManager sharedManager] handleOpenURL:url]; //Datastore API

重要提示:必须遵守此命令! Core API 中的handleOpenURL 必须在 Datastore 之前调用,因为在 9) 中完成了修改

11) 在application:didFinishLaunchingWithOptions: 中插入以下代码:

    //Datastore API
    DBAccountManager *mgr =
    [[DBAccountManager alloc] initWithAppKey:DROPBOX_APP_KEY secret:DROPBOX_APP_SECRET];
    [DBAccountManager setSharedManager:mgr];

    //CoreAPI
    DBSession *dbSession = [[DBSession alloc]initWithAppKey:DROPBOX_APP_KEY
                                                  appSecret:DROPBOX_APP_SECRET
                                                       root:kDBRootDropbox];
    [DBSession setSharedSession:dbSession];

12) 为了触发 链接 过程,请使用[[DBAccountManager sharedManager] linkFromController:self];

13) 要取消链接,请使用以下几行

[[DBAccountManager sharedManager] linkedAccount] unlink];
[[DBSession sharedSession] unlinkAll];

【讨论】:

【参考方案2】:

是的,在某些情况下是可能的。这是您如何同时实现 Core 和 Sync,因为它需要大量工作。

我会建议你检查HERE

我想你会在这里找到答案。

【讨论】:

【参考方案3】:

您可能想尝试仅使用文件同步 API 和数据存储 API 同步数据。它们捆绑在同一个 iOS 库中,并且可以很好地协同工作。

【讨论】:

以上是关于Dropbox 核心 API 和同步 API的主要内容,如果未能解决你的问题,请参考以下文章

核心思想:API造就生态环境

Delphi的Dropbox api? [关闭]

同步 SQLite 数据库和 Dropbox 数据存储

使用 Dropbox Datastore API 作为 Android 应用程序的主要存储选项

在 ubuntu linux 中同步 dropbox 和 xampp htdocs,不包括临时文件

Dropbox for Mac(网络共享工具)