LoginSignup
3
3

More than 5 years have passed since last update.

SwiftでBackendlessのストレージから非同期にデータ取得

Posted at

背景

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) ストレージに該当するクラス定義

Testtable.swift
class Testtable: NSObject {
    var objectId : String?
    var created : NSDate?
    var updated : NSDate?
    var ownerId : String?

    var title : String?  //ユーザー定義カラム
}

2) データ取得

AppDelegate.swift
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などもまだ理解しきれていない部分も多々あります。今後少しずつ積み重ねていければと思います。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3