티스토리 뷰
FirebaseStorage는 문서, 사진, 파일, 동영상 등을 저장할 수 있는 저장공간
참고 : https://firebase.google.com/docs/storage/android/start?authuser=0#kotlin_1
참고: https://firebase.google.com/docs/firestore/query-data/get-data?hl=ko
참고 : https://firebase.google.com/docs/storage/android/download-files?hl=ko#manage_downloads
파이어베이스에서 스토리지를 생성하게 되면 기본적으로 보안 규칙이 적용 됨.
allow read, wirte: if request.auth != null;
// Firebase 의 Authentication 에 등록된 사용자 만이 사용 가능
allow read, wirte: if true
// 모든 사용자 읽고 쓰기 가능
allow read, wirte: if false
// 모든 사용자 금지
match /userImg/{allPaths=**} {
allow read,
allow write: if request.resource.size < 10 * 1024 * 1024; // 10MB limit
}
참고 : https://firebase.google.com/docs/storage/security/start
// Storage
implementation 'com.google.firebase:firebase-storage:19.1.1'
implementation 'com.firebaseui:firebase-ui-storage:4.3.1'
스토리지를 사용하기 위해선 위에 있는 Gradle 파일 추가 ( 2번째 꺼는 나중에 데이터 다운받아올 때 사용하려고 적용 하는 것, 아래 내용 있음 )
private var profile: Uri? = null
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_GALLERY && resultCode == Activity.RESULT_OK) {
if (data?.data == null) return
profile = data.data!! // Uri 를 저장
setProfileImg(profile.toString()) // Glide를 이용하여 ImageView에 적용하는 매소드
}
}
폰 앨범 안에 있는 사진을 가져올 때 Uri 를 변수에 담아둔다.
그런다음 스토리지에 저장 하려면 ?
FirebaseStorage
.getInstance()
.reference
.child("userImg") // userImg 폴더
.child(firebaseAuth.currentUser?.email.toString()) // 최종 파일 이름으로 저장됨.
.putFile(uri)
.addOnSuccessListener {
}
.addOnFailureListener {
}
userImg/파일이름
루트로 저장됨.
그런다음 스토리지에서 이미지를 가져오려면 ?
스토리지에 저장된 이미지를 가져오는 방법은 여러가지가 있지만,
느리다..
근데 이번에 새로 알게 된것이 있는데 Glide를 이용해서 한번에 가져올 수 있다고
아까 위에서 Glide 파일 2번째꺼 적용하라고 했던 부분이 여기서 쓰인다.
// App Build.Gradle
// 코틀린 일 경우
apply plugin: 'kotlin-kapt'
implementation 'com.github.bumptech.glide:glide:4.10.0'
kapt 'com.github.bumptech.glide:compiler:4.10.0'
// 자바일 경우
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
@GlideModule
class MyAppGlideModule: AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
registry.append(
StorageReference::class.java, InputStream::class.java,
FirebaseImageLoader.Factory()
)
}
}
MyAppGlideModule.class 혹은 .kt
를 만든다.
그냥 저렇게 만들어 놓고 클린 & 리빌드 하게 되면 알아서 적용 되는거 같음.
그렇다면 이제 부터 Glide 이 아닌 GlideApp 을 사용할 수 있게 된다.
GlideApp.with(this)
.load(파일경로) // ex) FirebaseStorage.getInstance().reference.child("userImg").child(userInfo?.img.toString())
.placeholder(
CircularProgressDrawable(iv_img.context).apply {
strokeWidth = 5f
centerRadius = 30f
start()
}
)
.error(R.drawable.iv_empty_profile)
.transform(CenterCrop(), RoundedCorners(50))
.into(iv_img)
Firebasestore 와 연동 할 수 있을까 하다가.. 음 그냥 이미지 이름만 저장 해 놓고 reference 로 가져와 바로 로딩 할 수 있어 편한 것 같음.
근데 좀 느림
그래서 PlaceHolder 및 error 옵션은 필 수 있듯.
근데 여기서 ? CircularProgressDrawable 이건 뭐냐 ?
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
약간 느낌있는거 같아서 적용해 봤음.
'Android > Firebase' 카테고리의 다른 글
[ Firebase #3 ] Authentication Google 인증 (0) | 2020.04.10 |
---|---|
[ Firebase #2 ] Authentication 이메일 인증 (0) | 2020.04.09 |
[ Firebase #1 ] 파이어베이스 연결 (0) | 2020.04.09 |
- Total
- Today
- Yesterday
- android widget 만들기
- RandomColor
- 갤럭시 워치
- Android Wear Os
- wear os
- 폰과 워치 페어링
- aos img url bitmap
- 폴더블 상태 유지
- widget onreceive
- flutter web
- 쏘렌토 하이브리드
- 역시 키크론이네
- widget onupdate
- Fragment data
- Foldable Event
- 가중치랜덤
- Dot indicator
- 맥 전용
- 프래그먼트 데이터 저장
- widget 이미지 로딩
- widget glide
- Android
- 풀배열 키보드
- 쏘렌토 하이브리드 시그니처
- 랜덤컬러
- 폴더블 이벤트 받기
- 안드로이드 폴드 대응
- 안드로이드 플립 대응
- widget 만들기
- 웨어러블
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |