facebook twitter hatena line email

「Unity/Firebase/RemoteConfig」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(firebase側値取得)
(FetchComplete内でUI操作ができない問題)
 
(同じ利用者による、間の21版が非表示)
行6: 行6:
  
 
デフォルトで12時間アプリ内にキャッシュする
 
デフォルトで12時間アプリ内にキャッシュする
 +
 +
一度取得したものはキャッシュ時間0sであっても次回用に保持する。
 +
 
==Helloworld==
 
==Helloworld==
 
公式
 
公式
行11: 行14:
  
 
<pre>
 
<pre>
System.Collections.Generic.Dictionary defaults =
+
use System.Collections;
  new System.Collections.Generic.Dictionary();
+
Dictionary<string, object> defaults = new Dictionary<string, object>();
 
defaults.Add("propertyname_string", "default local string");
 
defaults.Add("propertyname_string", "default local string");
 
defaults.Add("propertyname_int", 1);
 
defaults.Add("propertyname_int", 1);
 
defaults.Add("propertyname_float", 1.0);
 
defaults.Add("propertyname_float", 1.0);
 
defaults.Add("propertyname_bool", false);
 
defaults.Add("propertyname_bool", false);
 
 
Firebase.RemoteConfig.FirebaseRemoteConfig.SetDefaults(defaults);
 
Firebase.RemoteConfig.FirebaseRemoteConfig.SetDefaults(defaults);
 
</pre>
 
</pre>
 +
 +
*SetDefaultsでの値はfirebaseからの取得した値が消えるとこのdefault値が使われる。
 +
*firebaseから取得した値の後にこのSetDefaultsを入れても値の上書きはされない。
  
 
==error CS0305: Using the generic type 'Dictionary<TKey, TValue>' requires 2 type argumentsエラー==
 
==error CS0305: Using the generic type 'Dictionary<TKey, TValue>' requires 2 type argumentsエラー==
行76: 行81:
 
参考:
 
参考:
 
https://qiita.com/wapa5pow/items/04edd95d312ee27f1da8
 
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
 +
 +
キャッシュが切れてもSetDefaultで設定した値には戻らず、受け取った値は残り続け参照時呼び出される。
  
 
==FetchComplete内でUI操作ができない問題==
 
==FetchComplete内でUI操作ができない問題==
 +
using System.Threading.Tasks;
 
TaskScheduler.FromCurrentSynchronizationContext()を第二引数に追加するとFetchCompleteがUIスレッドとなる。
 
TaskScheduler.FromCurrentSynchronizationContext()を第二引数に追加するとFetchCompleteがUIスレッドとなる。
 
<pre>
 
<pre>
Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(new TimeSpan(3600));
+
Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(new TimeSpan(3600 * 10000000)); // 1h cache
 
fetchTask.ContinueWith(FirebaseFetchComplete, TaskScheduler.FromCurrentSynchronizationContext());
 
fetchTask.ContinueWith(FirebaseFetchComplete, TaskScheduler.FromCurrentSynchronizationContext());
  
行89: 行104:
 
</pre>
 
</pre>
  
==firebase値キャッシュしない設定==
+
参考:https://stackoverflow.com/questions/4331262/task-continuation-on-ui-thread
 +
 
 +
==開発モード==
 
  var settings = Firebase.RemoteConfig.FirebaseRemoteConfig.Settings;
 
  var settings = Firebase.RemoteConfig.FirebaseRemoteConfig.Settings;
 
  settings.IsDeveloperMode = true;
 
  settings.IsDeveloperMode = true;
 
  Firebase.RemoteConfig.FirebaseRemoteConfig.Settings = settings;
 
  Firebase.RemoteConfig.FirebaseRemoteConfig.Settings = settings;
 +
 +
開発モードにすると最大10人まで以下制約は解除される。
 +
fetchAsyncを0秒としても、1時間以内でfetch回数は5回までと制限される。
 +
Fetch throttled until 6/5/2019 3:51:37
 +
 +
開発モードをonにしてもFetchAsyncのキャッシュ時間が守られるものと守られないosがある。
 +
 +
cacehを1分にした時の例
 +
*developer_mode off
 +
android 1分
 +
iOS 1分
 +
preview 1分
 +
 +
*developer_mode on
 +
android 即反映
 +
iOS 1分
 +
preview 1分
 +
 +
参考:https://qiita.com/hinom77/items/185fd4d2abde370a90c7
 +
 +
参考:https://firebase.google.com/docs/remote-config/android
  
 
==keyリスト取得==
 
==keyリスト取得==
行99: 行137:
 
     Debug.Log("key=" + key);
 
     Debug.Log("key=" + key);
 
  }
 
  }
 +
 +
==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年7月20日 (土) 01:25時点における最新版

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

キャッシュが切れてもSetDefaultで設定した値には戻らず、受け取った値は残り続け参照時呼び出される。

FetchComplete内でUI操作ができない問題

using System.Threading.Tasks; TaskScheduler.FromCurrentSynchronizationContext()を第二引数に追加するとFetchCompleteがUIスレッドとなる。

Task fetchTask = Firebase.RemoteConfig.FirebaseRemoteConfig.FetchAsync(new TimeSpan(3600 * 10000000)); // 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

開発モード

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

開発モードをonにしてもFetchAsyncのキャッシュ時間が守られるものと守られないosがある。

cacehを1分にした時の例

  • developer_mode off
android 1分
iOS 1分
preview 1分
  • developer_mode on
android 即反映
iOS 1分
preview 1分

参考: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値が帰ってきた。

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