Getting Started with Firebase Storage on Android – Firecasts

또 하나의 파이어캐스트에 오신 것을 환영합니다 더그 스티븐슨 입니다 오늘은 저장소를 이용해 이미지 파일을 업로드하고 다운로드 받을 수 있는 웹URL을 생성하는 법에 대해 알아볼게요 Firebase 저장소는 안전하고 확장 가능한 솔루션으로 앱과 관련된 파일을 저장할 수 있는 기능입니다 우선 시작에 앞서 Firebase SDK를 앱에 적용해야 해요 적용법에 대해 영상에서 확인해 보실 수 있습니다 먼저 새로운 프로젝트를 생성하는 방법을 알아볼게요 당시 최신 버전은 Firebase SDK 96

1이니 참고하시기 바랍니다 좋아요 여기 앱 세팅을 이미 해놨어요 Firebase 저장소와 쓸 수 있도록 해보죠 앱이 어떤 형태인지 살펴볼게요 하늘색 배경에 Firebase 로고가 있는 앱화면입니다 텍스트 위젯에 텍스트를 입력하면 이미지 위로 텍스트가 표시되는 형태입니다 여기에 업로드 버튼도 있군요 현재는 아무런 기능을 하지 않고 있습니다 버튼을 누르면, 보이는 화면이 Firebase 저장소에 업로드되도록 해볼게요 우선 아셔야 할 것은 Firebase 저장소는 인증과 연동된다는 것입니다 보통은 로그인된 사람만 업로드할 수 있도록 설정하는 게 좋겠죠? 누구나 아무런 자료를 스토리지에 넣으면 문제가 발생할 테니까요 이번 회차가 너무 길어지면 안 되니까 인증 절차는 넘어가도록 할게요 업로드를 하기 위해서는 디폴트 보안 역할을 변경해야 합니다 프로젝트 저장소 버킷을 접근할 때마다 인증 절차를 진행하면 번거로우니까요 Firebase 콘솔을 보시면 왼쪽의 스토리지를 선택할게요 보시는 것처럼 비어있습니다 Rules탭으로 이동하시면 해당 프로젝트에 대한 기본적인 설정들이 보이죠? 인정된 사용자만 읽고 쓸 수 있도록 설정되어 있습니다 아직 설정에 대해서 모르셔도 되지만 바꾸는 법을 보여드릴게요 인증 절차를 생략하고, 읽기와 쓰기를 자유롭게 할 수 있도록 말이죠 하지만 지금부터 보여드리는 부분은 개발을 위한 부분일 뿐, 보안상 안전하지 않을 수 있다는 걸 알아두세요 저장소에서 이것저것 해보신 후 보안 설정을 꼭 다시 하셔야 합니다 인증을 다시 설정해서 인증된 사용자만 스토리지 버킷에 접근할 수 있도록 하세요 좋습니다 다시 콘솔을 보시면 보안 설정을 가장 쉽게 해제하려면 전체 버킷에 대한 읽기와 쓰기 권한을 True값으로 변경하는 것입니다 보시는 바와 같이 까먹지 않기 위해 퍼블리시 버튼 푸쉬 구문 다음에 코멘트를 달아두겠습니다 이제 인증 없이 버킷에 작성 되도록 설정했습니다 안드로이드 스튜디오에서 가장 먼저 하실 것은 아래에 저장소관련 Compile구문을 버전에 맞춰 입력합니다 현재 최신 버전은 961입니다 이러면 Firebase 저장소 클라이언트 API접근권한이 주어지죠 좋습니다 앱의 활성 코드를 한 번 살펴보시죠 이미 생성된 코드가 화면에 노출된 활동사항을 찾고 초기화하도록 합니다 업로드 버튼 클릭 관련한 구문도 이미 작성돼 있네요 해당 구문에서 저는, 안드로이드 API로 업로드될 이미지의 비트맵을 추출하도록 됐어요 그런 후, 비트맵은 PNG포맷으로 압축하게 되고요 마지막으로 byte array에 Raw pixel이 생성되네요 저는 추가로 Firebase 저장소에 이미지를 업로드하도록 수정하고 싶네요 하는 방법을 알려드리죠 Firebase 저장소 관련 레퍼런스를 추가하셔야 합니다 상단에 Private 사용자 변수로 저장하도록 작성합니다 다음은 프로젝트 저장소 버킷에 저장될 이미지의 경로를 지정해줘야 합니다 Firememes라는 디렉토리에 저장하도록 설정해보죠 Random UUID로 업로드 파일 이름을 랜덤 생성하도록 할게요 PNG 확장자를 사용하기로 했으니 그것도 입력해 줄게요 경로 이름을 지정하면, 저장소 API관련 구문도 다음과 같이 작성합니다 이 저장소 레퍼런스 오브젝트는 이미지를 관리할 주요 기준이 됩니다 주어진 경로로 이미지를 프로젝트 저장소 버킷에 저장하도록 기준으로 삼을 것입니다 한가지 더 해볼게요 SDK의 빌더를 이용해서 이미지에 커스텀 메타데이터를 입력할게요 이 필드는 test라고 지정해서 로고 위로 겹칠 글자를 담당하게 합니다 이렇게 두 요소를 작성해주면, 저장소 레퍼런스의 putBytes를 활용해서 업로드와 함께 메타데이터를 함께 업로드하도록 쉽게 할 수 있습니다 uploadTask를 불러와서 전송되는 것을 모니터링 할 수 있도록 해줍니다 이 정도면 코딩을 더 안 해도 작동할 것 같네요 나머지는 Firebase 저장소 SDK가 알아서 업로드를 해줍니다 그래도 업로드가 완료되었다는 정보를 앱 사용자에게 알려주는 기능을 넣는 게 좋겠죠? UploadTask를 활용해서 진행도를 보여주는 장치를 넣어주도록 할게요 한 번 보시죠 이 앱에는 이미 회전하는 형태의 바 위젯이 있는데 보시는 것처럼 업로드 버튼 아래에 숨어있습니다 업로드가 시작되면 노출되도록 업로드 버튼 클릭 핸들러에 행을 삽입합니다 또한 업로드가 진행되는 동안 업로드를 또 할 수 없도록 업로드 버튼을 비활성화할게요 UploadTask에 Success Listener도 삽입합니다 이런 구문은 안드로이드 스튜디오에서 알아서 생성됩니다 활성 인스턴스를 생략하고 넘어간 게 보이시나요? 이러면 수신자의 활성 인스턴스의 범위가 설정되어 업로드가 전에 멈출 경우, 수신자가 엑티비티에 붙어있도록 하지 않도록 방지합니다 엑티비티 요소가 새어나가지 않도록 해주는 거죠 사용 가능한 TaskAPI에 대해 더 알고 싶으시면 이 문서를 확인해보세요 더 상세히 설명된 블로그 포스팅 시리즈도 여기 있습니다 업로드 테스크가 완료되면 OnSuccess 콜백이 진행되어 결과를 알려줄 TaskSnapshot 오브젝트를 지나게 됩니다 콜백이 성공할 경우, 진행바를 숨기고 업로드 버튼을 다시 활성화합니다 마지막으로 TaskSnapshot에서 다운로드 URL를 가져오고 기본적으로 숨겨진 그 텍스트를 보이도록 변경해 주겠습니다 다운로드 URL은 기본적인 HTTP 스타일의 주소값이며 이미지를 다운받을 수 있도록 합니다 잠시 후에 한 번 실험해보죠 좋습니다 앱을 한 번 실행해서 잘 되나 볼게요 텍스트를 입력한 후, 업로드 버튼을 누릅니다 이렇게 업로드 하는 동안 피드백이 있네요 다 된 후, 다운로드 URL을 볼 수 있습니다 이걸 사용해서 아무나 이미지를 볼 수 있죠 여기 에뮬레이터에서 보시면 앱상에서 브라우저를 열고, 이미지를 다운로드하고 화면에 표시합니다 Firebase 콘솔 저장소에 가셔서 새로 고침하시면 아까 설정한 firememes 디렉토리가 보이네요 방금 업로드한 이미지도 안에 있고요 우측에는, 파일에 대한 정보가 노출됩니다 Png 확장자로 되어있는 것도 보이고요 메타데이터 섹션에서는 입력한 커스텀 메타데이터가 잘 보입니다 파일 경로 섹션에서는 앱에서 클릭한 동일한 다운로드 경로가 있습니다 만일 범용 다운로드 경로를 원치 않는다면 링크와 연결된 토큰 값을 revoke버튼을 눌러서 제거하시면 됩니다 그러면 해당 URL이 더 이상 작동되지 않죠 새로운 다운로드 주소값을 입력할 수도 있습니다 이걸 클릭하시면 되죠 자, 오늘은 Firebase 저장소에서 파일은 업로드하고 저장 경로를 추출하고 접근하는 방법에 대해 간단히 알아봤습니다 Firebase 저장소에 대해 더 알고 싶으시면 이 문서를 한 번 읽어보셔도 좋을 것 같네요 입력 스트림을 통해 데이터를 업로드, 삭제, 관리하는 방법을 필히 숙지하시고 테스크에서 발생할 수 있는 오류를 고칠 방법도 알아보세요 아, 그리고 잊지 마시고 보안이나 저장소 인증에 대한 것도 알아보셨으면 좋겠네요 안드로이드 개발자라면 업로드와 다운로드를 할 때 엑티비티 순환을 처리하는 부분에 특히 관심을 가지고 공부하시기 바랍니다 UI가 인식할 수 있도록 SDK는 진행 중인 업로드와 다운로드를 다시 연결해주는 역할을 합니다 어떤 이유로 엑티비티가 중단될 경우에 말이죠 이상 오늘의 #AskFirebase를 마치겠습니다 이제 가셔서한 번 사용해보세요 사용 소감도 아래에 덧글로 남겨주시거나 트위터로 메시지를 보내주시면 감사하겠습니다 다음에 또 뵐게요