box-ios-sdk-v2 1.2.2

box-ios-sdk-v2 1.2.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

未声明 维护。



  • Ryan Lopopolo

BoxCocoaSDK: Box API V2 OSX SDK

此 SDK 提供了访问 Box V2 API 的权限。它目前支持文件、文件夹、用户、注释和搜索操作。

示例应用程序即将推出。

添加到您的项目

依赖 XCode 项目 + 框架

另一种将 Box Cocoa SDK 添加到您的项目的方法是将它作为依赖 XCode 项目。BoxCocoaSDK 框架旨在包含在您的应用程序中,而不是在用户的机器上单独安装。

  1. 将此存储库克隆到您的项目目录中。如果您想使用 git submodules,可以这样做。
  2. 在 XCode 中打开您的项目。
  3. 将 BoxSDK.xcodeproj 拖入项目浏览器的根目录。
    Dependent project

  4. 将 BoxCocoaSDK 目标作为目标依赖项添加。
    Target dependency

  5. 链接到 BoxCocoaSDK.framework
    Link with binary

  6. 创建一个构建阶段,将编译好的框架复制到应用程序包的 'Frameworks' 目录中。
    Copy to bundle

注意:步骤 2-6 在 Apple关于使用框架的文档 中有介绍。

  1. 添加 -ObjC 链接器标志。这是为了加载 SDK 中定义的分类所必需的。
    Add linker flag

  2. #import <BoxCocoaSDK/BoxCocoaSDK.h>

快速入门

配置

在 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文档

进行API调用

所有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.shrake 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)。

文档托管在此存储库的GitHub页面上.

除非Pull请求包含文档,否则不予接受。

已知问题

  • 不支持操作废纸篓中的文件。
  • 以下端点缺少支持
    • 协作
    • 事件
    • 任务