Как получить URL из хранилища Firebase getDownloadURL

Я пытаюсь получить «долгосрочную постоянную ссылку на скачивание» для файлов в нашем хранилище Firebase. Я изменил разрешения этого на

service firebase.storage { match /b/project-xxx.appspot.com/o { match /{allPaths=**} { allow read, write; } } } 

И мой javacode выглядит так:

 private String niceLink (String date){ String link; // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); link = dateRef.getDownloadUrl().toString(); return link; } 

Когда я запускаю это, я получаю ссылку uri, которая выглядит примерно как [email protected]

Вопрос 1. Могу ли я получить ссылку на скачивание, аналогичную: https://firebasestorage.googleapis.com/v0/b/project-xxxx.appspot.com/o/20-5-2016.csv?alt=media&token= b5d45a7f-3ab7-4f9b-b661-3a2187adxxxx

При попытке получить ссылку выше я изменил последнюю строку перед моим возвратом, например:

 private String niceLink (String date){ String link; // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); link = dateRef.getDownloadUrl().getResult().toString(); return link; } 

Но при этом я получаю ошибку 403, а приложение терпит крах. Консоль говорит мне, что пользователь bc не входит в систему / auth. «Пожалуйста, войдите, прежде чем просить токен»

Вопрос 2. Как это исправить?

Когда вы вызываете getDownloadUrl() , вызов является асинхронным, и вы должны подписаться на успешный обратный вызов для получения результатов:

 // Calls the server to securely obtain an unguessable download Url private void getUrlAsync (String date){ // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); dateRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(Uri downloadUrl) { //do something with downloadurl } }); } 

Это вернет общеansible неопознанный URL-адрес загрузки. Если вы просто загрузили файл, этот общеansible URL-адрес будет иметь обратный вызов для успешной загрузки (вам не нужно вызывать другой метод async после того, как вы его загрузили).

Однако, если все, что вы хотите, является String представлением ссылки, вы можете просто вызвать .toString()

 // Returns a Uri of the form gs://bucket/path that can be used // in future calls to getReferenceFromUrl to perform additional // actions private String niceRefLink (String date){ // Points to the root reference StorageReference storageRef = FirebaseStorage.getInstance().getReference(); StorageReference dateRef = storageRef.child("/" + date+ ".csv"); return dateRef.toString(); } 
  • Библиотека PDF для рендеринга файлов PDF в Android
  • Объем переменной, объявленной внутри цикла for
  • Предотвратить показ веб-страницы «веб-страница недоступна»
  • Как сделать объединение, пересечение, разность и обратные данные в java
  • Как прокрутить до нижней части RecyclerView? scrollToPosition не работает
  • Недопустимый символ в пути по индексу 16
  • Получить координаты кнопок и определить, находится ли над ними пальцы - Android
  • Android: как обращаться с кнопкой
  • IntelliJ IDEA с Junit 4.7 "!!! Ожидается, что версия JUnit версии 3.8 или более поздняя:
  • Фрагмент добавить или заменить не работает
  • Как создать кнопку динамически в android?
  • Давайте будем гением компьютера.