contentful-management.objc
Objective-C SDK,用于 Contentful 的内容管理 API。
Contentful 是一个用于 Web 应用程序、移动应用程序和联网设备的托管内容管理平台。它允许您在云端创建、编辑和管理内容,并通过强大的 API 将其发布到任何地方。Contentful 提供管理编辑团队和使组织之间协作的工具。
用法
客户端
最初应该创建 API 客户端实例
CMAClient* client = [[CMAClient alloc] initWithAccessToken:@"access-token"];
可以通过 管理 API 文档 轻松获得访问令牌。
或者,您可以选择自动处理 CMA 的速率限制,如下所示
CDAConfiguration* configuration = [CDAConfiguration defaultConfiguration];
configuration.rateLimiting = YES;
CMAClient* client = [[CMAClient alloc] initWithAccessToken:@"access-token" configuration:configuration];
这会使客户端执行带有退避的自动重试,因此您的应用程序无需处理速率限制
空间
检索所有空间
[client fetchAllSpacesWithSuccess:^(CDAResponse *response, CDAArray *array) {
NSLog(@"%@", array);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
通过ID检索一个空间
[client fetchSpaceWithIdentifier:@"blog-space-id"
success:^(CDAResponse *response, CMASpace *space) {
NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
删除空间
[space deleteWithSuccess:^{
NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
创建空间
[client createSpaceWithName:@"MySpace"
success:^(CDAResponse *response, CMASpace *space) {
NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
或在组织的上下文中(如果您在您的帐户中拥有多个组织)
[client createSpaceWithName:@"MySpace"
inOrganization:organization
success:^(CDAResponse *response, CMASpace *space) {
NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
检索帐户中的所有组织
[client fetchOrganizationsWithSuccess:^(CDAResponse *response, CDAArray *array) {
NSLog(@"%@", array);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
更新空间
space.name = @"new name";
[space updateWithSuccess:^{
NSLog(@"%@", space);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
内容类型
从一个空间检索所有内容类型
[space fetchContentTypesWithSuccess:^(CDAResponse *response, CDAArray *array) {
NSLog(@"%@", array);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
从一个空间通过ID检索一个内容类型
[space fetchContentTypeWithIdentifier:@"some identifier"
success:^(CDAResponse *response, CMAContentType *type) {
NSLog(@"%@", type);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
为一个内容类型创建字段
CMAField* field = [CMAField fieldWithName:@"tags" type:CDAFieldTypeArray];
field.itemType = CDAFieldTypeSymbol;
[contentType addField:field];
或
[contentType addFieldWithName:@"anotherField" type:CDAFieldTypeNumber];
从内容类型中删除字段
[contentType deleteFieldWithIdentifier:@"some identifier"];
创建一个内容类型
[space createContentTypeWithName:@"foobar"
fields:@[ [CMAField fieldWithName:@"field1" type:CDAFieldTypeText],
[CMAField fieldWithName:@"field2" type:CDAFieldTypeNumber],
[CMAField fieldWithName:@"field3" type:CDAFieldTypeObject] ]
success:^(CDAResponse *response, CMAContentType *contentType) {
NSLog(@"%@", contentType);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
删除内容类型
[contentType deleteWithSuccess:^{
NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
激活或停用内容类型
[contentType publishWithSuccess:^{
NSLog(@"Published successfully.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
[contentType unpublishWithSuccess:nil failure:nil];
检查内容类型是否激活
BOOL result = contentType.isPublished;
更新内容类型
contentType.name = @"new name";
[contentType updateWithSuccess:^{
NSLog(@"Updated successfully.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
编辑界面
获取一个内容类型的编辑界面
[contentType fetchEditorInterfaceWithSuccess:^(CDAResponse* response, CMAEditorInterface* interface) { NSLog(@"编辑界面: %@", interface);
// Can be updated using this
[interface updateWithSuccess:^{}
failure:^(CDAResponse* response, NSError* error) {
NSLog(@"Error: %@", error);
}];
} failure:^(CDAResponse *response, NSError *error) { NSLog(@"错误: %@", error); }];
资产
从空间检索所有资产
[space fetchAssetsWithSuccess:^(CDAResponse* response, CDAArray* assets) {
NSLog(@"%@", assets);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
通过ID检索一个资产
[space fetchAssetWithIdentifier:@"some identifier"
success:^(CDAResponse* response, CMAAsset* asset) {
NSLog(@"%@", asset);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
创建资产
[space createAssetWithTitle:@{ @"en-US": @"My Image" }
description:@{ @"en-US": @"My Image Description" }
fileToUpload:@{ @"en-US": @"http://www.example.com/example.jpg" }
success:^(CDAResponse *response, CMAAsset *asset) {
NSLog(@"%@", asset);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
开始处理资产
[asset processWithSuccess:^{
NSLog(@"Processing successfully started.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
更新资产
asset.title = @"bar";
[asset updateWithSuccess:^{
NSLog(@"Update successful");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
删除资产
[asset deleteWithSuccess:^{
NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
存档或恢复资产
[asset archiveWithSuccess:nil failure:nil];
[asset unarchiveWithSuccess:nil failure:nil];
检查资产是否存档
BOOL result = asset.isArchived;
发布或撤销发布资产
[asset publishWithSuccess:nil failure:nil];
[asset unpublishWithSuccess:nil failure:nil];
检查资产是否已发布
BOOL result = asset.isPublished;
条目
从空间检索所有条目
[space fetchEntriesWithSuccess:^(CDAResponse* response, CDAArray* entries) {
NSLog(@"%@", entries);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
通过ID检索一个条目
[space fetchEntryWithIdentifier:@"some identifier"
success:^(CDAResponse* response, CDAEntry* entry) {
NSLog(@"%@", entry);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
创建条目
[space createEntryOfContentType:contentType
withFields:@{ @"title": @{ @"en-US": @"Mr. President" } }
success:^(CDAResponse *response, CDAEntry *entry) {
NSLog(@"%@", entry);
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
更新条目
[entry setValue:@"bar" forFieldWithName:@"title"];
[entry updateWithSuccess:^{
NSLog(@"Updated successfully");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
删除条目
[entry deleteWithSuccess:^{
NSLog(@"Delete successful.");
} failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
存档或恢复条目
[entry archiveWithSuccess:nil failure:nil];
[entry unarchiveWithSuccess:nil failure:nil];
检查条目是否存档
BOOL result = entry.isArchived;
发布或撤销发布条目
[entry publishWithSuccess:nil failure:nil];
[entry unpublishWithSuccess:nil failure:nil];
检查条目是否已发布
BOOL result = entry.isPublish;
角色和权限
创建一个角色
[space createRoleWithName:name
description:description
permissions:permissions
policies:policies
success:^(CDAResponse *response, CMARole *role) {
NSLog(@"New role: %@", role);
}
failure:^(CDAResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
检索空间中定义的角色
[space fetchRolesMatching:@{} withSuccess:nil failure:nil];
更新一个角色
role.roleDescription = @"New description";
[role updateWithSuccess:nil failure:nil];
删除一个角色
[role deleteWithSuccess:nil failure:nil];
Webhooks
创建新的webhook
[space createWebhookWithName:name
url:url
topics:nil
headers:nil
httpBasicUsername:nil
httpBasicPassword:nil
success:nil
failure:nil];
检索空间中所有webhook
[space fetchWebhooksWithSuccess:nil failure:nil];
更新webhook
webhook.name = @"updated name";
[webhook updateWithSuccess:nil failure:nil];
删除webhook
[webhook deleteWithSuccess:nil failure:nil];
(注:为了简洁,一些示例使用了nil
完成块。显然,你不应在实际应用程序中这样做。)
安装
CocoaPods是Objective-C的依赖关系管理器,它自动简化了在项目中使用第三方库(如Contentful Delivery API)的过程。
platform :ios, '7.0'
pod 'ContentfulManagementAPI'
这是保持Contentful Management API副本更新最简单的方式。
或者,你可以使用iOS和OS X的预构建静态框架ContentfulManagementAPI-0.9.0.zip,其中包含了所有依赖项。或者将此存储库作为Git子模块包含,并包含Pod/目录中的所有代码。
单元测试
Contentful Management API完全经过单元测试。他们使用环境变量CONTENTFUL_MANAGEMENT_API_ACCESS_TOKEN
中的API令牌,因此你必须提供该令牌。
可以从Xcode内部或使用cocoapods-testing从命令行运行测试。
$ gem install cocoapods-testing
$ pod lib testing
示例
您可以在我们的iOS网络研讨会演示应用中找到一个使用CMA的非常简单的示例,详见 演示应用。
许可证
版权所有 (c) 2014 Contentful GmbH。有关详细信息,请参阅 LICENSE。