前提・実現したいこと
アプリの最新バージョンがあるかどうかチェックし、ストアに誘導するために、プラットホームをAndroidに変更した状態で、現在使用しているアプリのバージョンを取得したいです。
発生している問題・エラーメッセージ
アプリバージョンを取得するために Application.version とういコードを使用したのですが、バージョンを取得することができません(Editor上でしたまだ試せていないため、実機でも取得でききないかは分かりません)。
プラットホームをIOSに変更した場合は正常に Application.version でアプリバージョンの取得ができています。
Application.versionを使用できる状態にするか、その以外の方法でどうにかして現在のアプリバージョンを取得したいです。
該当のソースコード
c#
1private void VersionCheckAndroid() 2 { 3 var url = string.Format("https://play.google.com/store/apps/details?id={0}", Application.identifier); 4 5 VersionNum.GetValueAsync().ContinueWith(task => { 6 if (task.IsFaulted) 7 { 8 // Handle the error... 9 } 10 else if (task.IsCompleted) 11 { 12 DataSnapshot snapshot = task.Result; 13 string andVer = snapshot.Child("Android").GetValue(true).ToString(); 14 if (VersionComparative(andVer)) 15 { 16 StoreURL = url; 17 GameManager.playStageBGM(0); 18 UIView[8].SetActive(true); ; 19 } 20 } 21 }); 22 } 23 24bool VersionComparative(string storeVersionText) 25 { 26 if (string.IsNullOrEmpty(storeVersionText)) 27 { 28 return false; 29 } 30 try 31 { 32 var storeVersion = new Version(storeVersionText); 33 var currentVersion = new Version(Application.version); 34 35 if (storeVersion.CompareTo(currentVersion) > 0) 36 { 37 return true; 38 } 39 } 40 catch (Exception e) 41 { 42 Debug.LogErrorFormat("{0} VersionComparative Exception caught.", e); 43 } 44 return false; 45 }
エラーコード
UnityEngine.UnityException: get_version can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function. at (wrapper managed-to-native) UnityEngine.Application.get_version() at StageSelectCon.VersionComparative (System.String storeVersionText) [0x00019] in D:\UnityWork\SpatialBall_2\Assets\Script\System\StageSelectCon.cs:740 VersionComparative Exception caught. UnityEngine.Debug:LogErrorFormat(String, Object[]) StageSelectCon:VersionComparative(String) (at Assets/Script/System/StageSelectCon.cs:749) <>c__DisplayClass82_0:<VersionCheckAndroid>b__0(Task`1) (at Assets/Script/System/StageSelectCon.cs:709) System.Threading._ThreadPoolWaitCallback:PerformWaitCallback()
試したこと
以下のコードを追加したところ
Debug.Log(andVer);
Debug.Log(Application.version);
Debug.Log(andVer);
最初のandVerは出力され Application.version以下のコードが実行されなくなることから、Application.versionがエラーの原因ということが分かったのですが、Application.version以外の方法でアプリバージョンを取得する方法が分かりません。
補足情報(FW/ツールのバージョンなど)
Unity 2019.3.15f1
windiws10 64bitを使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。