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

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

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

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

Android

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

Unity

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

Google

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

Q&A

0回答

1474閲覧

UnityでAndroidビルドしたアプリからGoogleSpreadSheetのデータを読み取ろうとするとエラーが出ます

suittizihou

総合スコア27

Google API

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

Android

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

Unity

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

Google

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

0グッド

0クリップ

投稿2020/08/14 20:03

編集2020/08/25 05:56

こちらはGoogle APIをデコンパイルして抜け道的にやった版です。
新しくデコンパイルをせずに正攻法で試してエラーになってしまったほうを投稿させていただいたのでリンクを載せさせていただきます。
UnityでAndroidビルドしたゲームからスプレッドシートを読み取ろうとするとJsonのシリアル化で例外が発生します。

こちらが問題のコードです。

C#

1 ///<summary> 2 ///Android用StreamingAssets読み込み関数 3 /// </summary> 4 private void AndroidStreamingAssets(string fileName) 5 { 6 var path = Application.streamingAssetsPath + "/" + fileName; 7 8 var request = UnityWebRequest.Get(path); 9 request.SendWebRequest().completed += (AsyncOperation operation) => StartAPI(request); 10 } 11 12 /// <summary> 13 /// Android用 14 /// </summary> 15 /// <param name="request"></param> 16 private void StartAPI(UnityWebRequest request) 17 { 18 ICredential credential; 19 20 MyJsonCredential.JsonCredentialParameters json = NewtonsoftJsonSerializer.Instance.Deserialize<MyJsonCredential.JsonCredentialParameters>(request.downloadHandler.text); 21 GoogleCredential googleCredential = GoogleCredential.FromServiceAccountCredential(CreateServiceAccountCredentialFromParameters(json)); 22 23 credential = googleCredential.CreateScoped(new[] { SheetsService.Scope.SpreadsheetsReadonly }).UnderlyingCredential; 24 25 SetServices(credential); 26 } 27 28 private ServiceAccountCredential CreateServiceAccountCredentialFromParameters(MyJsonCredential.JsonCredentialParameters credentialParameters) 29 { 30 if (credentialParameters.Type != "service_account" || string.IsNullOrEmpty(credentialParameters.ClientEmail) || string.IsNullOrEmpty(credentialParameters.PrivateKey)) 31 { 32 throw new InvalidOperationException("JSON data does not represent a valid service account credential."); 33 } 34 return new ServiceAccountCredential(new ServiceAccountCredential.Initializer(credentialParameters.ClientId) 35 { 36 ProjectId = credentialParameters.ProjectId, 37 QuotaProject = credentialParameters.QuotaProject, 38 KeyId = credentialParameters.PrivateKeyId 39 }.FromPrivateKey(credentialParameters.PrivateKey)); 40 } 41 /// <summary> 42 /// シートからデータを読み取る 43 /// </summary> 44 /// <param name="readCell"></param> 45 /// <returns></returns> 46 public IList<IList<object>> ReadSheet(string readCell) 47 { 48 SpreadsheetsResource.ValuesResource.GetRequest request = 49 service.Spreadsheets.Values.Get(spreadSheetID, sheetName + "!" + readCell); 50 // 読み取る(ここでエラー) 51 ValueRange response = request.Execute(); 52 // 読み取った値をリストに格納 53 IList<IList<object>> values = response.Values; 54 // データなかったらnull返す 55 if (values == null || values.Count <= 0) 56 { 57 Debug.LogError("データが存在しないか、nullです"); 58 return null; 59 } 60 61 return values; 62 } 63 64// ==================================================================================== 65 66namespace MyJsonCredential 67{ 68 public class JsonCredentialParameters 69 { 70 [JsonConstructor] 71 public JsonCredentialParameters() 72 { 73 74 } 75 76 [JsonProperty("type")] 77 public string Type { get; set; } 78 79 [JsonProperty("project_id")] 80 public string ProjectId { get; set; } 81 82 [JsonProperty("quota_project_id")] 83 public string QuotaProject { get; set; } 84 85 [JsonProperty("client_id")] 86 public string ClientId { get; set; } 87 88 [JsonProperty("client_secret")] 89 public string ClientSecret { get; set; } 90 91 [JsonProperty("client_email")] 92 public string ClientEmail { get; set; } 93 94 [JsonProperty("private_key")] 95 public string PrivateKey { get; set; } 96 97 [JsonProperty("private_key_id")] 98 public string PrivateKeyId { get; set; } 99 100 [JsonProperty("refresh_token")] 101 public string RefreshToken { get; set; } 102 103 public const string AuthorizedUserCredentialType = "authorized_user"; 104 105 public const string ServiceAccountCredentialType = "service_account"; 106 } 107}

エラー文

GoogleApiException: Parameter "spreadsheetId" is missing.

Google検索にかけてもこのエラー文が出ているものはなく万策尽きてしましました。。。
さらに謎を深めるものとして、

C#

1 /// <summary> 2 /// シートからデータを読み取る 3 /// </summary> 4 /// <param name="readCell"></param> 5 /// <returns></returns> 6 public IList<IList<object>> ReadSheet(string readCell) 7 { 8 SpreadsheetsResource.ValuesResource.GetRequest request = 9 service.Spreadsheets.Values.Get(spreadSheetID, sheetName + "!" + readCell); 10 11 // デバッグログを使用して中身の値を見る 12 Debug.Log(request.SpreadsheetId); 13 // 読み取る(ここでエラー) 14 ValueRange response = request.Execute(); 15 // 読み取った値をリストに格納 16 IList<IList<object>> values = response.Values; 17 // データなかったらnull返す 18 if (values == null || values.Count <= 0) 19 { 20 Debug.LogError("データが存在しないか、nullです"); 21 return null; 22 } 23 24 return values; 25 }

このようにデバッグログを使用して中身の値を見ると次はその右のRangeがmissingしていると言われます。
そのRangeもデバッグログで見るとなにも言われなくなるのですが、最終的には

ArgumentException: Get Method not found for 'Grant Type'

と言われて、このようなMethodはないので万策尽きてしまった形です。。。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問