Причина "500 нет отдельных ошибок" в Google Play Store. Редактировать коммит - PullRequest
0 голосов
/ 01 октября 2018

У меня есть простой инструмент в C #, который использует пакет nuget Google.Apis.AndroidPublisher.v3 для развертывания приложения на дорожке внутреннего тестирования в качестве последнего шага в моей автоматической сборке.Он работал без проблем с середины июля, когда я писал инструмент до середины сентября (последнее успешное выполнение: 2018-09-17).Тогда я не трогал приложение пару недель;по состоянию на прошлую пятницу (2018-09-28), инструмент завершается с Google.GoogleApiException без внутреннего исключения, сообщением

Google.Apis.Requests.RequestError
 [500]
No individual errors

и трассировкой стека

   at Google.Apis.Requests.ClientServiceRequest`1.<ParseResponse>d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Google.Apis.Requests.ClientServiceRequest`1.Execute()
   at MyProject.Tools.PlayStoreUploader.Program.Deploy(AndroidPublisherService service, String packageName, String releaseName, FileInfo apkFile, Int32 mainObbVersionCode, FileInfo patchObbFile, String releaseNotes) in C:\dev\MyProject\Tools\MyProject.Tools.PlayStoreUploader\Program.cs:line 211
   at MyProject.Tools.PlayStoreUploader.Program.Main(String[] args) in C:\dev\MyProject\Tools\MyProject.Tools.PlayStoreUploader\Program.cs:line 126

Deploy Метод, который, по сути, выполняет всю работу:

    private static void Deploy(
        AndroidPublisherService service,
        string packageName,
        string releaseName,
        FileInfo apkFile,
        int mainObbVersionCode,
        FileInfo patchObbFile,
        string releaseNotes)
    {
        var edits = service.Edits;

        // Create a new edit
        string editId = edits.Insert(null /* no body */, packageName).Execute().Id;

        // Upload new apk
        int apkVersion;
        using (Stream strm = apkFile.OpenRead())
        {
            var uploadRequest = edits.Apks.Upload(packageName, editId, strm, MimeTypeApk);
            uploadRequest.Upload();
            apkVersion = uploadRequest.ResponseBody.VersionCode.Value;
        }

        // Attach an existing main obb
        edits.Expansionfiles.Update(
                new ExpansionFile { ReferencesVersion = mainObbVersionCode },
                packageName,
                editId,
                apkVersion,
                UpdateRequest.ExpansionFileTypeEnum.Main).
            Execute();

        // Attach a new patch file
        if (patchObbFile != null)
        {
            using (Stream strm = patchObbFile.OpenRead())
            {
                edits.Expansionfiles.Upload(
                        packageName,
                        editId,
                        apkVersion,
                        // This Google API is clearly auto-generated by a badly written tool, because it duplicates the enums.
                        UploadMediaUpload.ExpansionFileTypeEnum.Patch,
                        strm,
                        MimeTypeObb).
                    Upload();
            }
        }

        // Assign apk to "Internal test" track.
        var release = new TrackRelease
        {
            Name = releaseName,
            VersionCodes = new long?[] { apkVersion },
            ReleaseNotes = new List<LocalizedText> { new LocalizedText { Language = "en", Text = releaseNotes } },
            Status = TrackReleaseStatus.Completed
        };
        edits.Tracks.Update(
                new Track { Releases = new List<TrackRelease> { release } },
                packageName,
                editId,
                TrackIdentifier.Internal).
            Execute();

        // Publish
        edits.Commit(packageName, editId).Execute();
    }

Соответствующие константы

        const string MimeTypeApk = "application/vnd.android.package-archive";
        const string MimeTypeObb = "application/octet-stream";

        // As documented at https://developers.google.com/android-publisher/tracks
        static class TrackIdentifier
        {
            public const string Alpha = "alpha";
            public const string Beta = "beta";
            public const string Internal = "internal";
            public const string Production = "production";
        }

        // As (poorly) documented at https://developers.google.com/android-publisher/api-ref/edits/tracks#resource
        // See also https://android-developers.googleblog.com/2018/06/automating-your-app-releases-with.html
        static class TrackReleaseStatus
        {
            /// <summary>Not yet rolled out to anyone</summary>
            public const string Draft = "draft";
            /// <summary> For staged rollouts to a small percentage of users</summary>
            public const string InProgress = "inProgress";
            /// <summary> Suspends a staged rollout</summary>
            public const string Halted = "halted";
            /// <summary> Full rollout</summary>
            public const string Completed = "completed";
        }

Исключение выдается в предпоследней строке Deploy, edits.Commit(packageName, editId).Execute();.Это исключает ошибку аутентификации как причину, поскольку предыдущие вызовы были успешными.Возможные причины сбоев, перечисленные в документации для edits / commit :

  • Вы открываете еще одно редактирование для того же приложения после открытия этого редактирования
  • Любой другой пользователь вносит изменения в приложение, когда ваше редактирование открыто
  • Вы или любой другой пользователь вносит изменения в приложение через консоль разработчика, когда ваше редактирование открыто

но я уверен, что ни один из них не применим.

Что еще может объяснить, почему я могу настроить редактирование, включая загрузку APK и OBB, но не фиксировать его?

1 Ответ

0 голосов
/ 03 октября 2018

Это похоже на ошибку в консоли Play, о чем свидетельствует код ошибки 500 , что означает «Внутренняя ошибка».

При возникновении подобных ситуаций я бы рекомендовал обратиться в Play Console.поддержка, чтобы сообщить им о проблеме.Вы можете сделать это через меню справки в консоли воспроизведения, которое находится за "?"(знак вопроса).

...