Google Play Consoleでの実績の登録って、実績数 * 言語数の作業が発生するのでとても手作業でやってられません。
ということで、C#からやりましょう。
Google Play Games Services Publishing APIのセットアップ
Google Play Games Services Publishing API スタートガイドの通りに、ApplicationIdとサービスアカウント(の認証情報が入ったjsonファイル)を準備します。
このApplicationId、なんと Google Play Console上でのアプリケーションのID ではなく Google Play Game Servicesに紐づいたGoogle Cloud PlatformのプロジェクトID (数字)です。
自分はこれで数時間潰しました。
取得する
あとはAPIリファレンス通りに叩くだけです。
まずはこんな感じにConfigurableHttpClientを作ってやって、
private static ConfigurableHttpClient CreateHttpClient() { var scopes = new[] { "https://www.googleapis.com/auth/androidpublisher" }; // JsonfilePathはサービスアカウントの認証情報が入ってる落としてきたjsonファイルへのパス var stream = new FileStream(JsonfilePath, FileMode.Open, FileAccess.Read); var credential = (ServiceAccountCredential) GoogleCredential.FromStream(stream) .CreateScoped(scopes) .UnderlyingCredential; var initializer = new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "DotnetScripts", }; var factory = initializer.HttpClientFactory; var args = new CreateHttpClientArgs { GZipEnabled = false, ApplicationName = initializer.ApplicationName, }; if (initializer.HttpClientInitializer != null) { args.Initializers.Add(initializer.HttpClientInitializer); } var httpClient = factory.CreateHttpClient(args); if (initializer.MaxUrlLength > 0) { httpClient.MessageHandler.AddExecuteInterceptor(new MaxUrlLengthInterceptor(initializer.MaxUrlLength)); } return httpClient; }
認証さえ通ってしまえばあとはかんたん
var httpClient = CreateHttpClient(); var request = await httpClient.GetAsync($"https://www.googleapis.com/games/v1configuration/applications/{ApplicationId}/achievements"); var resultString = await request.Content.ReadAsStringAsync();
jsonで落ちてくるので、Newtonsoft.Jsonを使って欲しいところだけファイルに保存。
var deserializeObject = JObject.Parse(resultString); var jsonString = JsonConvert.SerializeObject(deserializeObject["items"], Formatting.Indented); await File.WriteAllTextAsync(path, jsonString, Encoding.UTF8);
登録する
上記の方法で保存したjsonをよしなにいじったら、改めて登録し直します。
取得は一気にできますが、更新は1つずつ。
var httpClient = CreateHttpClient(); var jArray = JArray.Parse(await File.ReadAllTextAsync(path, Encoding.UTF8)); foreach (var (element, i) in jArray.Select((x, i) => (x, i))) { var achievementId = element["id"]!.Value<string>()!; var content = JsonConvert.SerializeObject(element, Formatting.None); Console.WriteLine($"{i + 1} / {jArray.Count} - {achievementId}"); var request = await httpClient.PutAsync($"https://www.googleapis.com/games/v1configuration/achievements/{achievementId}", new StringContent(content, Encoding.UTF8)); Console.WriteLine(request.StatusCode); if (!request.IsSuccessStatusCode) break; }
余談
AppStoreConnectは iTMSTransporter
を使って取得/登録ができます。