Я смотрю старый учебник о Firebase Storage.Метод getDownloadUrl()
из UploadTask.TaskSnapshot
больше не существует, а документация мне не понятна.
Я реализовал процесс загрузки, и я могуПодтвердите, что это работает, но получить URL-адрес очень сложно, и я не могу объяснить, как это сделать, потому что:
1) Создание Task<Uri> urlTask = uploadTask.add[...]()
приведет к следующей ошибке в IDE:
Я не понимаю, потому что это указано в документации.
2) Использование reference.getDownloadUrl()
отобразит другоеURL сравнивается с тем, что отображается на консоли при просмотре деталей загруженного изображения.URL загрузки, который показывает консоль:
https://firebasestorage.googleapis.com/v0/b/chatroom-e44e6.appspot.com/o/chat_photos%2F73185640?alt=media&token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
, в то время как в журнале будет отображаться
com.google.android.gms.tasks.xxx @ xxxxxxx
Мой полный код на данный момент:
if (requestCode == RC_PHOTO_PICKER) {
if (data != null) {
Toast.makeText(MainActivity.this, "Uploading...", Toast.LENGTH_SHORT).show();
Uri file = data.getData();
final StorageReference reference = mPhotoStorageReference.child(file.getLastPathSegment());
UploadTask upload = reference.putFile(file);
upload.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Image could not be uploaded: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}).addOnCompleteListener(this, new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
ChatroomMessage message = new ChatroomMessage(null, mUsername, reference.getDownloadUrl().toString()); // <- com.google.android.gms.tasks.xxx@xxxxxxx
mMessagesDatabaseReference.push().setValue(message);
Toast.makeText(MainActivity.this, "Image uploaded!", Toast.LENGTH_SHORT).show();
}
});
}
}
В моем приложении уже реализован пользовательский интерфейс Firebase для обработки операций входа в систему, и действуют следующие правила:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}