Реализация облачной подписанной загрузки в Котлине

Я испытываю трудности с выполнением подписанной загрузки в Cloudinary с использованием Kotlin. Я реализовал свой бэкэнд, чтобы предоставить мне сигнатуру и метку времени. Вот что я сделал для создания конфигурации:

var config = HashMap<String, Any> ()
        config.put("cloud_name", "my_cloud_name");
        //config.put("apiKey", my_api_key);
        config.put("use_filename", true);

Теперь я не могу сделать MediaManager.init, используя подпись. Может кто-нибудь, пожалуйста, помогите? В Java-коде сказано сделать следующее, но я не могу воспроизвести то же самое в Kotlin:

MediaManager.init(this, new SignatureProvider() {
    @Override
    public Signature provideSignature(Map options) {
        // call server signature endpoint
    }
}, null);

2 ответа

Вот как вы запускаете MediaManager с провайдером подписи в Kotlin:

MediaManager.init(thiscontext!!, object: SignatureProvider {
        override fun provideSignature(options: MutableMap<Any?, Any?>?): Signature {
            return myBackendConnector.signRequest(options)
        }

        override fun getName(): String {
            return "myCustomSignatureProvider"
        }

    }, config)

Это будет работать при условии, что ваш бэкэнд уже имеет ключ api (так и должно быть) и что тип возвращаемого значения из вашего коннектора Signature, В противном случае вам нужно будет адаптировать результат вашего бэкенда к Signature (заполните POJO с результатом, предоставленным вашим сервером).

Получить timestampа также signatureиз вашего бэкэнда, затем добавьте их в качестве параметров.

      val options = mapOf(
  "timestamp" to // timestamp from backend,
  "signature" to // signature from backend,
  // other options from backend
)
MediaManager.get()
            .upload(uri)
            .options(options)
            .callback(uploadCallback)
            .dispatch()

Таким образом, это означает, что не нужно создавать файл .

Я пришел к использованию этого, потому что не мог заставить это работать с SignatureProviderв MediaManager.init().

Другие вопросы по тегам