Обработка ошибок облачного хранилища на Android

Иногда дела идут не так, как планировалось, и возникает ошибка.

В случае сомнений проверьте возвращаемую ошибку и посмотрите, что говорится в сообщении об ошибке. В следующем коде показана реализация пользовательского обработчика ошибок, которая проверяет код ошибки и сообщение об ошибке, возвращаемые Cloud Storage. Такие обработчики ошибок можно добавлять к различным объектам, используемым в Cloud Storage API (например, UploadTask и FileDownloadTask ).

Kotlin+KTX

internal inner class MyFailureListener : OnFailureListener {
    override fun onFailure(exception: Exception) {
        val errorCode = (exception as StorageException).errorCode
        val errorMessage = exception.message
        // test the errorCode and errorMessage, and handle accordingly
    }
}

Java

class MyFailureListener implements OnFailureListener {
    @Override
    public void onFailure(@NonNull Exception exception) {
        int errorCode = ((StorageException) exception).getErrorCode();
        String errorMessage = exception.getMessage();
        // test the errorCode and errorMessage, and handle accordingly
    }
}

Если вы прочитали сообщение об ошибке и у вас есть правила безопасности облачного хранилища, которые разрешают ваши действия, но вы все еще не можете исправить ошибку, посетите нашу страницу поддержки и сообщите нам, как мы можем помочь.

Обработка сообщений об ошибках

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

Чтобы правильно диагностировать проблему и устранить ошибку, вот полный список всех ошибок, которые выдает наш клиент, и причин их возникновения. Коды ошибок в этой таблице определены в классе StorageException как целочисленные константы.

Код Причина
ERROR_UNKNOWN Произошла неизвестная ошибка.
ERROR_OBJECT_NOT_FOUND По нужной ссылке не существует объекта.
ERROR_BUCKET_NOT_FOUND Для облачного хранилища не настроен ни один сегмент.
ERROR_PROJECT_NOT_FOUND Ни один проект не настроен для облачного хранилища.
ERROR_QUOTA_EXCEEDED Квота в вашем сегменте Cloud Storage превышена. Если вы используете бесплатный уровень, перейдите на платный план. Если у вас платный план, обратитесь в службу поддержки Firebase.
ERROR_NOT_AUTHENTICATED Пользователь не авторизован, пожалуйста, авторизуйтесь и повторите попытку.
ERROR_NOT_AUTHORIZED Пользователь не имеет прав на выполнение желаемого действия. Проверьте свои правила, чтобы убедиться в их правильности.
ERROR_RETRY_LIMIT_EXCEEDED Превышено максимальное время выполнения операции (загрузка, скачивание, удаление и т. д.). Попробуйте еще раз.
ERROR_INVALID_CHECKSUM Файл на клиенте не соответствует контрольной сумме файла, полученного сервером. Попробуйте загрузить еще раз.
ERROR_CANCELED Пользователь отменил операцию.

Кроме того, попытка вызвать getReferenceFromUrl() с недопустимым URL-адресом приведет к созданию исключения IllegalArgumentException . Аргумент вышеуказанного метода должен иметь форму gs://bucket/object или https://firebasestorage.googleapis.com/v0/b/bucket/o/object?token=<TOKEN>