FirebaseのCloud Storageアップした画像をAndroidアプリで表示する方法です。
下記の環境で試します。
- Firebase 26.2.0
- Android Studio 4.1.2
- Glide 4.12.0
ライブラリ読み込み
build.gradle に下記を追記します。
// Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:26.2.0') // Declare the dependency for the Cloud Storage library implementation 'com.google.firebase:firebase-storage-ktx' implementation 'com.firebaseui:firebase-ui-storage:6.4.0' // glide implementation 'com.github.bumptech.glide:glide:4.12.0' kapt 'com.github.bumptech.glide:compiler:4.12.0'
画像表示
YOUR_STORAGE_PATH にはFirebase Cloud Storageにアップした画像のURLを入れてください。
val storage = Firebase.storage val storageRef = storage.getReferenceFromUrl("YOUR_STORAGE_PATH") val ONE_MEGABYTE: Long = 1024 * 1024 storageRef.getBytes(ONE_MEGABYTE).addOnSuccessListener { val imageView = view.findViewById<ImageView>(R.id.image) GlideApp.with(this) .load(storageRef) .centerCrop() .into(imageView) }.addOnFailureListener { // Handle any errors Log.e("TAG", it) }
ハマりどころ
セキュリティルール
Firebaseのセキュリティルールの設定を忘れているとアクセスできないので、事前に設定しましょう。
FirebaseUIを利用したGlide表示
Glideを使用すると、Failed to find any ModelLoaders registered for model class: class com.google.firebase.storage.StorageReference
というエラーが出ます。
GlideApp使う必要があります。
GlideModuleのカスタマイズ
下記のようにAppGlideModuleをカスタマイズします。
ビルドするとGlideAppが生成されるので、GlideAppで画像読み込みをすればOKです。
@GlideModule class MyGlideAppModule: AppGlideModule() { override fun registerComponents(context: Context, glide: Glide, registry: Registry) { super.registerComponents(context, glide, registry) registry.append( StorageReference::class.java, InputStream::class.java, FirebaseImageLoader.Factory() ) } }
こんな風に画像が表示されます。
参考
https://firebase.google.com/docs/storage/android/start?hl=ja