本チュートリアルでは、iOSアプリ開発でhacoCMSを利用する方法を解説します。
本チュートリアルでは、以下の内容については前提とし、説明を省略します。
お持ちのhacoCMSアカウントの適当なプロジェクト(無ければ作成してください)に、記事APIを以下の設定で作成してください。APIの作成方法についてはhacoCMSのドキュメントをご確認ください。
記事
(任意)entries
リスト形式
下記の表と画像を参照
# | フィールドタイプ | フィールド名(任意) | フィールド ID |
---|---|---|---|
1 | テキストフィールド | タイトル | title |
2 | テキストフィールド | 概要 | description |
3 | リッチテキスト | 本文 | body |
APIスキーマの設定画面は以下のようになります。
記事APIを作成できたら、適当な記事をいくつか作成してみましょう。コンテンツの作成方法についてはhacoCMSのドキュメントをご確認ください。
hacoCMS APIをiOSで呼び出すためのSDKであるhacoCMS iOS SDKを以下の3つの方法のいずれかでインストールしてください。
まず、Podfileファイルに下記を追加してください。
pod 'HacoCMSiOSSDK'
次に、Terminal内でpod installを実行してください。
Cartfileファイルに下記を追加してください。
github "hacocms/hacocms-ios-sdk"
Package.swiftファイルに下記を追加してください。
import PackageDescription let package = Package( [...] dependencies: [ .package(url: "https://github.com/hacocms/hacocms-ios-sdk.git", from: "1.0.1"), ] )
let client = HacoCmsClient( subDomain: SUB_DOMAIN, // Sub domain in project basic settings accessToken: ACCESS_TOKEN, // Access-Token for the project draftToken: PROJECT_DRAFT_TOKEN, // Optional: Project-Draft-Token for your project loggingRequest: true // Optional: Using for log for request )
APIから返ってきた結果をmapingするために、 CodableからextendsされたObjectを作ります。
class HacoContent: Codable { let data: [Entry] } class Entry: Codable { let id: String let title: String let description: String let body: String }
APIから返ってきた結果を処理するために、Closures もしくは Combineを通して処理します。
// Get Content List // returnType: Object is extended from Codable // includingDraft: Retrieve the list of content that include draft articles client.getListContent(returnType: HacoContent.self, path: "/entries") { result in switch result { case .success(let response): print(response.data) case .failure(let error): print(error) } } // Get Single Content client.getSingleContent(returnType: User.self, path: "/user"){ result in switch result { case .success(let response): print(response) case .failure(let error): print(error) } } // Get Detail Content client.getDetailContent(returnType: Content.self, path: "/posts", contentId: "contentID", draftToken: "draft_token") { result in switch result { case .success(let response): print(response) case .failure(let error): print(error) } }
// Get Content List // returnType: Object is extended from Codable // includingDraft: Retrieve the list of content that include draft articles client.getListContent(returnType: HacoContent.self, path: "/entries", query: query, includingDraft: false) .convertToResult() .sink(receiveValue: { result in switch result { case .success(let response): print(response.data) case .failure(let error): print(error) } }) .store(in: &subscriptions) // Get Single Content client.getSingleContent(returnType: User.self, path: "/user") .convertToResult() .sink(receiveValue: { result in switch result { case .success(let response): print(response) case .failure(let error): print(error) } }) .store(in: &subscriptions) // Get Detail Content client.getDetailContent(returnType: Content.self, path: "/posts", contentId: "contentID", draftToken: "draft_token") .convertToResult() .sink(receiveValue: { result in switch result { case .success(let response): print(response) case .failure(let error): print(error) } }) .store(in: &subscriptions)
APIリクエスト時に指定する必要があるパラメータを定義することもできます。パラメータについての詳細はhacoCMS APIリファレンスをご参照ください。
client.getListContent(returnType: ResponseData.self, path: "/posts", query: QueryBuilder(limit: 3, s: "-updatedAt")) { result in switch result { case .success(let response): print(response.data) case .failure(let error): print(error) } }