uploadToPlayStore method
Future<void>
uploadToPlayStore({
- required File file,
- required PlaystoreTrackType trackType,
- required PlaystoreReleaseStatus releaseStatus,
- File? serviceAccountCredentialsFile,
Implementation
Future<void> uploadToPlayStore({
required File file,
required PlaystoreTrackType trackType,
required PlaystoreReleaseStatus releaseStatus,
File? serviceAccountCredentialsFile,
}) async {
ImpaktfullCliLogger.setSpinnerPrefix('PlayStore upload');
ImpaktfullCliLogger.startSpinner('Initializing');
if (!file.existsSync()) {
throw ImpaktfullCliError('File `${file.path}` does not exists');
}
ImpaktfullCliLogger.startSpinner('Get packageName from file');
final packageName = await _getPackageName(file);
ImpaktfullCliLogger.startSpinner('Get versionCode from file');
final versionCode = await _getVersionCode(file);
ImpaktfullCliLogger.startSpinner('Get versionName from file');
final versionName = await _getVersionName(file);
if (_apkOutputDirectory.existsSync()) {
_apkOutputDirectory.deleteSync(recursive: true);
}
ImpaktfullCliLogger.verbose('Detected package name: `$packageName`');
ImpaktfullCliLogger.verbose('Detected version code: `$versionCode`');
ImpaktfullCliLogger.verbose('Detected version name: `$versionName`');
try {
await _runWithGoogleClient(
serviceAccountCredentialsFile: serviceAccountCredentialsFile,
scopes: [
AndroidPublisherApi.androidpublisherScope,
],
handler: (client) async {
final api = AndroidPublisherApi(client);
ImpaktfullCliLogger.startSpinner('Create new release');
final appEdit = await api.edits.insert(
AppEdit(),
packageName,
);
final appEditId = appEdit.id;
if (appEditId == null) {
throw ImpaktfullCliError('AppEdit ID is null');
}
ImpaktfullCliLogger.startSpinner('Upload file');
await api.edits.bundles.upload(
packageName,
appEditId,
uploadMedia: Media(file.openRead(), await file.length()),
uploadOptions: UploadOptions(),
);
ImpaktfullCliLogger.startSpinner(
'Create release track (${trackType.value} - ${releaseStatus.value})');
final trackRelease = Track(
releases: [
TrackRelease(
versionCodes: [
versionCode,
],
name: '$versionName ($versionCode)',
status: releaseStatus.value,
),
],
track: trackType.value,
);
await api.edits.tracks.update(
trackRelease,
packageName,
appEditId,
trackType.value,
);
ImpaktfullCliLogger.startSpinner('Commit release');
await api.edits.commit(
packageName,
appEditId,
);
},
);
ImpaktfullCliLogger.clearSpinnerPrefix();
} on DetailedApiRequestError catch (e) {
if (e.message == 'Version code $versionCode has already been used.') {
throw ImpaktfullCliError(
'The version code must be higher than the previously uploaded version. (must be higher than $versionCode)');
}
rethrow;
}
}