iOSのプログラム言語SwiftでFirebaseのStorageを使ってみたい!

今回はFirebase Storageを使ってみたいと思います。
これまでと同様にテストアプリを動かすまでの流れを書いて行きます。
Xcodeプロジェクト作成からFirebaseの導入まで
Xcodeのプロジェクト作成してFirebaseの導入までを行います。
「iOSのプログラム言語SwiftでFirebaseのRealtime Databaseを使ってみたい!」の
「Xcodeプロジェクトを作成する」から「XcodeにFirebaseを導入する」
までと同じ手順となるのでそちらを参照してください。ただし、一点違う手順があるので参照する前の下記の赤枠部分の内容を確認してください。
Podfileを開いて
pod ‘Firebase/Database’
の箇所に、
pod ‘Firebase/Core’
pod ‘Firebase/Storage’
を追加します。
次に(プロジェクト名).xcworkspaceからXcodeを起動します。
AppDelegate.swiftを選択して
import Firebase
FirebaseApp.configure()
を下記のコードの位置に追加します。
import UIKit
import CoreData
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
return true
}
}
FirebaseのStorageを設定する
Firebase ConsoleのStorageのセキュリティルールの設定とダウンロード用の画像ファイルの追加を行います。
左側のメニューから[Develop]-[Storage]を選択し、Storageの「ルール」タブに切り替えたら入力項目を上記の内容に変更します。
初期状態であれば4行目のallow read, write;の箇所のみの変更になります。
次にStorageの「ファイル」タブを選択し、「ファイルをアップロード」ボタンを押してダウンロード用の画像を追加します。
StorageへアクセスするにはこのStorageのパスが必要になります。これは「ファイルをアップロード」ボタン横にある「gs://(任意のパス名)」がStorageのパスになります。
テストアプリの実装で使用するのであからじめコピーしておくかこのパスを覚えておいてください。
テストアプリを実装する
ここからはテストアプリを実装していきます。
実装内容は、
・表示されている画像をStorageへアップロードする。
・アップロードされた画像をStorageから削除する。
・Storageに保存されている画像をダウンロードして表示する。
となります。
Main.storyboardを選択してViewController上に必要なコントロールの配置を行います。
「アップロード」「削除」「ダウンロード」のUIButtonコントロールとアップロード・ダウンロード用のUIImageViewコントロールを配置します。アップロード用のUIImageViewは任意の画像をプロジェクトに追加しておきUIImageViewのプロパティからその画像を選択してあらかじめ表示されるように設定してください。
import UIKit
import Firebase
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func upload(_ sender: AnyObject) {
let storage = Storage.storage()
let reference = storage.reference(forURL: "gs://fir-test-d879d.appspot.com")
let child = reference.child("upload_my.png")
let data = UIImagePNGRepresentation(UIImage(named: "my")!)!
child.putData(data, metadata: nil) { (metadata, nil) in
}
}
@IBAction func download(_ sender: AnyObject) {
let storage = Storage.storage()
let reference = storage.reference(forURL: "gs://fir-test-d879d.appspot.com")
let child = reference.child("download.jpg")
child.getData(maxSize: 1 * 1024 * 1024) { data, error in
if error != nil {
} else {
self.imageView.image = UIImage(data: data!)
}
}
}
@IBAction func remove(_ sender: AnyObject) {
let storage = Storage.storage()
let reference = storage.reference(forURL: "gs://fir-test-d879d.appspot.com")
let child = reference.child("upload_my.png")
child.delete(completion: nil)
}
}
ViewController.swiftに上記ソースコードから実装部分を追加します。ソースコードまるまるコピペ※でもOKです。
※ただしStorageへアクセスするパス「gs://fir-test-d879d.appspot.com」は使用するFirebaseプロジェクトのStorageパスを指定してください。
最後にストーリボード上のコントロールとソースコードのIBOutlet&IBActionの紐づけを行いましょう。
upload ・download・removeの各メソッドはそれぞれ「アップロード」「ダウンロード」「削除」ボタンのMouse Downイベントと紐付けを行います。コード上のIBOutletのUIImageViewはダウンロード用に配置したUIImageViewコントロールと紐づけします。
ここまでできたら実装完了です。
最後にXcodeのシミュレーターを起動させてStorageの画像に対するアクセスが出来ているのかを確認していきましょう。
まとめ
StorageもRealtime DatabaseやAuthentication機能と同じく簡単に実装する事ができました。
今回でSNSなどのアプリを作る上で最低限の必要かなと思われる機能の実装を確認してみましたが、ユーザ登録やログインを行いチャットしながらファイルなどのデータをやりとりする簡単なアプリならコストをかけずに素早くできるのではないかと思いました。
Google Firebase以外にもAmazonのAWS Mobile HubやMicrosoft Azure等のmBaaSも色々と調べてみるのもありかなと思います。どれが使い勝手が良いのかは実際に使ってみて初めてわかりますしね。
ただGoogle Firebaseも今回は「Realtime Database」「Authentication」「Storage」機能の基本的な部分の使い方に留まっているのでより具体的な機能の使い方やこの3つの機能以外のものも色々あるのでこれらを使いこなせる様にするのもありですね。
ここからはより知識を深めようとするなら簡単なテストアプリを作るよりちゃんとしたアプリを作りながら勉強していくほうが効率的だと思うので近いうちに何かアプリを企画して作ってみようと思います。