1. iOSアプリ側
1.1 環境構築
(1) iOSアプリへのFirebase SDKのインストールと、サーバ上のFirebaseプロジェクトの作成
下記サイト記載の手順に従い、iOSアプリにFirebaseを追加する。同時にiOSアプリ用のFirebaseプロジェクトをサーバ上に作成する。
https://firebase.google.com/docs/ios/setup?hl=ja
https://firebase.google.com/docs/functions/callable?hl=ja#objective-c
上記サイトでは、cocoapodsでインストールするSDKとして、Analytics、Auth、Firestoreが記されているが、これらを使用しないなら記述不要。
pod 'Firebase/Analytics'
pod 'Firebase/Auth'
pod 'Firebase/Firestore'
最低限、必要なのはFunctionsのみなので、Podfileには下記を記すだけよい。
pod 'Firebase/Functions'
1.2 コード
(1) 初期化とリージョン設定
初期化時にクライアントとなるiOSアプリのターゲット地域に近いリージョンを設定する。離れた場所を指定してしまうと料金に影響するので注意。
但し、Cloud FirestoreやCloud Storage 、Realtime Databaseを使う場合、今後使用する可能性がある場合は、デフォルトのus-central1 を使用したほうがよいので十分に検討すること。
・リージョン設定を行う初期化処理
https://firebase.google.com/docs/functions/locations?hl=ja#objective-c
(2) Cloud Functionsで定義した関数呼び出し
HTTPSCallableWithName を使用して、サーバ側の関数を呼び出す。
https://firebase.google.com/docs/functions/callable?hl=ja#objective-c
2. サーバ上のFirebase Cloud Functionsの環境構築
2.1 環境構築
2.1.1 サーバ
(1) 下記サイト記載の手順に従い、Cloud Functions用のFirebaseプロジェクトをサーバ上に作成する。
https://firebase.google.com/docs/functions/get-started?hl=ja
https://firebase.google.com/docs/functions/callable?hl=ja#objective-c
https://firebase.google.com/docs/functions/locations?hl=ja
2.1.2 ローカル
※Node Version Manager を使用する、Node.js npmのインストール(推奨)
(1)-1 Node Version Managerのインストール
ターミナルで下記コマンドを入力。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bashまたは
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
https://github.com/nvm-sh/nvm/blob/master/README.md
https://qiita.com/ffggss/items/94f1c4c5d311db2ec71a
(1)-2 Node Version Manageがインストールされているかの確認
一旦、ターミナルを閉じて再起動し、下記コマンドを入力。
nvm -vバージョン番号が表示されていたらOK。
または、下記コマンドを入力。
command -v nvmnvmと表示されていたらOK。
(1)-3 Node.jsとnpmのインストール
ターミナルで下記コマンドを入力。
nvm install --lts --latest-npm
(1)-4 Firebase CLI をインストールする。
npm install -g firebase-tools
※マニュアルインストール(アクセス権限のエラーを自力で解決する必要があるため非推奨)
(1)-1 事前に、Node.js npmをインストールする。(まだインストールしていない場合)
https://prog-8.com/docs/nodejs-env
下記のNode.js配布サイトからNode.js LTS版(推奨版)のインストーラをダウンロードしてインストールを実施。Node.jsとnpmがインストールされる。
https://nodejs.org/en/
(1)-2 Firebase CLI をインストールする。
npm install -g firebase-tools
インストール時にパーミッションのエラーが表示された場合、npmのアクセス権限を変更する。
https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally/
(2) ターミナルまたはFinderでFirebase作業用のフォルダを作る
(3) ターミナルで上記(2)のフォルダに移動し、下記コマンドを入力。
firebase login
解析情報送信に関する応答メッセージに応答すると、ブラウザのウインドウが開き、Firebase CLIが起動する。
https://github.com/firebase/functions-samples/tree/master/email-confirmation
(4) ログインに成功し、「Firebase CLI Login Successful」と表示されたら、そのブラウザのウインドウを閉じる。
(5) 上記(4)のあと、ターミナルに移動し「uccess! Logged in as MY_ACCOUNT」と表示されたら、下記コマンドを入力する。
firebase init
(6) FirenaseでCloud Functionsを使用する設定をする。
矢印キーとspaceキーで「Functions: Configure and deploy Cloud Functions」を選択し、Enterキーを押して機能を確定する。
矢印キー:機能の移動
spaceキー:機能の選択(○が緑色表示になる)
Enterキー;機能の確定
上記のほか、ターミナルで下記コマンドを入力すると、Functionsを直接選択した状態で動作できる。
firebase init functions
(7) 既存のプロジェクトを選択する。
矢印キーとspaceキーで「Use an existing project」を選択し、Enterキーを押して機能を確定する。
似たような選択肢に「Add Firebase to an existing Google Cloud Platform project 」があるが、これを選択しても上記2.1 (1) で作成したFirebaseのプロジェクトは選択肢に出てこない。
(8) 記述するコードの選択。
JavascriptまたはTypescriptのいずれかを選択する。
(9) ESLintは使用しない設定にする。
「 Do you want to use ESLint to catch probable bugs and enforce style? 」と聞かれたらNoを選択。
(10) npmで依存関係を今すぐインストールする設定にする。
「Do you want to install dependencies with npm now?」と聞かれたらYesを選択。
(11) 初期化完了の確認。
ターミナルに「Firebase initialization complete!」と表示されたらOK。
(12) Firebaseの初期化が完了したローカル開発環境のプロジェクト構造は下記サイトの「3. プロジェクトの初期化」に記されている通りになっている。
https://firebase.google.com/docs/functions/get-started?hl=ja
2.1 コード
(1) 呼び出された関数の実行とリターン値やエラー情報の返送
functions.https.onCall 関数をiOSアプリから受信した関数実行トリガーとする。
関数からエラーが返された場合のハンドラを定義すること。
https://firebase.google.com/docs/functions/callable?hl=ja#objective-c
(2) HTTPリクエストで呼び出す場合は、過剰課金を防ぐためにHTTP関数実行の確実な終了に留意する
https://firebase.google.com/docs/functions/http-events?hl=ja
https://firebase.google.com/docs/functions/terminate-functions
(3) タイムアウト値とメモリ割り当ての設定
https://firebase.google.com/docs/functions/manage-functions
(4) 再試行の設定
再施行を有効化すると、過剰課金への影響があるので注意する。
https://firebase.google.com/docs/functions/retries
(5) リージョン設定
https://firebase.google.com/docs/functions/manage-functions#modify-region
2.2 完成したコードの本番環境へのデプロイ
firebase deploy --only "関数名"
https://firebase.google.com/docs/functions/callable?hl=ja#objective-c
2.3 デプロイ時のエラー詳細をログで確認する
ターミナルで、下記コマンドを入力。
firebase functions:log
2.4 Firebaseからのlogout
ターミナルで、下記コマンドを入力。
firebase logouthttps://firebase.google.com/docs/cli?hl=ja
Firebase CLI リファレンス
https://firebase.google.com/docs/cli?hl=ja