概要
Firebaseは、徐々にサービスが増えたり定期的にアップデートが行われておりますが、Webやゲーム以外のスマホアプリでは事例があるもの、ゲーム関連ではほぼほぼ事例がありません。
特に個人開発をやっているDeveloperがサーバレスに開発したいときに扱うことが多く、個人的にFirebaseは、大規模なゲーム案件よりもカジュアルゲームや個人開発など向けだなと感じています。
Firebase Unity SDKでは、去年6月にCloud Functionsと先月5月にはCrashlyticsがサポートされ、Unityへの対応が手強くとても喜ばしいですが、やはりWebやゲーム以外のスマホアプリの事例からすると印象が薄いように感じてしまいます。
ちなみにFirebase Unity SDKでのCloud Functionsの活用は、以前、UNIBOOK10で執筆していた際にリリースされたため詳細をまとめております。
アナリティクスやRemote Configなどはよく扱われているものの、Auth・Functions・Firestor・Storageなどの開発中にサーバが必要とする機能はあまり使われていないようだったのでUNIBOOK9での執筆やDevFest2018での登壇で知見をシェアしてきました。
今回も同様にゲームやUnityコンテンツでもFirebaseは扱えるものだと知ってもらい、もっとUnityでFirebaseを使った事例が増えていったらイイなと考えています。
本セッションの目的は、ゲームやUnityコンテンツの開発時にFirebaseを活用したアプリ開発ができるようになるです。
環境
- macOS Mojave(ver.10.14)
- Unity 2019.1.0f2
- Firebase Unity SDK 6.1.1
注意
本セッションでは、Firebase コンソールでのプロジェクトの作り方や扱い方は基本省いて進めていきます。
多くの方々が記事で解説していたり、公式のUnity プロジェクトに Firebase を追加するにガイドラインが解説されているため、そちらを参考に作業をお願いします。
Firebase Unity SDKについて
まずは、公式のUnity プロジェクトに Firebase を追加するを一通り読みましょう。
Firebaseの有名なことの1つが、公式ドキュメントが分かりやすくしかもローカライズされており至れり尽くせりです。
最悪何かのトラブルで機能が使えず開発が止まるようなことがあれば、公式のサポートがしっかり対応してくれるため使わないと損です。
把握したらFirebase Unity SDKのダウンロード
次にFirebaseプロジェクトを作成した後にコンソール上からFirebaseのUnityアプリを追加設定
といっても結局はiOS/Androidの設定が必須です。
これはFirebase Unity SDKがUnityのプラットフォームビルドでiOS/Androidにしかサポートしていないということです。
デスクトップにも対応していると公表していますが、あれは
ここでダウンロードした.jsonファイルをUnityプロジェクトの中に入れておきましょう。
Firebase Unity SDKダウンロード後、解凍して中身を見ると.NET 3.5と.NET 4.xに対応した.unitypackageが入ってありますが、.NET3.5を使うメリットはもう無いのでNET 4.x対応の方を取り込んでいきましょう。
先ほどFirebaseプロジェクトにUnityアプリを作った際に設定したパッケージ名をBundle Identifierに設定しておきましょう。
さて、これで準備が整いました。
解説するFirebaseのサービスについて
今回は、AuthとStorageを解説していきます。
Authを選んだ理由は、各サービスで設定するルールでユーザー情報が無いとサービスを利用できなくさせる設定がデフォルトにあり、セキュリティ的にもユーザー情報がある前提で設計しておいた方がセキュアなのですが、そのユーザーを作ったり管理できたりする機能がAuthに備わってあります。
そのため必ず最初に押さえておくべきサービスなのです。
Storageは、リソース管理に最適なツールです。
ルールの設定をユーザー情報がある前提に設定しておけば、Unity上でしかUpload/Downloadできないようになるためとてもセキュアでセキュリティ対策コストが低いアプリ開発ができちゃいます。
またStorageは、URLでダウンロードできる設計になっているため、WWWやAssetBundleでリソースを取得することが可能であるため最初の方で慣れておくサービスのもう一つです。
Auth
Authは、いろんなサービスとの連携が可能であり、Web界隈でFirebaseが人気であるうちの1つです。
ところが、Unityで各サービスの連携を行うには、どうしてもネイティブプラグインを作る必要が発生してしまいます。
例えば、Twitter連携ですが、他の連携も同様に最初にアクセストークンなどを必要としており、その取得方法は、iOS/Androidのネイティブコードで解説されてあります。
開発するアプリがSNS連携必須でなければ特に関係ないことですが、必須となるとかなり工数がかかってしまいます。これは開発手法の話でもありますが、最初からSNS連携を対応するよりも、まずは機能を扱えるようにして他に優先度の高い対応を進めるためにパスワードでの認証または電話番号での認証で仮実装すると良いでしょう。
そのため今回は、パスワードでの認証で解説を進めていきます。
公式に最低限扱う機能をピックアップして、それらのソースコードを載せているためそのまま参考にしちゃいましょう。
次にFirebase コンソールのAuthenticationを開いて、ログイン方法からメール/パスワードを有効にしておきましょう。
例えば、アプリ起動時にユーザー確認を処理する実装で、既存ユーザーだった場合は何もせずコンテンツを扱えうようにするが、nullでエラーの時はユーザー登録を完了しなければコンテンツが扱えないような設計を実装したとします。
上記のようにエラー内容にどうしてエラーになったのか詳細が分かり、ContinueWith
メソッドの引数Task
で処理結果がどんなステータスなのか把握できるため、ステータス違いで別機能を実装することがとても容易です。
また、パスワード認証でのAuthでは、メールアドレス毎でユーザー管理になるため同一メールアドレスで別アカウントを作ることはできません。ですが、ここでPRIMARY KEY扱いになっているメールアドレスは、@
が入った文字列であればなんでも登録できちゃう設計になってあります。
そのため、メールアドレスのフィールドに入れる文字列は、裏側で勝手に作るようにし(例えばその時のユーザーの総数+1を@
の前に付けてサービスドメインをメールアドレスのドメインにするなど)、パスワードのフィールドはUUIDを扱うよう設計すれば全て裏側で自動的にユーザーの登録と認証が可能です。
また、Firebase Admin SDKを用いてFunctionsまたは独自のサーバーとFirebase Authenticationを連携させることで開発しやすくなるサポートが付いてきます。
その中でサードパーティ、外部サービスと連携できるようになるカスタム 認証・トークンの扱い方は、GitHubにアップしているので参考になれば幸いです。
Storage
AWSだとS3にあたるサービスで、無料でこのクオリティはAWS以上ではないかなと思うくらいリソース管理に最適です。
デフォルトで設定されているルールは、Authで認証済みユーザーであれば使用可能というセキュリティ設定ですが、開発中は一旦デフォルトで大丈夫です。どうしても心配になるようでしたら公式のルールについてのガイドを読むと良いでしょう。
Storageのスタートガイドで解説されている公開アクセスの設定にて書かれてありますが、とても分かりにくいですよね^^;
しかもAuthの実装が先に完了されていれば、using Firebase;
でFirebase.Auth.
やFirebase.Storage.
など共通で扱うFirebaseクラスがAuthの情報を持っているため、ルールのセキュリティ設定を気にすることなくStorageの実装ができるように設計されてあります。
リソースのアップロードやダウンロードは以下のように実装しますが、特に注目なのがURLでのダウンロード実装が自前で必要になります。要するにFirebase.Storage
は、ルールのセキュリティの対応と問題ない場合はアクセスしたリソースのURLを返す実装になってあります(他にもこの中で色々やってそうですが知りたい場合は公式に問い合わせてみると良いかも)。
ですがこの実装で、セキュアなリソース管理ができ、大規模な開発でなければサーバを契約せずとも無料でリソースをFirebaseに管理することができるため、AssetBundleの実装もでき、Unityエンジニアとしては最高じゃないでしょうか笑
こちらもUNIBOOK10の執筆で一部書いた内容でした。
ですが、Unity 2018.2以降からAddressable Asset Systemが登場してきたため、次回はCloud StorageとAddressable Asset Systemでリソース管理に関する執筆または記事作りをやろうかなと考えておりますー!
#unitetokyo2018 講演情報
— ユニティ・テクノロジーズ・ジャパン (@unity_japan) 2018年5月4日
そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
大前 広樹(UTJ|日本担当ディレクター)
イベントの公式情報はこちらhttps://t.co/alUH8IDAkq pic.twitter.com/Xs61eL1Vx7
さいごに
おそらく最初に読んでもらったUnity プロジェクトに Firebase を追加するのステップ2に『Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。』と書かれており、初めて触る人にとっては全て理解してすぐに扱えるようになることなんて早々ないと思います。
Firebaseを使い慣れたい方は、すでに誰かがやっていることと同じことを実際にやってみて覚えていくと良いでしょう。
また、FJUG(Firebase Japan User Group)というコミュニティがあるので、FJUGのSlackに入って情報交換などすると良いでしょう。
逆にUnityをもっと扱えるようになるためには、Unityはゲーム・ビジュアルコンテンツ・ツールアプリなど色々作れちゃうので機能がとても豊富です。そのため、日々Unityでもの作りをするととても良いです。 例えば、[1WeekGameJam](https://unityroom.com/)というネット上のイベントや [@KzoNag](https://twitter.com/KzoNag)さんが主催している[ゆにくえ福岡](https://unique-fukuoka.connpass.com/)に参加するなどして経験値を貯めていきましょう!https://t.co/fnGN5Q8gJX slack の参加のURLです。 #FJUG
— コキチーズ🔥続編開発中 (@k2wanko) 2019年3月28日
【RT希望🙌】一週間でゲームを作るイベント #unity1week
— naichi (@naichilab) 2019年6月8日
次回は 7月1日(月) に開催します。
作品の品質は問いませんのでどなたでも気軽に参加ください〜。
ルールや過去作品はリンク先でご確認ください!https://t.co/2uhr9rdqDr
今週もゆるっとやります
— ながみね (@KzoNag) 2019年6月10日
ゆにくえ福岡 ~ Unity Question Space Fukuoka ~ #50 https://t.co/TOifG1VOEv #ゆにくえ福岡