我使用nodejs
创建脚本,通过Publishing API将我的APK上传到Google Play开发者,但失败了。我认为,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'));
});
}
答案 0 :(得分:3)
我认为你对NodeJS流如何工作有误解。
在您上面显示的示例代码中,您尝试将navigator.camera.getPicture(gotPhotoLibrary, onError, {
quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY,
allowEdit: true,
targetWidth: 200, //what widht you want after capaturing
targetHeight: 200
});
return true;
function gotPhotoLibrary(imageUri) {
var options = {
quality: 150,
widthRatio: 1,
heightRatio: 1,
targetWidth: 600,
targetHeight: 600
};
plugins.crop.promise(imageUri, options)
.then(function success(newPath) {
window.resolveLocalFileSystemURI(newPath, function (fileEntry) {
fileEntry.file(function (fileObj) {
// your code here
});
});
});
}
function onError(err) {
alertPopup = $ionicPopup.alert({
title: '',
template: err
});
}
的结果导入request.post
,这对您来说没有任何意义和错误的原因没有发送任何apk文件。相反,它应该像下面这样完成。 (我不确定androidpublisher api是如何工作的,我假设你的样本显示正确的用法。)
fs.createReadStream
答案 1 :(得分:0)
根据https://developers.google.com/games/services/publishing/:
Google Play游戏服务发布API可让您自动化 频繁的任务必须做(...)
你是否受限于使用JS& node.js执行此任务?如果没有,您可能会发现这个Google management-tools代码示例很有用。
在此存储库中,您可以找到可帮助您发布,管理和管理的工具 测试您的Play游戏服务应用
在我看来,安装Python(并重复使用官方代码)总是更好。
(Google Devs显然更喜欢使用python进行此类任务)
答案 2 :(得分:0)
你看过fastlane.tools了吗?为Android和iOS提供完整的发布,上传,截屏,松弛通知以及更多内容的脚本。