「Unity/Firebase/RemoteConfig」の版間の差分
(→keyリスト取得) |
(→RemoteConfigの条件のユーザーランダムについて) |
||
| 行124: | 行124: | ||
==RemoteConfigの条件のユーザーランダムについて== | ==RemoteConfigの条件のユーザーランダムについて== | ||
| − | + | 実機だとこの条件が有効になる。Unity上のプレビューだとdefault値が帰ってきた。 | |
==firebase公式RemoteConfigメソッド== | ==firebase公式RemoteConfigメソッド== | ||
https://firebase.google.com/docs/reference/unity/struct/firebase/remote-config/config-value.html?hl=ja#struct_firebase_1_1_remote_config_1_1_config_value | https://firebase.google.com/docs/reference/unity/struct/firebase/remote-config/config-value.html?hl=ja#struct_firebase_1_1_remote_config_1_1_config_value | ||
2019年6月6日 (木) 11:42時点における版
目次
Firebase設定
unity/Firebase/基本 [ショートカット]
RemoteConfigインストール
FirebaseRemoteConfig.unitypackageをAssets/Importからインストールする
デフォルトで12時間アプリ内にキャッシュする
一度取得したものはキャッシュ時間0sであっても次回用に保持する。
Helloworld
公式 https://firebase.google.com/docs/remote-config/use-config-unity?hl=ja
use System.Collections;
Dictionary<string, object> defaults = new Dictionary<string, object>();
defaults.Add("propertyname_string", "default local string");
defaults.Add("propertyname_int", 1);
defaults.Add("propertyname_float", 1.0);
defaults.Add("propertyname_bool", false);
Firebase.RemoteConfig.FirebaseRemoteConfig.SetDefaults(defaults);
- SetDefaultsでの値はfirebaseからの取得した値が消えるとこのdefault値が使われる。
- firebaseから取得した値の後にこのSetDefaultsを入れても値の上書きはされない。
error CS0305: Using the generic type 'Dictionary<TKey, TValue>' requires 2 type argumentsエラー
Dictionary defaults 部分で、error CS0305: Using the generic type 'Dictionary<TKey, TValue>' requires 2 type argumentsエラーがでる。
-System.Collections.Generic.Dictionary defaults = new System.Collections.Generic.Dictionary(); +use System.Collections; +Dictionary<string, object> defaults = new Dictionary<string, object>();
ローカルで値取得
Dictionary<string, object> defaults = new Dictionary<string, object>();
defaults.Add("propertyname_string", "default local string");
Debug.Log("hoge=" + Firebase.RemoteConfig.FirebaseRemoteConfig.GetValue("propertyname_string").StringValue); // default local string
firebase側値取得
firebase1=hogehoge をfirebaseのRemoteConfigに登録しておく
using System.Threading.Tasks;
using System;
void Start()
{
Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(new TimeSpan(0)); // cache時間0秒としている。
fetchTask.ContinueWith(Firebase1FetchComplete);
}
void Firebase1FetchComplete(Task fetchTask)
{
switch (Firebase.RemoteConfig.FirebaseRemoteConfig.Info.LastFetchStatus)
{
case Firebase.RemoteConfig.LastFetchStatus.Success:
Firebase.RemoteConfig.FirebaseRemoteConfig.ActivateFetched();
Debug.Log("firebase1=" + Firebase.RemoteConfig.FirebaseRemoteConfig.GetValue("firebase1").StringValue); // hogehoge
break;
case Firebase.RemoteConfig.LastFetchStatus.Failure:
switch (Firebase.RemoteConfig.FirebaseRemoteConfig.Info.LastFetchFailureReason)
{
case Firebase.RemoteConfig.FetchFailureReason.Error:
Debug.Log("Fetch failed for unknown reason");
break;
case Firebase.RemoteConfig.FetchFailureReason.Throttled:
Debug.Log("Fetch throttled until " +
Firebase.RemoteConfig.FirebaseRemoteConfig.Info.ThrottledEndTime);
break;
}
break;
case Firebase.RemoteConfig.LastFetchStatus.Pending:
Debug.Log("Latest Fetch call still pending.");
break;
}
}
参考: https://qiita.com/wapa5pow/items/04edd95d312ee27f1da8
FetchAsyncキャッシュ時間
Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(new TimeSpan(600000000)); // cache時間60秒となる。
TimeSpanに入れる引数は100nsっぽい。
https://docs.microsoft.com/ja-jp/dotnet/api/system.timespan.-ctor?view=netframework-4.0
FetchComplete内でUI操作ができない問題
TaskScheduler.FromCurrentSynchronizationContext()を第二引数に追加するとFetchCompleteがUIスレッドとなる。
Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(new TimeSpan(3600 * 1000000)); // 1h cache
fetchTask.ContinueWith(FirebaseFetchComplete, TaskScheduler.FromCurrentSynchronizationContext());
void FirebaseFetchComplete(Task fetchTask)
{
GameObject.Find("AdUnitIdText").GetComponent<Text>().text = "hogehoge";
}
参考:https://stackoverflow.com/questions/4331262/task-continuation-on-ui-thread
開発モード
開発モードをonにしてもFetchAsyncのキャッシュ時間は守られた。(実測)
var settings = Firebase.RemoteConfig.FirebaseRemoteConfig.Settings; settings.IsDeveloperMode = true; Firebase.RemoteConfig.FirebaseRemoteConfig.Settings = settings;
開発モードにすると最大10人まで以下制約は解除される。
fetchAsyncを0秒としても、1時間以内でfetch回数は5回までと制限される。 Fetch throttled until 6/5/2019 3:51:37
参考:https://qiita.com/hinom77/items/185fd4d2abde370a90c7
参考:https://firebase.google.com/docs/remote-config/android
keyリスト取得
IEnumerable<string> keys = Firebase.RemoteConfig.FirebaseRemoteConfig.GetKeysByPrefix("propertyname");
foreach (string key in keys) {
Debug.Log("key=" + key);
}
RemoteConfigの条件のユーザーランダムについて
実機だとこの条件が有効になる。Unity上のプレビューだとdefault値が帰ってきた。
