0

これは奇妙なことですが、私は2つの主な用途を持っていたため、私のUnityプロジェクトでGoogleAnalyticsを使用しました.1つはScreen上のユーザー数を表示し、私はFirebaseについて聞き、それを探求したいと思っていました。私はsdkの初期化とさまざまなイベントの記録に成功しましたが、今は克服できないような大きな問題が1つあります。Unity Firebase SetCurrentScreenをメインスレッドから呼び出す必要があります

Firebase.Analytics.FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu"); 

をし、このようにそれを使用することをどこかで読ん::私は使用して私の現在の画面をログに記録しようとすると、どうやら

FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu"); 

モニター(DDMS)で見たときに、これらの機能の両方が同じエラーを与えました

SetCurrentScreen must be called from Main Thread 

私はこの機能を呼び出すたびに、なぜこのようなことが起こっているのかわからず、どこでも解決策を見つけることができません。

メソッドを呼び出す機能は次のとおりです。

public void AnalyticsLogScreen() { 
    // Log an event with a float. 
    DebugLog("Logging a Screen"); 
    Firebase.Analytics.FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu"); 

} 
+0

あなたFirebaseプラグインのバージョンは何ですか?これはかつてバグだった。また、別のスレッドからSetCurrentScreenを呼び出していますか? – Programmer

+0

私はUnity 5.5.1f1上にあり、firebaseは3.0.3です。画面を設定するクリック時にのみ関数を呼び出しています。 –

+0

3.0.3が最新バージョンのようです。多分、このバグがまた戻ってきたのかもしれない。それを確認するには、その関数を呼び出すコードを掲示し、呼び出されている場所を表示してください。あなたのコードで質問に編集を追加するだけです。たぶん誰かがあなたが間違っていることを正確に把握することができます。 – Programmer

答えて

2

あなたのワーカースレッドからSetCurrentScreenを呼び出していることが表示されます。これを確認するには、呼び出しを行っているスレッドの名前を調べるか、logcatのTIDをプロセスPIDと比較します。メインスレッドの名前は "main"で、アプリPIDと一致するTIDを持っています。

Unity SetCurrentScreenはJava FirebaseAnalytics.setCurrentScreen()メソッドにラップされています。 setCurrentScreenは、メインスレッドからのみ呼び出すことができます。

この理由は、AndroidのアクティビティがUIスレッドからのみ表示され、ワー​​カースレッドのSetCurrentScreenがUIスレッドに表示されるアクティビティとsetCurrentScreen 。この競合状態を避けるため、FirebaseはsetCurrentScreenの呼び出しをUIスレッド上で行う必要があります。ワーカースレッドから画面を設定したい場合は、runOnUiThreadと呼ぶことができますが、競合状態が発生するため、間違った画面が表示されたり、画面に記録されないイベントが表示されることがあります。

+0

URのお返事ありがとう、私はなぜこれが起こっているのか理解していますが、あなたが言及した解決策は、私の質問はUnityのためのものでしたが、Unityでこれを行うことができる方法はありますか? –

+0

いくつかの研究の後、UnityでAndroidJavaClassオブジェクトを使用していたことを実装できました。これで新しいものが作成されました。「SetCurrentScreenは同じクラスと名前を使用して呼び出すことはできません」 –

+0

この警告は、すでに設定しようとしている値に設定されています。クラスと名前が必要な値と一致する場合は、この警告を無視しても問題ありません。同じクラスと名前で新しい画面を開始する場合は、両方をnullに設定してから、必要な値に戻す必要があります。これは、クラス/名前のこのペアを、ユーザーが開いた追加のスクリーンとして数えます。 – djabi

関連する問題