iOS SDK for Contentstack
Contentstack 是一种无头 CMS,采用 API-first 方法。它是一种开发人员可以使用以构建跨平台强大应用程序的 CMS。构建您的应用程序前端,Contentstack 会负责其余部分。了解更多信息。
Contentstack 提供了 iOS SDK,用于在 iOS 上构建应用程序。以下是如何开始使用我们的 iOS SDK 的详细指南和有用的资源。
先决条件
最新版本的 Xcode 和 Mac OS X
设置和安装
要在iOS平台上使用此SDK,您必须按照以下步骤安装SDK。
CocoaPods
- 请将以下行添加到您的Podfile中
- pod 'Contentstack'
- 运行pod install,现在您应该有Contentstack的最新版本。
导入头文件/模块
您可以在Objective-C项目中导入头文件,如下
- Objective-C
#import <Contentstack/Contentstack.h>;
- Swift
import Contentstack
使用Contentstack的关键概念
Stack
Stack就像一个容器,它保存了您应用的内容。了解更多关于Stacks的信息。
内容类型
内容类型让你定义页面或数字属性某个部分的架构或蓝图。它是一个类似表单的页面,为内容管理人员提供输入和上传内容的界面。了解更多信息,请点击这里。
条目
条目是指使用一个已定义的内容类型创建的实际内容。了解更多关于条目的信息。
资产
资产指的是上传到Contentstack的所有媒体文件(图像、视频、PDF、音频文件等)。这些文件可以在多个条目中使用。更多关于资产的信息。
环境
发布环境对应一个或多个部署服务器或需要发布条目的内容交付目的地。了解如何与环境协作。
Contentstack iOS SDK: 5分钟快速入门
初始化您的SDK
要开始在您的应用中使用该SDK,您需要通过提供与它们关联的所需密钥和值来初始化堆栈
- Objective-C
Stack *stack = [Contentstack stackWithAPIKey: API_KEY accessToken: ACCESS_TOKEN environmentName: ENVIRONMENT];
- Swift
let stack:Stack = Contentstack.stackWithAPIKey(API_KEY, accessToken: ACCESS_TOKEN, environmentName: ENVIRONMENT)
获取上述API凭据,您需要登录您的Contentstack账户,然后转到顶部导航面板中的设置 -> 堆栈以查看您的API密钥和访问令牌
返回的堆栈对象是一个Contentstack客户端对象,可用于初始化不同的模块并针对我们的内容交付API进行查询。下面各节的初始化过程将进行解释。
从您的堆栈查询内容
要获取某个内容类型的所有条目,请使用以下查询
- Objective-C
ContentType *contentTypeObject = [stack contentTypeWithName:@"my_content_type"]; Query *queryObject = [contentTypeObj query];
- Swift
var contentTypeObject:ContentType = stack.contentTypeWithName("my_content_type") var queryObject:Query = contentTypeObj.query()
要获取特定内容类型的一个条目,请使用以下查询
- Objective-C
ContentType * contentTypeObject = [stack contentTypeWithName:@"my_content_type"]; Entry *entryObject = [contentTypeObject entryWithUID:@"ENTRY_UID"];
- Swift
var contentTypeObject:ContentType = stack.contentTypeWithName("my_content_type") var entryObject:Entry = contentTypeObject.entryWithUID("ENTRY_UID")
高级查询
您可以使用iOS API参考查询内容类型、条目、资产等。
处理图像
我们引入了图像交付API,允许您检索图像,然后对它们进行操作和优化,以适应您的数字属性。它还允许您执行一系列其他操作,如裁剪、修剪、调整大小、旋转、叠加等。
例如,如果您想裁剪一个图像(宽度为300,高度为400),您只需将查询参数附加到图像URL的末尾即可,例如,https://images.contentstack.io/v3/assets/download?crop=300,400。您还可以使用其他几个参数对图像进行操作。
您还可以在此SDK中使用图像交付API函数。以下是其在SDK中的几个用法示例。
- Objective-C
/* set the image quality to 100 */ NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:100], @"quality", nil]; NSString *transformedUrl = [stack imageTransformWithUrl:imageURL andParams:params]; /* resize the image by specifying width and height */ NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:100], @"width", [NSNumber numberWithInt:100], @"height", nil]; NSString *transformedUrl = [stack imageTransformWithUrl:imageURL andParams:params]; /* enable auto optimization for the image */ NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:@"webp", @"auto", nil]; NSString *transformedUrl = [stack imageTransformWithUrl:imageURL andParams:params];
- Swift
/* set the image quality to 100 */ let params:[String : AnyObject?] = [ "quality":100 as AnyObject ]; let transformedUrl:String = stack.imageTransformation(withUrl: imageURL, andParams: params); /* resize the image by specifying width and height */ let params:[String : AnyObject?] = [ "width":100 as AnyObject, "height":100 as AnyObject, ]; let transformedUrl:String = stack.imageTransformation(withUrl: imageURL, andParams: params); let params:[String : AnyObject?] = [ "auto":"webp" as AnyObject ]; let transformedUrl:String = stack.imageTransformation(withUrl: imageURL, andParams: params);
使用iOS SDK与同步API
同步API负责同步Contentstack数据与您的应用程序,并通过提供增量更新来确保数据始终是最新的。Contentstack的iOS SDK支持同步API,您可以使用它来构建强大的应用程序。阅读以下内容以了解如何使用Contentstack iOS SDK同步API。
初始化同步
初始化同步过程将执行应用程序数据的完全同步。它将返回指定堆栈的所有已发布条目和资产。
要启动初始化同步过程,请使用syncStack方法。
- Objective-C
[stack sync:^(SyncStack * _Nullable syncStack, NSError* _Nullable error) { //error for any error description //syncStack for SyncStack //syncStack.syncToken: contains token for next sync Store this token For next sync //syncStack.paginationToken: contains token for next sync page this token for next sync //syncStack.items: contains sync data if (syncStack.paginationToken != nil) { [[NSUserDefaults standardUserDefaults] setValue:syncStack.syncToken forKey:@"Token"]; }else { [[NSUserDefaults standardUserDefaults] setValue:syncStack.syncToken forKey:@"SyncToken"]; } }];
- Swift
stack.sync({ (syncStack:SyncStack, error:NSError) in //error for any error description //syncStack for SyncStack //syncStack.syncToken: contains token for next sync Store this token For next sync //syncStack.paginationToken: contains token for next sync page this token for next sync //syncStack.items: contains sync data If let token = syncStack.paginationToken { UserDefault.standard.setValue(token, forKey:"PaginationToken") }else if let token = syncStack.syncToken { UserDefault.standard.setValue(token, forKey:"SyncToken") } })
响应还将包含一个同步令牌,您需要将其存储起来,因为此令牌稍后用于获取后续的增量更新,如下面的后续同步部分所示。
您还可以使用高级同步查询在初始化同步中获取自定义结果。
同步分页
如果初始同步(或后续同步)的结果包含超过100条记录,则响应将进行分页。它在响应中提供分页令牌。但是,您无需手动使用分页令牌来获取下一批;SDK会自动执行,直到同步完成。
分页令牌可用于获取选定的批次。如果同步过程在中途中断(由于网络问题等),则尤其有用。在这种情况下,可以使用此令牌从上次中断的地方重新启动同步过程。
- Objective-C
[stack syncPaginationToken: <pagination_token> completion:^(SyncStack * _Nullable syncStack, NSError* _Nullable error) { //error for any error description //syncStack for SyncStack //syncStack.syncToken: contains token for next sync Store this token For next sync //syncStack.paginationToken: contains token for next sync page this token for next sync //syncStack.items: contains sync data if (syncStack.paginationToken != nil) { [[NSUserDefaults standardUserDefaults] setValue:syncStack.syncToken forKey:@"Token"]; }else { [[NSUserDefaults standardUserDefaults] setValue:syncStack.syncToken forKey:@"SyncToken"]; } }];
- Swift
stack.syncPaginationToken(<pagination_token>, completion: { (syncStack:SyncStack, error:NSError) in //error for any error description //syncStack for SyncStack //syncStack.syncToken: contains token for next sync Store this token for next sync //syncStack.paginationToken: contains token for next sync page this token for next sync //syncStack.items: contains sync data If let token = syncStack.paginationToken { UserDefault.standard.setValue(token, forKey:"PaginationToken") }else if let token = syncStack.syncToken { UserDefault.standard.setValue(token, forKey:"SyncToken") } })
后续同步
您可以使用同步令牌(在初始同步后获得)来获取下一次更新的内容。同步令牌只获取自上次同步后添加的内容以及被删除或更新的内容的详细信息。
-
Objective-C
[stack syncToken: <sync_token> completion:^(SyncStack * _Nullable syncStack, NSError* _Nullable error) { //error for any error description //syncStack for SyncStack //syncStack.syncToken: contains token for next sync Store this token For next sync //syncStack.paginationToken: contains token for next sync page this token for next sync //syncStack.items: contains sync data if (syncStack.paginationToken != nil) { [[NSUserDefaults standardUserDefaults] setValue:syncStack.syncToken forKey:@"PaginationToken"]; }else { [[NSUserDefaults standardUserDefaults] setValue:syncStack.syncToken forKey:@"SyncToken"]; } }];
-
Swift
stack.syncToken(<sync_token>, completion: { (syncStack:SyncStack, error:NSError) in //error for any error description //syncStack for SyncStack //syncStack.syncToken: contains token for next sync Store this token for next sync //syncStack.paginationToken: contains token for next sync page this token for next sync //syncStack.items: contains sync data If let token = syncStack.paginationToken { UserDefault.standard.setValue(token, forKey:"PaginationToken") }else if let token = syncStack.syncToken { UserDefault.standard.setValue(token, forKey:"SyncToken") } })
高级同步查询
您可以使用高级同步查询在执行初始同步时获取自定义结果。请参阅高级同步查询文档。
有帮助的链接
MIT 许可证 (MIT)
版权所有 © 2012-2022 Contentstack。保留所有权利
特此授予任何取得此软件及其相关文档副本(以下称为“软件”)的人免费权限,无限制地处理软件,包括但不限于以下权利:使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向获得软件的人提供此项做同样操作的权利,前提遵守以下条件
上述版权声明和许可声明应包含在软件所有副本或其本质部分。
软件按“现状”提供,不提供任何形式的保证,无论明示还是暗示,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权持有者不必对此软件或其使用或其它交易引起的任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其它事务,起源于、与软件或其使用或其它交易有关。