iOS&Firebase 初めの一歩：iOSアプリのプロジェクトでFirebaseを使ってみる

## 対象読者
iOSアプリの作成経験はあるが、Firebaseはまだ使った事がない。
ざっくりとした使用感を掴みたい人。
実プロジェクトで使いそうな要素のみを抽出したサンプルアプリを作成してみる。

## 準備
まずはFirebaseにプロジェクトを登録し設定する。

### プロジェクト作成
1. 開発用のGoogleアカウントがあれば（無ければ個人のものでも良い）それでFirebase Consoleにログインする。
[Firebaseコンソール](https://console.firebase.google.com/)

2. プロジェクトを作成（プラスマークのタイル）から新規にプロジェクトを作成する。
ちなみにプロジェクトは異なるクライアント環境ごとに作る必要は*ない*。
モバイルアプリで言えばサーバーサイドの環境に当たるので、大抵はAndroidでもiOSでも共通だろう。
3. 以下を入力
    * プロジェクト名：任意のもの。
    * 地域/ロケーション：デフォルトではアメリカ合衆国になっているが、日本でサービスするならばJapanに変更した方
    * アナリティクスの地域：日本（リスト最後の方にある）
    * Cloud Firestoreのロケーション：asia-northeast1
	→これは異なるリージョン間通信が発生すると課金対象となるので、予め最もユーザーが多い地域にしておくのが有利。
	→またCloud Firestoreを利用しない場合も予め上記に設定しておいた方が良い。この値は後から変更できないからだ。
    * Firebase 向け Google アナリティクスのデータ共有にデフォルトの設定を使用する
      →基本的にアナリティクスのデータをgoogleに共有するかどうか、という内容。
      →特に個人情報を渡すわけではない（あくまでアナリティクスデータのみ）ので、
      理由がない限りはチェックしておく。
    * 測定管理者間のデータ保護条例に同意。
      →上記アナリティクスの共有に同意した場合、こちらにもチェックを付けないとプロジェクトが作成できないようになっている。
4. 少しするとプロジェクトが作成され、コンソールが表示される。


### アプリの追加
このプロジェクトを利用するクライアント（＝アプリ）を追加する。
用意されているのは、iOS・Android・Web・Unity
iOSを選択する。

1. コンソール上部の「アプリにFirebaseを追加しましよう」の下にある「iOS」アイコンをクリック
2. iOSアプリにFirebaseを追加ダイアログを入力していく
    1. Xcodeでプロジェクトを作成する。
    2. アプリの登録
	* バンドルID：Xcodeからコピぺ
	* ニックネーム：Firebaseコンソール上で識別しやすい名前が良い。アプリ名やiOSが入っていると良いのかな。
	* AppStore ID：App Store Connectにある。入れておく。
    3. 設定ファイルのダウンロード
	Firebase接続に必要な情報が書かれた設定ファイルを自動生成してくれるので、ダウンロードしてそのままプロジェクトに追加する。
	`GoogleService-Info`

    4. Firebase SDKの追加
	cocoa podsでSDKをインストールする。
		1. Cocoa podsをインストール（既にあればこの手順は不要）
		
```
$ cd プロジェクトディレクトリ
$ pod init
```
3. Podファイルを編集して保存


```
$ vi Podfile

target 'FirebaseSample2' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for FirebaseSample2
  
  pod 'Firebase/Core'		//←この1行を追加
end
```

4. インストール実行
	`$ pod install`

	これでxcworkspaceファイルができるはずなので、そこからプロジェクトを起動し、ビルドしてみる。


5. 初期化コードの追加
	AppDelegateに以下のコードを追加する。

``` swift
import Firebase

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
		// 追記する        
        FirebaseApp.configure()
        
        return true
    }
```


* Firebaseをimport
* application(application,didfinishLaunchingWithOptions)メソッドに `FirebaseApp.configure()`（Firebaseの初期化処理）を追記


6. アプリを実行して確認
初回起動時にSDKからの通信が正しく行われているかをコンソールから確認できるようになっている。
コンソール側でアプリを認識できたらOK


## 認証機能の追加
ユーザーを識別しないアプリの方が少ないと思うので、大抵は何はともあれ認証しないと始まらない。
Firebaseの認証（Authentication）の方式としては以下が用意されている。
* メール/パスワード
* 電話番号
* Google
* Playゲーム
* Game Center
* Facebook
* Twitter
* GitHub
* 匿名

この中でも多く使われそうなのは、メール/パスワード、SNS、匿名あたりだろうか。
アプリによっては電話番号も良いソリューションになるだろう。
また、自前システムでの認証などにも対応できるカスタム認証という手法も取れる（ここでは扱わない）

### 準備
準備といっても先ほどの認証方式を設定するだけ。
1. FirebaseコンソールのAuthenticationをクリック
2. ログイン方法タブをクリック
3. 認証方式（ログインプロバイダという）のうち、使うものを有効にする。

なお、FacebookやTiwtterを利用する場合、それぞれで開発者登録したうえでアプリの登録が必要となる。
この辺のことは情報も多いので各自探し、以下ドキュメントも参照してほしい。
https://firebase.google.com/docs/auth/?authuser=0

また、より詳細な情報を得るにはガイドの参照もお勧めする。
https://firebase.google.com/docs/ios/setup

### SDKの導入
Firebaseはサービスドメインごとにポッドが別れている。
既に導入しているCoreは必須ライブラリだがそれ以外は個別に指定する必要がある。

認証に関して言えば基本はAuhtなので、以下を追記することになる。

``` Podfile
pod 'Firebase/Auth'
```

また、今回は扱わないがSNSなど複数のフェデレーションを利用する場合などに便利なUI（ViewControllerサブクラス）を自動生成してくれる仕組みも用意されている。その場合には、さらに`pod 'FirebaseUI`を追記する。