Google Firebaseでクラッシュログの収集を試してみる

思ったより簡単でした。

[Google I/O 2016](https://events.google.com/io2016/)で、新たに[Firebase](https://console.firebase.google.com/)というBaaSが発表されました。

Google I/O 2016でFirebaseが詳しく紹介されている動画です。
[Zero to App: Develop with Firebase - Google I/O 2016](https://www.youtube.com/watch?v=xAsvwy1-oxE)

では、実際に試してみましょう。

# Google Firebaseでクラッシュログを収集する

## 事前準備
### Android Studio側での準備
1. バージョンを最新にしておく
2.2より古いバージョンでも動かなくはないそうですが、アレコレの互換性がないためGoogleは2.2Preview以上にアップデートすることを推奨しています。

2. Google Play ServicesとGoogle Repositoryを最新にしておく
バージョンはわかりませんが、この２つが古いとGradleのSyncに失敗します。（私はここで引っかかりました）
参考：[Failed to resolve: com.google.firebase:firebase-core:9.0.0](http://stackoverflow.com/questions/37310188/failed-to-resolve-com-google-firebasefirebase-core9-0-0)

3. Android Projectを作成
既に存在するのであれば不要です。

### Google Firebase側での準備
1. 新規プロジェクトを作成

[Firebase Console](https://console.firebase.google.com/)にアクセスし、「新規プロジェクト」を押下します。
<img width="721" alt="スクリーンショット 2016-10-10 21.58.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/84307/a2f0bffd-ebd0-9803-ed29-c1555a9270c8.png">


プロジェクト名と国（地域）を入力し、「プロジェクトを作成」を押下します。
プロジェクトが作成されると、下記のような画面になります。
<img width="1274" alt="スクリーンショット 2016-10-10 21.59.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/84307/3ed38d83-143e-166f-03fe-3f8bde1d54b9.png">

## Android StudioとFirebaseを繋げる
### Firebase Consoleにアプリの情報を追加する
[Firebase Console](https://console.firebase.google.com/)で「Android アプリに Firebase を追加」を押下します。
ここで、Android Studio上のパッケージ名と、SHA-1の証明書のハッシュの入力が求められます。

<img width="686" alt="スクリーンショット 2016-10-10 22.01.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/84307/8bc11875-a431-698e-ca96-ce9799211247.png">

パッケージ名は**通常はアプリレベルの build.gradle ファイルの applicationId** です。

SHA-1の証明書は下記コマンドで表示できます。

```lang:console
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android
```

ここ（公式）に取得方法があります。
[Authenticating Your Client](https://developers.google.com/android/guides/client-auth)




情報を入力して「アプリを追加」を押下すると、google-services.jsonのダウンロードが始まります。
ここからはチュートリアルに（ほぼ）従って進めましょう。

### Android StudioにFirebase SDKの設定を追加する
#### google-services.jsonを配置する
チュートリアル通り進めます。
Android Studioの表示を「Project」に変更し、Androidの**appディレクトリ**にダウンロードしたgoogle-services.jsonを配置します。
<img width="680" alt="スクリーンショット 2016-10-10 22.11.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/84307/8827d36a-7b75-75e0-a95d-95d4535daf2b.png">

#### Gradle（２つ）に情報を追記する
##### プロジェクトレベルのbuild.gradle
プロジェクトフォルダ直下にあるbuild.gradleに下記を追記します。

```gradle:build.gradle
buildscript {
  dependencies {
    // Add this line
    classpath 'com.google.gms:google-services:3.0.0'
  }
}
```

#### appレベルのbuild.gradle
先程google-services.jsonを配置した同じディレクトリにあるbuild.gradleに追記します。
チュートリアルには１つだけ追記するようになっていますが、今回はクラッシュログを取得しますので、このようにしてください。


```gradle:build.gradle

dependencies {
// ...
//　クラッシュログを送るためにこの１行を追加する
    compile 'com.google.firebase:firebase-crash:9.6.1'
}

// Add to the bottom of the file　←　チュートリアルではこれだけ
apply plugin: 'com.google.gms.google-services'
```

設定が終わってGradleが問題なくSyncできることが確認できたら「終了」ボタンを押下します。
（私はここでGoogle Play ServicesとGoogle Repositoryが古くてエラーになりました）

#### インターネットアクセスのPermissionを追加
ここで注意なのは、インターネットアクセスのPermissionを忘れないことです。
作りたてのプロジェクトの場合は忘れがちですので追記します。

```xml:Manifest.xml
<uses-permission android:name="android.permission.INTERNET" />
```

これで準備完了です。

## クラッシュログを試しに出してみる
### アプリをクラッシュさせる
試しにクラッシュさせてみましょう。MainAcivity.javaに下記を追加し、アプリを実行します。

```java:MainActivity.java
String[] strings = {"a", "b"};
Log.d("test", strings[2]);
```

### Firebase Consoleからクラッシュログを確認する
このような感じで、作成したプロジェクトが並んでいます。
作成したアプリの「クラッシュ」を押下してみましょう。
<img width="976" alt="スクリーンショット 2016-10-10 22.34.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/84307/848128b3-964e-3126-08ee-4999093be832.png">

エラーの内容とどれくらい出ているかがわかるグラフ、「致命的」等といったエラーの程度が表示されます。
<img width="1270" alt="スクリーンショット 2016-10-10 22.36.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/84307/bac5079d-e7a1-2876-0007-2b5c65dcd6d5.png">

## 終わりに
いかがでしたか？思っていた以上に簡単にクラッシュログを取得することができました。
次はFirebaseの主力機能のひとつである認証（Authentication）を試してみようと思います。