Android Publisher: «Имена треков в пути запроса и теле запроса должны совпадать». - PullRequest
4 голосов
/ 12 марта 2020

Я использую библиотеку google-api- python -client для загрузки приложений в Google Playstore. Все работало хорошо до сегодняшнего дня. Я не изменил свой скрипт загрузки, но теперь я получаю сообщение об ошибке:

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/androidpublisher/v3/applications/[packageName]/edits/[editId]/tracks/internal?alt=json returned 
**"Track names in request path and request body must match."**

Это мой скрипт загрузки:

from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client.service_account import ServiceAccountCredentials
import json
import mimetypes

package_name = '...'
keyfile_content = '...'
apk_file = '...'
release_name = '...'
track = 'internal'

mimetypes.add_type("application/octet-stream", ".apk")
mimetypes.add_type("application/octet-stream", ".aab")

keyfile_dict = json.loads(keyfile_content)
credentials = ServiceAccountCredentials.from_json_keyfile_dict(keyfile_dict, 'https://www.googleapis.com/auth/androidpublisher')
http = httplib2.Http()
http = credentials.authorize(http)

service = build('androidpublisher', 'v3', http=http)

edit_request = service.edits().insert(body={}, packageName=package_name)
result = edit_request.execute()
edit_id = result['id']

apk_response = service.edits().apks().upload(
        editId=edit_id,
        packageName=package_name,
        media_body=apk_file).execute()

print('Version code %d has been uploaded but not yet committed' % apk_response['versionCode'])

if track:
    track_response = service.edits().tracks().update(
        editId=edit_id,
        track=track,
        packageName=package_name,
        body={u'releases': [{
            u'name': release_name,
            u'versionCodes': [str(apk_response['versionCode'])],
            u'status': u'completed',
        }]}).execute()

    print('Track %s is set with releases: %s' % (
        track_response['track'], str(track_response['releases'])))
else:
    print('No track specified')

commit_request = service.edits().commit(
        editId=edit_id, packageName=package_name).execute()

print('Edit "%s" has been committed' % commit_request['id'])

Я использую google-api- python - клиент 1.7.11.

Я не смог найти ничего об ошибке онлайн. У кого-нибудь есть идея?

Обновление

Благодаря ответу 1016 * от @Silvio я мог заставить свой скрипт снова работать, добавив трек а также к телу запроса:

from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client.service_account import ServiceAccountCredentials
import json
import mimetypes

package_name = '...'
keyfile_content = '...'
apk_file = '...'
release_name = '...'
track = 'internal'

mimetypes.add_type("application/octet-stream", ".apk")
mimetypes.add_type("application/octet-stream", ".aab")

keyfile_dict = json.loads(keyfile_content)
credentials = ServiceAccountCredentials.from_json_keyfile_dict(keyfile_dict, 'https://www.googleapis.com/auth/androidpublisher')
http = httplib2.Http()
http = credentials.authorize(http)

service = build('androidpublisher', 'v3', http=http)

edit_request = service.edits().insert(body={}, packageName=package_name)
result = edit_request.execute()
edit_id = result['id']

apk_response = service.edits().apks().upload(
        editId=edit_id,
        packageName=package_name,
        media_body=apk_file).execute()

print('Version code %d has been uploaded but not yet committed' % apk_response['versionCode'])

if track:
    track_response = service.edits().tracks().update(
        editId=edit_id,
        track=track,
        packageName=package_name,
        body={u'track': track,
            u'releases': [{
            u'name': release_name,
            u'versionCodes': [str(apk_response['versionCode'])],
            u'status': u'completed',
        }]}).execute()

    print('Track %s is set with releases: %s' % (
        track_response['track'], str(track_response['releases'])))
else:
    print('No track specified')

commit_request = service.edits().commit(
        editId=edit_id, packageName=package_name).execute()

print('Edit "%s" has been committed' % commit_request['id'])

Ответы [ 4 ]

3 голосов
/ 12 марта 2020

Также добавьте "track" в тело запроса.

Например,

body={u'track': track,
u'releases': [{
u'name': release_name,
u'versionCodes': [str(apk_response['versionCode'])],
u'status': u'completed',
...

Это сработало для меня. Вы можете проверить ожидаемую структуру тела запроса здесь:

https://developers.google.com/android-publisher/api-ref/edits/tracks#resource

2 голосов
/ 12 марта 2020

У меня возникли аналогичные проблемы при публикации с Codemagi c Публикация в Google Play завершается с ошибкой «Имена треков в пути запроса и тело запроса должно совпадать» , похоже, что-то не так на стороне Google

1 голос
/ 13 марта 2020

Для других людей, которые используют java версию Android издателя, у меня была та же ошибка.

артефакт maven: google-api-services-androidpublisher

java ошибка во время публикации sh:

Exception in thread "main" com.netfinca.mobile.publish.apk.PublisherHelperException: com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Track names in request path and request body must match.",
    "reason" : "badRequest"
  } ],
  "message" : "Track names in request path and request body must match.",
  "status" : "INVALID_ARGUMENT"
}

Чтобы решить эту проблему, мы должны установить атрибут track объекта "com.google.api.services.androidpublisher.model.Track"

. код будет выглядеть так:

Edit edit = new AndroidPublisher.Builder(...);
Track trackObject = new Track().setTrack(trackValue); // trackValue could be internal, alpha, ...
edit.tracks().update(androidPackage, editId, trackValue, trackObject );

В моем случае, он пропустил это:

.setTrack(trackValue);
1 голос
/ 13 марта 2020

У меня также есть аналогичная проблема, открытая проблема здесь.

https://github.com/googleapis/google-api-python-client/issues/840

Если все люди могут пометить эту проблему, это поможет.

Я нахожусь в похожей ситуации, это сработало на прошлой неделе, а теперь сломалось ...

...