質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1698閲覧

UnityでAndroidビルドしたゲームからスプレッドシートを読み取ろうとするとJsonのシリアル化で例外が発生します。

suittizihou

総合スコア27

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/08/25 05:51

###症状
UnityでAndroidビルドしたゲームから難易度設定のパラーメーターを書いたシートの値を読み取りたいのですが、実機上だと謎のエラーが出て読み取れません。

コードは一部抜粋していますが、関係ある部分は以下の通りです。
OpenSheetをAwakeで呼んで認証だったりを始めています。

C#

1 /// <summary> 2 /// シートを開く(認証などもする) 3 /// </summary> 4 public void OpenSheet() 5 { 6#if UNITY_EDITOR 7 StartAPI("client_secret.json"); 8#elif UNITY_ANDROID 9 AndroidStreamingAssets("client_secret.json"); 10#endif 11 } 12 13 14#if !UNITY_EDITOR && UNITY_ANDROID 15 ///<summary> 16 ///Android用StreamingAssets読み込み関数 17 /// </summary> 18 private void AndroidStreamingAssets(string fileName) 19 { 20 var path = Application.streamingAssetsPath + "/" + fileName; 21 22 var request = UnityWebRequest.Get(path); 23 request.SendWebRequest().completed += (AsyncOperation operation) => StartAPI(request); 24 } 25 26 /// <summary> 27 /// Android用 28 /// </summary> 29 /// <param name="request"></param> 30 private void StartAPI(UnityWebRequest request) 31 { 32 ICredential credential = null; 33 34 credential = GoogleCredential.FromJson(request.downloadHandler.text).CreateScoped(new[] { SheetsService.Scope.Spreadsheets }).UnderlyingCredential; 35 36 SetServices(credential); 37 } 38#endif 39 40 private void SetServices(IConfigurableHttpClientInitializer credential) 41 { 42 // Create Google Sheets API service. 43 service = new SheetsService(new BaseClientService.Initializer() 44 { 45 HttpClientInitializer = credential, 46 ApplicationName = applicationName, 47 }); 48 49 sheetRoadComplete.Invoke(); 50 }

エラー文は以下の通りです。

C#

1JsonSerializationException: Unable to find a constructor to use for type 2Google.Apis.Auth.OAuth2.JsonCredentialPrameters. A class should either have a default constructor. one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'type', line 2 position 9.

###試したこと
このエラーはどうやら「Google.Apis.Auth.OAuth2.JsonCredentialPrameters」にコンストラクタがないと言われているようだったのでGoogle APIをデコンパイルしてこのクラスにコンストラクタを追加したオリジナルクラスを作成し、内部の関数を引っ張ってきてJsonファイルをデシリアライズするなどやってみたのですが、PCではうまくいくけれどAndroidでは謎の現象が起きてうまくいきませんでした。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/27 03:35

Unityは使ってなくて今インストールすらしてませんが、あなた個人に複数の問題がありそうです。 ・環境的な記述がない ・同じ質問を何度も繰り返す(低評価対象です) ・コードが断片だけ 回答が必要ならあなたが欲しいものを欲しい欲しい言ってるだけでは誰も手を差し伸べません。
guest

回答1

0

ベストアンサー

同じ問題に遭遇しました。
そもそも公式的にUnityがサーポート対象じゃないからこういう問題が起こりますね。

自分が使った方法は、FromJsonの中のその処理↓を抜き出して、Jsonファイル内の値をハードコーディング(または別の形)でその処理に渡せば、なんとなくできました。
https://github.com/googleapis/google-api-dotnet-client/blob/d79fd199a45ed803348ab8c8381a527a8ad447cf/Src/Support/Google.Apis.Auth/OAuth2/DefaultCredentialProvider.cs#L261-L267

しかし、ここが解決できたとしても、自分はそのあとのシートから読み込むところでまた別の問題が出てきました。今回はソースコードがちょっと深くて、抜き出しにくいですが、一応諦めています。


もしAndroidだけなら、別の対策があります。
Scripting BackendをMonoにして、Managed Stripping LevelをDisabledにすれば、Androidの実機では問題なく動きます。
ただ、これでは64bits対応ができなくなっちゃいます。開発途中だけ使うならいいですけど、リリース向けではないです。

iOSはまだ対策が見つかりませんでした。

投稿2021/01/14 15:51

rockwjx

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suittizihou

2021/02/03 16:39

ありがとうございます。 とても参考になります。 やはりなかなか厳しいようですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問