此 SDK 提供了访问 Box V2 API 的权限。它目前支持文件、文件夹、用户、注释和搜索操作。
示例应用程序即将推出。
另一种将 Box Cocoa SDK 添加到您的项目的方法是将它作为依赖 XCode 项目。BoxCocoaSDK 框架旨在包含在您的应用程序中,而不是在用户的机器上单独安装。
注意:步骤 2-6 在 Apple关于使用框架的文档 中有介绍。
在 SDK 客户端设置您的客户端 ID 和客户端密钥
[BoxCocoaSDK sharedSDK].OAuth2Session.clientID = @"YOUR_CLIENT_ID";
[BoxCocoaSDK sharedSDK].OAuth2Session.clientSecret = @"YOUR_CLIENT_SECRET";
完成 OAuth2 流的一种方法是在您的应用中注册一个自定义 URL 方案,以便接收 OAuth2 授权代码。在您的 Info.plist
中,注册以下 URL 方案
boxsdk-YOUR_CLIENT_ID
注意:在 Box 上设置您的服务时,请将 OAuth2 重定向 URI 留空。当 SDK 发出 OAuth2 调用时,SDK 将提供自定义重定向 URI;这样做要求在您的服务设置中不要设置任何重定向 URI。
为了对 Box 进行身份验证,您需要使用 OAuth2。最简单的方法是使用用户的默认浏览器执行 OAuth2 身份验证和授权。要开始,您只需要求系统打开身份验证 URL
NSURL *authURL = [[BoxCocoaSDK sharedSDK].OAuth2Session authorizeURL];
NSArray *urls = [NSArray arrayWithObject:authURL];
[[NSWorkspace sharedWorkspace] openURLs:urls
withAppBundleIdentifier:nil //@"com.apple.Safari" if you want to specify Safari rather than the user's default browser
options:NSWorkspaceLaunchWithoutAddingToRecents
additionalEventParamDescriptor:nil
launchIdentifiers:NULL];
身份验证成功后,您的应用将使用您之前注册的自定义 URL 方案收到一个“打开”请求。在您的应用程序代理中
- (void)handleURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSString *receivedUrlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
[[BoxCocoaSDK sharedSDK].OAuth2Session performAuthorizationCodeGrantWithReceivedURL:[NSURL URLWithString:receivedUrlString]];
}
您可以通过监听[BoxCocoaSDK sharedSDK].OAuth2Session
来接收通知,当用户成功认证时进行通知。
注意:该SDK不会存储令牌。我们建议将刷新令牌存储在钥匙链中,并监听OAuth2Session发送的通知。更多信息,请参阅BoxOAuth2Session文档。
所有SDK API调用都是异步的。它们由SDK在NSOperationQueue
上调度。要接收API响应和错误通知,请将块传递给SDK API调用方法。这些块在SDK接收到API响应后触发。
注意:回调不在主线程上触发。在主线程上包裹对您应用程序UI的更新使用dispatch_sync
块。
BoxCollectionBlock success = ^(BoxCollection *collection)
{
// grab items from the collection, use the collection as a data source
// for a table view, etc.
};
BoxAPIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary)
{
// handle errors
};
[[BoxCocoaSDK sharedSDK].foldersManager folderItemsWithID:folderID requestBuilder:nil success:success failure:failure];
BoxFileBlock success = ^(BoxFile *file)
{
// manipulate the BoxFile.
};
BoxAPIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary)
{
// handle errors
};
[[BoxCocoaSDK sharedSDK].filesManager fileInfoWithID:folderID requestBuilder:nil success:success failure:failure];
要通过API发送数据,请使用请求构建器。如果我们想移动文件并更改其名称
BoxFileBlock success = ^(BoxFile *file)
{
// manipulate the BoxFile.
};
BoxAPIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary)
{
// handle errors
};
BoxFilesRequestBuilder *builder = [BoxFilesRequestBuilder alloc] init];
builder.name = @"My awesome file.txt"
builder.parentID = BoxAPIFolderIDRoot;
[[BoxCocoaSDK sharedSDK].filesManager editFileWithID:folderID requestBuilder:builder success:success failure:failure];
BoxFileBlock fileBlock = ^(BoxFile *file)
{
// manipulate resulting BoxFile
};
BoxAPIJSONFailureBlock failureBlock = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary)
{
// handle failed upload
};
BoxAPIMultipartProgressBlock progressBlock = ^(unsigned long long totalBytes, unsigned long long bytesSent)
{
// indicate progress of upload
};
BoxFilesRequestBuilder *builder = [[BoxFilesRequestBuilder alloc] init];
builder.name = @"Logo_Box_Blue_Whitebg_480x480.jpg";
builder.parentID = folderID;
NSString *path = [[NSBundle mainBundle] pathForResource:@"Logo_Box_Blue_Whitebg_480x480.jpg" ofType:nil];
NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:path];
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
long long contentLength = [[fileAttributes objectForKey:NSFileSize] longLongValue];
[[BoxCocoaSDK sharedSDK].filesManager uploadFileWithInputStream:inputStream contentLength:contentLength MIMEType:nil requestBuilder:builder success:fileBlock failure:failureBlock progress:progressBlock];
NSOutputStream *outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
BoxDownloadSuccessBlock successBlock = ^(NSString *downloadedFileID, long long expectedContentLength)
{
// handle download, preview download, etc.
};
BoxDownloadFailureBlock failureBlock = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
{
// handle download failure
};
BoxAPIDataProgressBlock progressBlock = ^(long long expectedTotalBytes, unsigned long long bytesReceived)
{
// display progress
};
[[BoxCocoaSDK sharedSDK].filesManager downloadFileWithID:fileID outputStream:outputStream requestBuilder:nil success:successBlock failure:failureBlock progress:progressBlock];
BoxCocoaSDK框架必须使用OSX 10.8 SDK进行构建。它针对的是10.7操作系统,并且目前与OSX 10.6或更早版本不兼容。
此SDK包含单元测试,可以使用./bin/test.sh
或rake spec
运行。
要单独为OS X平台运行测试,请使用./bin/test.sh 10.8
运行测试。这将使用OS X 10.8 SDK编译BoxCocoaSDK和测试。
除非Pull请求包含测试覆盖率,否则不予接受。
此SDK的文档使用appledoc生成。可以通过运行./bin/generate-documentation.sh
生成文档。此脚本的依赖项是appledoc
二进制文件,可以使用homebrew下载(brew install appledoc
)。
除非Pull请求包含文档,否则不予接受。