ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

mBaaSを使ったデモアプリの紹介(ファイルストア編)

mBaaSはサーバサイドの仕組みになりますので、どういったものなのかは一度体験してみないと分かりづらいでしょう。そこで今回はニフティクラウド mobile backendを使ったデモアプリの紹介です。各機能ごとにミニマムにまとめてありますのでコードを見ればすぐに理解できるかと思います。

これまでのデータストア、Facebook認証に続いて、今回はファイルストア機能を解説します。

ファイルストアを使ったカメラアプリ

ファイルストアとは写真や動画、音楽などをはじめとしたバイナリファイルを保存するストレージになります。今回はカメラで撮影した写真をアップロードできるカメラアプリを作ってみたいと思います。

$ git clone git@github.com:moongift/NCMBiOSCamera.git

利用の際にはCocoaPodsを使いますのでインストールします。

$ [sudo] gem install cocoapods
$ pod install

終わったら NCMBiOS_Camera.xcworkspace を開きます。

設定を変更する

Xcodeが開いたら NCMBiOS_Camera/Settings.swift を開きます。

// アプリケーションキー
let kNCMBiOSApplicationKey = "YOUR_APPLICATION_KEY"
// クライアントキー
let kNCMBiOSClientKey = "YOUR_CLIENT_KEY"

と書かれていますので、ニフティクラウド mobile backendのアプリケーションキーとクライアントキーに変更してください。アプリケーションキーとクライアントキーはmBaaSの管理画面より取得ができます。

アプリの実行

ここまでくれば準備は完了しましたのでアプリをビルドしてみます。完了すると上にカメラアイコンがあるのが分かるかと思います。

タップするとカメラが起動します。最初はアクセス権限が求められます。

そしてカメラで撮影します。

Use Photoをタップすると、写真が自動的にファイルストアにアップロードされます。そして一番最初の画面に戻ると写真が一覧表示されます。

何枚も写真を撮ると、それに合わせてリストが更新されていきます。

mBaaSの管理画面を見ると、写真がアップロードされているのが確認できます。

mBaaSを使っているところ

今回の処理では写真をファイルストアに保存する処理を行っています。処理としては次のようになります。

func uploadPhotoWighImage(image: UIImage) {
    let resizedImage = self.resizeImage(image, ratio: 0.1) // 10% に縮小
    let pngData = NSData(data: UIImagePNGRepresentation(resizedImage)!)
    print("データサイズ: \(pngData.length / 1024)")

    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    let file = NCMBFile.fileWithData(pngData) as! NCMBFile
    file.saveInBackgroundWithBlock({ (error: NSError!) -> Void in
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
        if error == nil {
            let photo = Photo.object() as! Photo
            photo.filename = file.name
            print("保存完了: \(photo.filename)")
            photo.saveInBackgroundWithBlock({ (error: NSError!) -> Void in
                if error == nil {
                    self.objects.insert(photo, atIndex: 0)
                    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
                    self.collectionView?.insertItemsAtIndexPaths([indexPath])
                } else {
                    print("写真情報をデータストアに保存失敗: \(error)")
                }
            })
        } else {
            print("アップロード中にエラーが発生しました: \(error)")
            if error.code == 413001 {
                print("ファイルサイズが大きすぎます")
            }
        }
    }, progressBlock: { (percentDone: Int32) -> Void in
        // 進捗状況を取得します。保存完了まで何度も呼ばれます
        print("進捗状況: \(percentDone)% アップロード済み")
    })
}

処理としてはまず NCMBFileを使ってファイルオブジェクトを作ります。

let file = NCMBFile.fileWithData(pngData) as! NCMBFile

そして saveInBackgroundWithBlock を実行して結果を非同期で受け取っています。

file.saveInBackgroundWithBlock({ (error: NSError!) -> Void in

mBaaSを使えばこのように簡単にクラウドストレージが使えるようになります。ファイルにユーザ権限を持たせることもできますので自分の写真を他のユーザと共有したり、プロテクトすると言った仕組みも簡単にできます。ぜひコードを参考にmBaaSを使ってみてください。

ニフティクラウドmobile backend mbaas ご紹介 概要資料