LoginSignup
3
3

More than 3 years have passed since last update.

AndroidでFirebaseのStorageを使う

Posted at

初めに

Androidアプリ開発で、サーバーで定期処理したデータをクラウドに上げてAndroidアプリで取り込むことをしたかったのでやってみました。今回はKotlinで記述しています。

Firebaseとは?

Firebaseとは、Googleが提供しているクラウドサービスです。利用できるプラットフォームが多岐にわたっていて、機能も豊富です。

利用できるプラットフォーム

  • Andorid
  • IOS
  • Web
  • デスクトッププログラム...etc

主な機能

  • ユーザ認証
  • データベース
  • ストレージ
  • ホスティング
  • クラウドファンクション
  • 機械学習キット
  • アナイティクス
  • メッセージング
  • プレディクション

非常に様々な機能がありますが、今回はこの中でシンプルな機能を持つストレージを扱います。

Storageの機能

一般的なアプリ開発をする場合、テキストデータファイルや画像ファイル、xmlファイル、JSONファイルなど
これらのファイルは予めプロジェクトに組み込まれたうえで開発すると思います。
しかし、この場合「ファイルデータだけ更新する」という作業が非常に面倒に感じることでしょう。
ファイルの更新のたびにアプリをアップデートする必要がありますから。。。

クラウド環境にファイルを設置して必要に応じて読み込むことが出来ればそれだけでかなりに楽になるでしょう。
この「ファイルを保管するストレージをクラウドに用意する」機能がFirebaseのStorageです。
便利だ―。

手順

1.Firebaseのプロジェクトを作成する

まず始めにFirebaseサイトでログインした後、Firebaseのコンソールページに移動して新規プロジェクトを作成します。
名前の設定以外特別指定する必要はありません。

※今回のアプリでは、
AndroidStudio上で作るAndroidのプロジェクト
Firebase上で作るFirebaseの様々な設定をするFirebaseのプロジェクト
この二つのプロジェクトを作成しています。

2.AndroidStudioでFirebaseに接続する

Firebaseを利用したいAndroidのプロジェクトを開き、メニューのToolsからFirebaseを選択すると
Firebaseに関するウィンドウが出てくるのでStorageを選択して、
Connect to Firebase を押してFirebaseと接続します。
※ウィンドウは右のAssistantをクリックして開閉できます。
image.png

3.Firebase側でAndroidアプリを登録する

Firebaseのコンソール左上にあるProjectOverViewをクリックすると、画面にアプリを追加しましょうという内容が出てくるので
アプリを追加するをクリックし、プラットフォームをAndroidと選択します。
AndroidアプリにFirebaseを追加 という設定画面に移るのでここで
Androidのパッケージ名を入力します。
パッケージ名は自分のktファイルなどで書かれている
package com.〇〇~
com.〇〇~の箇所を丸々コピペしましょう。

ここの画面でアプリを登録を押した際、エラーのような表示が出ることがありますが
登録自体はできているので画面をリロードして、
もう一度ProjectOverView→アプリの追加を見ると自分のアプリが出てくるのでそこを押すと
SDKの設定を続ける というボタンから現在の設定の続きが行えます。

次に、設定ファイルのダウンロードとありますが、この「google-service.json」というファイルは
AndroidStudioで自動で追加されるのでしなくて大丈夫です。
ディレクトリを参照してファイルが無い場合はAndroidプロジェクトのappフォルダの直下に入れてください。

ここまではFirebaseでStorage以外の機能を使うときと変わりません。

4.AndroidStudio側でbuilde.gradleを修正する

AndroidStudioで先程のConnect to Firebaseの下の
Add Cloud Storage to your appを選択します
するとbuilde.gradleを修正するという確認画面が入るのでOKを押すことで、
builde.gradleファイルにFirebasのStorageを利用するための内容が追加されます。

ここでmake projectをしてみて何らかのエラーが発生した場合

project/app/build.gradle
dependencies {
    implementation 'com.google.firebase:firebase-core:16.0.8'
}

このcom.google.firebase:firebase-coreの部分のバージョンを書き換えてみてください
私の場合ここが17.0.0になっていてエラーの原因になっていました。

5.Firebase側のStorageにダウンロードしたいファイルをアップしておく

Firebaseのコンソールページを開き、Storageをクリックします。
メニューのファイルを選択するとファイルをアップロードできるので自分の使いたいファイルをアップロードして下さい。
テキストファイルの場合はUTF-8にしておくといいです。

6.Firebase側でStorageのセキュリティの設定を行う

次に、ルールの設定を行います。
メニューでルールを選択するとセキュリティの設定画面になるので
ここで

service firebase.storage {
  match /b/{bucket}/o {
    match /public/{allPaths=**} {
      allow read, write;
    }
  }
}

と記述して、誰でもアクセス出来るよう設定します。
これで設定は完了しました。
次にAndroidアプリでクラウドにアップロードされたファイルを読み込んでみます。

7.Storageにあるファイルを読み込む
ここまでで、FirebaseをAndroidに組み込み設定が完了したので
FirebaseのStorageにあるテキストファイルを読み込んでみたいと思います。
下記のソースコードでは、読み込んだデータを
適当なEditTextにセットしてあげて画面に表示しています。

package com.example.firebasetest2
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.google.firebase.storage.FirebaseStorage
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d("Test","1")
        val storage = FirebaseStorage.getInstance()
        val storageRef = storage.reference
        val dir = storageRef.child("ファイル名")
        Log.d("Test","2")
        val byteLength=1024*1024L
        dir.getBytes(byteLength).addOnSuccessListener{
            bytes ->
                Log.d("Test","3")
                val data = String(bytes, Charsets.UTF_8)
                val array=data.split("/n")
                var res=""
                val i=1;
            Log.d("Test","4")
                for(item in array){
                    res=i.toString().plus(item).plus("\n")
                }
                test.text=res
        }.addOnFailureListener {  }
    }
}

最後に

FirebaseをAndroidに組み込む上で何をしたらいいか、ってことが公式のドキュメントを読むだけでは難解だったためかなり苦戦しました。しかし、一度組み込むことが出来たらかなり自由度が上がり便利なものであることを感じました。
もっと日本語の情報が増えてくれれば楽になるのだけど...

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3