Не удается загрузить APK в Google Play для разработчиков через API издателя
Я создаю сценарий, используя nodejs
загрузить мой APK в Google Play Developer через API публикации, однако это не удалось. Я думаю, что нет ничего плохого в файле APK, потому что это хороший файл. так есть идеи, чтобы решить это?
я также пробую многокомпонентную загрузку, но возвращаю ошибку (я скоро прикреплю сюда)
Ниже приведено сообщение об ошибке:
Upload successful! Server responded with: {
"error": {
"errors": [
{
"domain": "androidpublisher",
"reason": "apkInvalidFile",
"message": "Invalid APK file."
}
],
"code": 403,
"message": "Invalid APK file."
}
}
Мой исходный код
var https = require('https');
var request = require('request');
https.post = require('https-post');
var fs = require('fs');
var tokens = process.argv[2];
var formData = {
my_file: fs.createReadStream('example_file.apk')
}
if (tokens != '')
{
var url_create_listing = 'https://www.googleapis.com/androidpublisher/v2/applications/com.example.apps/edits?access_token='+tokens;
request.post( url_create_listing, function (error, response, body) {
var str_body = JSON.parse (body);
var listing_id = str_body.id;
var url_upload = 'https://www.googleapis.com/upload/androidpublisher/v2/applications/com.example.apps/edits/'+listing_id+'/apks?uploadType=media&access_token='+tokens;
var options = {
url: url_upload,
headers: {
'Content-Type': 'application/vnd.android.package-archive'
}
};
request.post( options, function optionalCallback(err, httpResponse, body)
{
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
}).pipe(fs.createReadStream('example_file.apk'));
});
}
3 ответа
Я думаю, что вы неправильно понимаете, как работают потоки NodeJS.
В приведенном выше примере кода вы пытаетесь передать результат request.post
в fs.createReadStream
что не имеет смысла, и это является причиной ошибки, поскольку вы не отправляете файл apk. Вместо этого это должно быть сделано следующим образом. (Я не уверен, как работает androidpublisher api, я предполагаю, что ваш пример показывает правильное использование.)
var url_create_listing = 'https://www.googleapis.com/androidpublisher/v2/applications/com.example.apps/edits?access_token='+tokens;
request.post( url_create_listing, function (error, response, body) {
var str_body = JSON.parse (body);
var listing_id = str_body.id;
var url_upload = 'https://www.googleapis.com/upload/androidpublisher/v2/applications/com.example.apps/edits/'+listing_id+'/apks?uploadType=media&access_token='+tokens;
// request module is capable of auto detecting the Content-Type header
// based on the file extension.
var options = {
url: url_upload
};
fs.createReadStream('example_file.apk')
.pipe(request.post(options, function optionalCallback(err, httpResponse, body){
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
}));
Вы смотрели на https://fastlane.tools/? Полный сценарий публикации, загрузки, снятия скриншотов, слабых уведомлений и многого другого для Android и iOS.
Согласно https://developers.google.com/games/services/publishing/:
API публикации игровых сервисов Google Play позволяет автоматизировать часто выполняемые задачи (...)
Вы находитесь под абсолютным ограничением для использования JS & node.js для этой задачи? Если нет, то вам может пригодиться этот пример кода инструментов управления Google.
В этом репозитории вы можете найти инструменты, которые помогут вам публиковать, управлять и тестировать приложения служб Play Games
На мой взгляд, для этого всегда лучше установить Python (и повторно использовать официальный код).
(Разработчики Google явно предпочитают Python для такого рода задач)