#背景
Parse.comの終了がアナウンスされたことに伴い、その移行先としてBackendlessを独習しようと思いましたので、その技術的メモを記録を残していきたいと思います(汎用性や可読性はほとんど考慮していませんので、ご了承ください)。
Backendlessに関する日本語のドキュメント/記載(とくにSwift関連)を現時点ではあまり見つけられず(Backendless.jp内には日本語のページはあっても内容が古そうなので参考にしづらく、また英語サイトへのリンクが多数はられている)、今回参考にしたページは以下のものです。
記事1. Swift examples (Backendless Support)
記事2. Blog a Feature a Day Challenge
記事3. Feature 16: Data retrieval API – how to load objects from an mBaaS storage ←これがメイン
上記の記事1でBackendlessの中の人が「Swiftのサンプルについては(まだまとまってないけど)こっちの記事(記事2)を見てよ」と書いていたので、記事2にある記事リストのなかから、ストレージ検索に関する記事(記事3、Swiftによる記載あり)を参考にしました。そのほかにも、Swiftによる記載がある記事もけっこうありそうです。
#動作環境
XCode 7.2
Backendless SDK for iOS v3.0.5
#準備
##1) Backendless SDK for iOSのインストール
XCodeで空のプロジェクトを作成後、Cocoapodsを使用してインストールしました。
platform :ios, '9,0'
pod 'Backendless-ios-SDK', '~>3.0.0'
これについては、公式サイト上の記載ではなく、zipでダウンロードできるSDKのなかにあるPDFファイルの記載を参照しました(バージョン表記のみ最新=3としました。GitHub参照でもいいかも)。
##2) ストレージの準備
Backendlessの管理画面で、あらかじめストレージを用意しておきました。今回はテストなので、
テーブル名:Testtable
追加したカラム:title
これのみです。また、適当にデータを入れておきました(2行、title="テストタイトル1"、"テストタイトル2")。
##3) アプリケーションID、iOSシークレットキーの確認
同じくBackendlessの管理画面の、管理->アプリ設定の画面で、アプリケーションID、iOSシークレットキーを確認しておきます。
準備はここまで。
#XCode側でのSwiftによる記載
##1) ストレージに該当するクラス定義
class Testtable: NSObject {
var objectId : String?
var created : NSDate?
var updated : NSDate?
var ownerId : String?
var title : String? //ユーザー定義カラム
}
##2) データ取得
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
// Backendless関連
let BACKENDLESS_APP_ID = "(上記アプリケーションID)"
let BACKENDLESS_SECRET_KEY = "(上記iOSシークレットキー)"
let BACKENDLESS_VERSION_NUM = "v1"
var backendless = Backendless.sharedInstance()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// Backendless初期化
backendless.initApp(BACKENDLESS_APP_ID, secret:BACKENDLESS_SECRET_KEY, version:BACKENDLESS_VERSION_NUM)
// Backendlessからデータ取得
let startTime = NSDate()
backendless.persistenceService.of(Testtable.ofClass()).find(
BackendlessDataQuery(),
response: { ( testtable : BackendlessCollection!) -> () in
let currentPage = testtable.getCurrentPage()
print("Loaded \(currentPage.count) testtable objects")
print("Total testtable in the Backendless starage - \(testtable.totalObjects)")
for data in currentPage {
print("testdata title = \(data.title)")
}
print("Total time (ms) - \(1000*NSDate().timeIntervalSinceDate(startTime))")
},
error: { ( fault : Fault!) -> () in
print("Server reported an error: \(fault)")
})
print("appli start")
return true
}
(以下略)
}
これを実行してコンソールに以下のように表示されました。
appli start
Loaded 2 testtable objects
Total testtable in the Backendless starage - 2
testdata title = Optional("テストタイトル2")
testdata title = Optional("テストタイトル1")
Total time (ms) - 1215.744972229
これでBackendlessのストレージからデータが非同期で取得できていることが確認できました。
#今後
今回はテストなので全部AppDelegate.swift内に書きましたが、ロジック部分については本来は適宜ViewControllerなどに書くべきでしょう。
まだ自分自身Swiftに関しても日が浅く、Backendlessについても上記記事3の記載をほぼそのまま写しただけなのでAPIなどもまだ理解しきれていない部分も多々あります。今後少しずつ積み重ねていければと思います。