contentful.objc
关于 ContentfulManagementAPI SDK 的弃用声明
Contentful 将于 2018 年 7 月 13 日停止支持 ContentfulManagementAPI SDK。源代码将仍然可用,但将不再处理功能和支持请求。如果您必须利用 Content Management API 的功能或修复错误,建议您分叉此代码库,或自行实现 API 交互。
contentful.swift 而不是 contentful.objc 进行未来的开发,因为 Contentful 将会专注于 Swift 而不是 Objective-C。
建议使用contentful.swift与contentful.objc的完整功能比较
CDA功能 | contentful.swift | contentful.objc |
---|---|---|
API覆盖率* | ||
Images API | ||
搜索参数 | ||
同步API的回退语言 | ||
速率限制处理 | ||
空间环境 |
*API覆盖率定义:所有端点均可通过,且可以通过传递HTTP参数/参数对的字典来构建复杂查询。请注意,Swift SDK提供了更全面的支持,并利用类型系统,优于Objective-C SDK提供的“字符串类型”接口。
适用于Contentful的Content Delivery API的Objective-C SDK。
Contentful为数字团队提供内容基础设施,以在网站、应用程序和设备中提供内容。与CMS不同,Contentful是为了与现代软件堆栈集成而构建的。它提供了一个结构化内容的中央枢纽,强大的管理和管理API,以及可定制的Web应用程序,使开发人员和内容创作者能够更快地推出数字产品。
使用方法
CDAClient
管理您与Contentful Delivery API的所有交互。
CDAClient* client = [[CDAClient alloc] initWithSpaceKey:@"cfexampleapi" accessToken:@"b4c0n73n7fu1"];
[client fetchEntryWithIdentifier:@"nyancat"
success:^(CDAResponse *response, CDAEntry *entry) {
NSLog(@"%@", entry.fields);
}
failure:^(CDAResponse *response, NSError *error) {
NSLog(@"%@", error);
}];
您可以使用与Delivery API文档中描述的查询选项查询条目、资产等。
[client fetchEntriesMatching:@{ @"content_type": @"cat" }
success:^(CDAResponse *response, CDAArray *entries) {
NSLog(@"%@", [[entries.items firstObject] fields]);
}
failure:^(CDAResponse *response, NSError *error) {
NSLog(@"%@", error);
}];
结果以CDAEntry
、CDAAsset
、CDAContentType
或CDASpace
类的对象形式返回,这取决于调用的获取方法。如果有多个结果,它们将作为CDAArray
实例返回,该实例在items属性中封装了实际资源。
本存储库包含多个示例,演示了在常见真实世界场景中的使用,同时展示了将SDK集成到您自己的项目中不同的方法。
使用自定义条目类
您可能想要继承CDAEntry
以在条目旁边存储额外的数据,或者将应用程序的其他部分与Contentful SDK的API解耦。为此,您可以注册自定义类以特定内容类型,如下所示
[client registerClass:[MYSuperCoolClass class] forContentTypeWithIdentifier:@"MyContentType"];
每次需要创建指定内容类型的条目对象时,都会创建MYSuperCoolClass
的实例。确保该类继承自CDAEntry
,否则这种机制将在运行时中断。
离线支持
移动设备不一定总是具备数据连接,因此缓存从 Contentful 接收的数据以供离线使用是有意义的。SDK 提供了两种机制,可以帮助您实现这一目标
所有资源类都支持 NSCoding
并提供了将数据存储到和从平面文件中加载数据的方便方法
[someEntry writeToFile:@"/some/path"];
CDAEntry* readEntry = [CDAEntry readFromFile:@"/some/path" client:client];
大多数 UIKit 扩展都有一个 offlineCaching
属性,它透明地使用此机制在离线时显示内容。
如果您想使用其他解决方案,有一个抽象的 CDAPersistenceManager
类,它提供了 Core Data 的一个 示例实现。它支持将资源映射到其他方法,以便易于管理您的对象图,并将其与 Contentful 同步 API 相关联。查看 Core Data 示例应用程序以自行集成。
在这两种情况下,您可以使用 SDK 中 UIImageView
类别的 offlineCaching_cda
属性来使任何图像视图透明地将其内容缓存在磁盘上的平面文件中。这将仅缓存用户在应用程序在线时查看过的图像。
预览模式
内容交付 API 只返回已发布的条目。然而,您可能想在将内容公开给用户之前先在应用程序中对内容进行预览。为此,您可以使用预览模式,该模式会返回 所有 条目,无论其发布状态如何。
CDAConfiguration* configuration = [CDAConfiguration defaultConfiguration];
configuration.previewMode = YES;
CDAClient* client = [[CDAClient alloc] initWithSpaceKey:@"YourSpaceKey"
accessToken:@"YourAccessToken"
configuration:configuration];
除了配置选项之外,您可以将 SDK 直接到应用程序中,只有一项例外:您需要获取一个预览访问令牌,您可以在 Contentful 应用程序的“API”标签中获取此令牌。在预览模式下,数据可能无效,因为不会对未发布的条目进行验证。您的应用程序需要处理这种情况。请注意,访问令牌绝不应与生产应用程序一起发货。
UIKit 扩展
SDK 包含一些 UIKit 类的扩展,用于常用场景。您可以在示例中看到许多它们的使用方法,或者阅读 这篇文章 了解它们的一些细节。
文档
欲获取更多详细信息,请查看开发者文档或浏览API文档。后者的内容也可以加载到Xcode中作为文档集合。
安装
CocoaPods
CocoaPods是为Objective-C设计的依赖项管理器,可以自动简化并简化在项目中使用第三方库(如Contentful Delivery API)的过程。
platform :ios, '8.0'
pod 'ContentfulDeliveryAPI'
这是保持您Contentful Delivery API版本更新的最简单方式。
对于使用iOS 8的Swift支持,您可以在CocoaPods中启用框架支持使用。
platform :ios, '8.0'
use_frameworks!
pod 'ContentfulDeliveryAPI'
手动集成
如果偏好手动管理依赖项,只需将Code
子目录中的所有文件拖入您的项目中,或将ContentfulDeliveryAPI
静态库目标集成到您的构建过程中。如果您选择此路径,将其作为Git子模块添加可能是一个好主意。
请注意,Contentful Delivery API需要AFNetworking和ISO8601来成功编译,因此在手动集成时,您需要提供这些依赖项。
静态框架
您可以通过链接下载Contentful Delivery API作为通用的iOS静态框架。通过解压缩并将ContentfulDeliveryAPI.framework
拖动到项目中的Frameworks
组中来整合到您的项目中。您还可以下载包含静态框架的UFO示例应用程序,作为Integration into an Xcode project的示例。
静态框架包含
它依赖于iOS项目中默认未包含的SystemConfiguration.framework
,因此请在General
选项卡上打开您的项目文件。
在底部的Linked Frameworks and Libraries
部分中单击+
按钮。
搜索SystemConfiguration并将框架添加到您的项目中。
用同样的方法添加MobileCoreServices,因为该框架也是必需的。
单元测试
Contentful Delivery API已进行全面单元测试。
要运行测试,请执行以下步骤
$ gem install xcpretty cocoapods cocoapods-testing
$ make test
或直接从Xcode运行。
许可证
版权 © 2014,2015 Contentful GmbH。有关详细信息,请参阅LICENSE。