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的主要内容,如果未能解决你的问题,请参考以下文章
使用 Dropbox Datastore API 作为 Android 应用程序的主要存储选项