2023/11/12 : 初稿
Unity : 2022.3.12f1
マシン : M1Mac(Metal) Sonoma14.1.1
Xcode : 15.0.1 (15A507)
UnityでiOSアプリを作ってて、mBaasとしてFirebaseを導入することになりました。ということでFirebaseのアカウント作ってプロジェクト作って、と公式ドキュメントの手順通りに導入すればうご・・・かない。
ともかく、実機でデータベースからデータ読み出せる&Storageにファイルアップロードできるまでにやったことをメモしておきます。
GoogleService-info.plistの再ダウンロード
Firebaseプロジェクトの設定を色々やってからもう一度ダウンロードしたやつを使う。
RealtimeDatabaseならRealtimeDatabaseを作ってから。
Firebaseのプロジェクト作った直後にダウンロードしろと言われたやつでは情報が足りない。公式のサンプルコード実行しようとしてもFirebaseDatabase.DefaultInstance.RootReference
でnullアクセスしたり、Database URL not set in the Firebase config.
みたいなwarningが出たり。一応DefaultInstance
ではなくGetInstance("https://ほにゃらら-default-rtdb.firebaseio.com/")
でURL直指定すれば動くものの、やはり気になる。
GoogleService-Info.plist file missing REVERSED_CLIENT_ID, Google Sign-In will fail to initialize.
どうもサインイン手段としてGoogle認証をOKしないとだめっぽい。
メアド認証のみだと発行されず、Unityのビルド時に上記エラーが出てた。
Google認証も可能にした後、GoogleService-info.plistを再ダウンロードすればOK。
GoogleService-info.plistの配置場所
Assets/Firebase
が正解っぽい。ドキュメントにはAssetsの下ならどこでも良いみたいなこと書いてるけど、それだとダメだった。
cocoapodsの再インストール
こちらの記事を参考に、一旦アンインストールした後homebrewでインストール。
https://qiita.com/noprops/items/f997a438fabb64c15f10
これやらないとUnityのビルドで.xcodeprojが吐き出されはするものの
unity firebase iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project.
みたいなログ出るし、実際Xcodeでもフレームワークがリンクできない的なエラーが出る。
ついでにcocoapods問題
ターミナルでUnity-iPhone.xcworkspaceのあるフォルダを開いて
インテルMacなら
pod install
M1Macなら
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
とかやると解決することもある・・かも。
xcodeのプロジェクト
Unity-iPhone.xcodeprojではなくUnity-iPhone.xcworkspaceを開いてビルド
xcodeでリンクエラー
FirebaseConsoleでFirestoreと間違えてRealtimeDBの方を作ってしまったせいか、
それとも元々Firestoreでも必要なのか、
FIRDatabaseとかなんとかがリンクできないって出てたので、
仕方なくFirebaseDatabase.unitypackageをインポート。
中に含まれるファイルが100MB超えてるのでGitLFSを使わないとプッシュできないという罠付き。
一旦有効化したRealtimeDBを無効化したけど、GoogleService-info.plistにはRDBに関連する項目が残ったままで、実際リンクも通らない。手動で削除すればいいのかもしれないけど、誰か教えてください
ついでにxcodeのリンクが通らない対処その2
UnityFrameworkを選んでBuild Settingsを選択、Build Active Architecture OnlyをNoしてみる。
実機でStorageにローカルファイルをアップロードできない
firebase.storage.storageexception: no object exists at the desired reference
xcodeでログ見ると上記のエラー。
PutFileAsync()に渡すローカルファイルのパスは、"file://"で始めないといけない模様。
エディタだと問題なく動いちゃうひどい罠。
firebasecppapp-11_6_0.bundleは、開発元を検証できないため開けません。
Macのシステム設定>プライバシーとセキュリティ
この中に該当ファイルが開けませんみたいな項目出てるのでここで許可する。
セキュリティルール
最初はテストモードで作りましたが、早めにアクセス制限しておいた。
例えばデータベースのルート直下にUsersっていうデータがあって、こいつは
Authenticationを使って認証された人だけが読み取れるようにしたいとするなら、こんな感じにする。
{
"rules": {
"Users": {
".read": "auth != null",
}
}
}
似たようなサンプルはネットにあるけど、ここでいう"Users"ってなんだ?と思ってたら自分でデータベースに追加した項目のキーだったのね。