こちらは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はないので万策尽きてしまった形です。。。

あなたの回答
tips
プレビュー