最初に記事を書いたときは、StorageでAssetBundleを利用したいと考えていたけど、
記事を書いた後に作業を進めていくと、DownloadHandlerAssetBundle.GetContent()でnullが返されるという不具合に遭遇。
しかも実機のときだけ。(こういうの一番困るー!)
Unityでは読み込めているのでFirebaseのルール設定の問題ではなくUnity側の(私が書いたスクリプトの)問題だと思われるが、修正方法も回避方法も見つからず断念。
で、AddressableというpackageがAssetBundle周りの処理をやってくれて便利らしいということを知って、現在それを利用してみようと模索中。
ということで、この記事の主旨を変更しました。(2020/12/30)
- セキュリティ保護ルールの設定
- ロケーションの設定
- Storageにフォルダを作成してみる
- とりあえず、適当なファイルをアップロードしてみる
- ルールを設定する
- ルールをシミュレーションしてみる
- 場所
- 認証済みチェック
セキュリティ保護ルールの設定
Storageを新規で作成すると、ルールどうする?って聞かれる。
後からでも変更できるので、とりあえず次へ進む。
ロケーションの設定
これはプロジェクト全体の設定になるし、後から変更できないので、慎重に選択すべし。
すでに他のサービスで設定してる場合は聞かれないかも。
ロケーションには2種類あって、マルチリージョンとリージョンがあるらしい。
よくわからんが、データをどこで保管する?って感じなんだと勝手に理解。
やはり近い方が読み込みが早いらしいのと、課金にも関係してくるみたい。
日本では、2020年現在下記の2箇所があるみたい。
- asia-northest1 : 東京
- asia-northest2 : 大阪
Storageにフォルダを作成してみる
Storageのページの左上にFilesという項目があるので、そこをクリックする。
リストの右端にフォルダマークがあるのでそれをクリックすると作成できる。
publicというフォルダを作ってみた。
とりあえず、適当なファイルをアップロードしてみる
下図の青いボタンでアップロードできる。
フォルダの中に入れたい場合は、フォルダを開いてからアップロード作業をすること。
public > 炎.mp3をアップロードした場合
あの・・・鬼滅じゃないです。ただの効果音です。笑
ルールを設定する
ルールは左上のRulesタブから設定できる。
デフォルトルール
デフォルトのルールがこれになる。
認証済みの人しか読み書きできないよってルールになってる。
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
読み込みのみに限定したい
writeを外す
allow read: if request.auth != null;
書き込みのみに限定したい
readを外す
allow write: if request.auth != null;
誰でもアクセスできるようにしたい
if request.auth != null;
を消す
allow read, write;
読みと書きで設定を変えたい
readとwriteを続けて書けばOK。
下の例は、読み:誰でも 書き:認証済み
allow read; allow write: if request.auth != null;
特定のフォルダに対してルール設定したい
下記のように、2回目のmatchの後ろに/フォルダ名
を挿入する。
matchと/の間は半角スペースを入れること。
match /public/{allPaths=**} { }
注意点
指定したフォルダは親に設定されているルールの影響を受けるので、そちらが優先されて予期しない結果になることがある。
例えば、publicフォルダは書き込み不可に設定していても、ルート(というのかな?)のほうで認証済みなら書き込み可能の設定をしていると、ユーザーはpublicに書き込みできてしまう。
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /public/{allPaths=**} { allow read; } match /{allPaths=**} { allow read,write: if request.auth != null; } } }
ルールをシミュレーションしてみる
ルールのところにある下図のボタンをクリックするとシミュレーションの条件を入力できるようになる。
シミュレーションタイプ
get : readで設定したルールが適応される
create(データ作成) , update(データ更新) , delete(データ削除): writeで設定したルールが適応される
場所
取得したいデータのパスを入力する
認証済みチェック
チェックを入れると認証済みのユーザーがアクセスした場合のシミュレーションをしてくれる。
特定のユーザーに限定したいなどがあれば、チェックを入れた時に展開される項目に追加で設定していく。
実行する
以下の条件をシミュレーションする場合
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /public/{allPaths=**} { allow read; allow write: if request.auth != null; } } }
認証しないでpublicをget
認証しないでpublicにcreate
認証済みでpublicにcreate
以上