无法通过Publisher API将APK上传到Google Play开发者

时间:2018-01-16 04:16:19

标签: javascript node.js google-api apk google-publisher-tag

我使用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'));
    }); 
}

3 个答案:

答案 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提供完整的发布,上传,截屏,松弛通知以及更多内容的脚本。