Загрузите APK и установите трек для публикации - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь установить новый трек и загрузить APK для публикации с использованием nodejs ... Но ни APK не загружен, ни трек не установлен.

Но результаты проверки и всех других шагов в точности соответствуют моим ожиданиям (согласно API ). Сценарий выполнен успешно, но в консоли разработчика ничего не меняется ... Так есть ли магический гуру, который может увидеть мою проблему?

ПРИМЕЧАНИЕ 1 : я опубликовал свое приложение вручную, потому что android-publisher предназначен только для обновления приложений, которые были опубликованы до

ПРИМЕЧАНИЕ 2 : это работало раньше (давным-давно) и перестало работать на некоторое время, я наконец-то нашел время обновить все

Мой код:

var google = require('googleapis').google;
var Promise = require('bluebird');
var _ = require('lodash');
var settings = require('./config/settings.json');

// Enable API access into the Developer Console: https://play.google.com/apps/publish/?account=7639196906174529268#ApiAccessPlace
// Create a service account
// Download the JSON and save it here
// Make sure the email of the JSON is added to the apps for release manager role:
// https://play.google.com/apps/publish/?account=7639196906174529268#AdminPlace
var key = require('./config/google-play-user.json');

// editing "scope" allowed for OAuth2
var scopes = [
    'https://www.googleapis.com/auth/androidpublisher'
];

var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2();
var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, scopes, null);
var play = google.androidpublisher({
    version: 'v3',
    auth: oauth2Client,
    params: {
        // default options
        // this is the package name for your initial app you've already set up on the Play Store
        packageName: settings.app.id
    }
});

google.options({auth: oauth2Client});

// Start with a new edit.
startEdit().then(function(data) {
    // Load our APK(in this case a Cordova APK).
    var standardAPK = require('fs').readFileSync('./platforms/android/build/outputs/apk/android-release.apk');

    // Stage the upload (doesn't actually upload anything).
    return upload({
        edit: data.edit,
        apk: standardAPK,
        key: 'standardApk'
    });

}).then(function(data) {
    // Set our track.
    return setTrack(data);
}).then(function(data) {
    // Validate our changes.
    return validateToPlayStore(data);
}).then(function(data) {
    console.log('Successful uploaded APK files:', data);
}).catch(function(err) {
    console.log(err);
    process.exit(1);
});

/**
 *  Sets our authorization token and begins an edit transaction.
 */
function startEdit() {
    return new Promise(function(resolve, reject) {
        jwtClient.authorize(function(err, tokens) {
            if (err) {
                console.log(err);
                process.exit(1);
                return;
            }

            // Set the credentials before we doing anything.
            oauth2Client.setCredentials(tokens);

            play.edits.insert({
                packageName: settings.app.id
            }, function(err, edit) {
                if (err || !edit) { reject(err); }

                resolve({
                    edit: edit.data
                });
            });
        });
    });
}

/**
 *  Stages an upload of the APK (but doesn't actually upload anything)
 */
function upload(data) {
    var edit = data.edit;
    var apk = data.apk;
    var key = data.key;

    return new Promise(function(resolve, reject) {
        play.edits.apks.upload({
            editId: edit.id,
            packageName: settings.app.id,
            media: {
                mimeType: 'application/vnd.android.package-archive',
                body: apk
            }
        }, function(err, res) {
            if (err || !res) { reject(err); }

            // Pass any data we care about to the next function call.
            var obj = {};
            obj[key] = res.data;
            resolve(_.omit(_.extend(data, obj), 'apk'));
        });
    });
}

/**
 *  Sets our track (beta, production, etc.)
 */
function setTrack(data) {
    var edit = data.edit;
    var track = 'production';

    return new Promise(function(resolve, reject) {
        play.edits.tracks.update({
            editId: edit.id,
            track: track,
            packageName: settings.app.id
        }, function(err, res) {
            if (err || !res) { reject(err); }

            resolve(_.extend(data, {setTrackResults: res.data}));
        });
    });

}

/**
 *  Validates our edit transaction and makes our changes live.
 */
function validateToPlayStore(data) {
    return new Promise(function(resolve, reject) {
        // play.edits.commit({ // Commit will set the change LIVE
        play.edits.validate({ // Validate will only validate it, not set it LIVE.
            editId: data.edit.id,
            packageName: settings.app.id
        }, function(err, res) {
            if (err || !res) { reject(err); }

            resolve(_.extend(data, {validateToPlayStoreResults: res.data}));
        });
    });
}

Первоначально с http://frontendcollisionblog.com/javascript/2015/12/26/using-nodejs-to-upload-app-to-google-play.html, когда он все еще работал

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете использовать playup для загрузки APK в Google Play. Playup - это дружественная оболочка / CLI для пакета googleapis.

Пример CLI:

npx playup \
  --auth ./config/google-play-user.json \
  --recent-changes "en-US='lorem ipsum dolor'" \
  ./platforms/android/build/outputs/apk/android-release.apk

Пример Node.js:

const key = require('./config/google-play-user.json')
const publisher = require('playup')(key)

publisher.upload('./platforms/android/build/outputs/apk/android-release.apk', {
  recentChanges: {
    'en-US': 'lorem ipsum dolor'
  }
}).then(function (data) {
  console.log(` > ${data.packageName} version ${data.versionCode} is up!')
})

Воспроизведение не поддерживалось некоторое время, но оно все еще функционирует. Я также работаю над fork , чтобы сделать его немного более современным.

...