Transcript
Page 1: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました1

Firabase Crash Reporting を使ってみました

Google I/O Extended 報告会 2016 in 関西 LT 2016-06-11

Page 2: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました2

Firabase Crash Reporting を使ってみました

 自己紹介

 ・名前    robo (兼高理恵)

 ・お仕事    Java 技術者         要件定義に設計から実装まで

 ・好きなもの  モバイル端末

Page 3: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました3

今年のI/Oでは

 今年のI/Oでは、 音声や画像のbigdataを機械学習させた成果として、 Google Assistant と Google Home や Allo、 Google Cloud Vision API が、

 Google I/O 2016 - Keynote より Google Play より

Page 4: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました4

今年のI/Oでは

 VR への意気込みとして Google VR-Daydream と、 NのVR …最適化モードがお披露目されたことと思いますが

Google VR - Daydream より

Page 5: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました5

今年のI/Oでは

 私の中では、Firebaseへの関心が Google I/O 2016 前と後で、大きく変わりました。

IO以前は、firebase.com でしたが… IO以後は、firebase.google.com に

Page 6: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました6

Firebase が、モバイル支援プラットフォームに昇格

Firebaseの位置づけは、モバイルアプリの品質や利用/収益改善を支援する

統合プラットフォームに昇格しました。

・Google アカウントがあれば使用できます。・オンラインを介した15の機能が、基本無料で使えます。・Google Playに登録していないアプリでも利用可能です。・build.gradleへの追加設定のみで使える機能もあります。

Google Developers Japan Blog

Firebase の紹介動画(第 1 弾) 2016年5月30日http://googledevjp.blogspot.jp/2016/05/firebase-1.html

Firebase の紹介動画(第 2 弾) 2016年6月02日http://googledevjp.blogspot.jp/2016/06/firebase-2.html

新しいFirebaseの全体概要や各機能の紹介は、1本 2〜4分かつ日本語字幕付きの

お手軽ビデオで確認できますよ。

Page 7: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました7

Firebase 紹介ビデオの概要

Introducing Firebase モバイル アプリを支援する統合プラットフォーム機能全般紹介

Introducing Firebase Analytics アプリの利用状況を解析するために必要なデータを収集します。

Introducing Firebase Cloud Messaging アプリ・ユーザーへのメッセージ送信を容易にします。

Introducing Firebase Remote Config アプリをユーザごとにカスタマイズさせる動的外部変更可能な設定データ。

Introducinf Firebase Dynamic Links ウェブページやアプリの任意の場所や画面に移動できるディープリンク。

Introducing Firebase Notifications ユーザーへのお知らせの送信や管理を容易にします。

Introducing Firebase Invite ユーザー同士でのコンテンツや紹介コードの送信を容易にします。

Introducing Firebase Test Lab for Android アプリのテストが様々な実機端末で簡単にできるようになります。

Introducing Firebase Crash Reporting アプリのクラッシュ情報を収集し、コンソールに表示します。

Introducing Firebase and AdMob by Google AdMobと Firebase との連携で、アプリからの広告収入を生み出します。

Introducing Firebase Storage アプリから共有できるオンライン・ファイル保存ストレージ。

Introducing Firebase Realtime Database リアルタイムのデータ同期やオフライン時のサポートを行うデータベース。

Introducing Firebase Hosting フロントエンドウェブアプリ向けの静的ウェブホスティングプロバイダ。

Introducing Firebase and Google AdWords AdWords と Firebase との連携で、アプリの効果的な宣伝を行います。

Introducing Firebase Authentication Google や Twitter 等のアカウントと連携した認証を簡単にします。

Introducing Firebase App Indexing 再エンゲージを高める、Google 検索と連携したアプリへのディープリンク。

Page 8: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました8

Firebaseをアプリで利用するための基本手順

あああ

【基本手順の参照元】 Firebase Docs > GUIDE > Get Started > Android Add Firebase to your Android Project https://firebase.google.com/docs/android/setup

Gradle Dependency Line Service

com.google.firebase:firebase-core:9.0.2 Analytics

com.google.firebase:firebase-database:9.0.2 Realtime Database

com.google.firebase:firebase-storage:9.0.2 Storage

com.google.firebase:firebase-crash:9.0.2 Crash Reporting

com.google.firebase:firebase-auth:9.0.2 Authentication

com.google.firebase:firebase-messaging:9.0.2 Cloud Messaging / Notifications

com.google.firebase:firebase-config:9.0.2 Remote Config

com.google.firebase:firebase-invites:9.0.2 Invites / Dynamic Links

com.google.firebase:firebase-ads:9.0.2 AdMob

com.google.android.gms:play-services-appindexing:9.0.2 App Indexing

Firebase機能のライブラリ一覧

Page 9: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました9

Firebaseをアプリで利用するための基本手順

1.Firebase サービスを利用するアプリのAndroid Studio プロジェクト名とパッケージ名を確認します。

2.Firebase コンソールの「新規プロジェクトの作成」からプロジェクト名を新規登録します。

3.Firebase コンソールの「Android アプリにFirebaseを追加」から、先のプロジェクトにパッケージ名(と必要あればデバッグキーのSHA-1)を設定します。

4.Firebase コンソールからダウンロードした google-services.json 設定ファイルをAndroid Studio プロジェクトのアプリモジュール(app/)の直下にコピーします。

5.Android Studio プロジェクトの build.gradle の dependencies にFirebase必須プラグインの classpath 'com.google.gms:google-services:3.0.0' を追加します。

6.Android Studio プロジェクトの app/build.gradle で、dependenciesに利用するFirabase機能のライブラリ(前ページ参照)を追加(*1)して、ファイル末尾で Firebase必須プラグインの適用(*2)を行います。(*1) compile 'com.google.firebase:firebase-core:9.0.2' (Analicticsの場合)(*2) apply plugin:'com.google.gms.google-services'

7.Android Studio プロジェクトで Sync( )を行います。

8.必要があれば、アプリのソースに 導入したFirebase機能 独自の実装を追加します。

・Android 2.3(Gingerbread)以上で、Google Play services 9.0.2 以上の端末が対象です。・Android Studio は、1.5以上かつ Google Play Service SDK が利用できることが必要です。・Android Studio 2.2 より前の Instant Run には、互換性がないので無効にしてください。

Page 10: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました10

Firebaseをアプリで利用するための基本手順

【補足】 Firebase を使ってみるプロジェクトが手元にない場合は、 Firabase のサンプルプロジェクトを使うと良いでしょう。

  ただしその場合は、   「利用するプロジェクトのパッケージ名が他の人と被らないように     AndroidManifest.xml で固有のものに変更してね!」 とのこと。

firebase/quickstart-android https://github.com/firebase/quickstart-android Firebase 機能ごとのサンプルプロジェクトが、各機能毎のプロジェクトディレクトリに配置されています。

Page 11: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました11

Firebaseをアプリで利用するための基本手順

機能毎にプロジェクトが分かれています。

機能毎にプロジェクトが分かれています。

Github の firebase/quickstart-android リポジトリをローカルに clone しましましたら、確認したい機能のサンプル・プロジェクトをAndroid Studio にインポートします。

【補足】 サンプル・プロジェクトを 利用する際の注意事項

Page 12: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました12

Firebaseをアプリで利用するための基本手順

サンプル・プロジェクトをインポートしたら、元々設定されていたパッケージ名から、固有のパッケージ名に変更してください。

サンプル・プロジェクトをインポートしたら、元々設定されていたapplicationId名から、固有のapplicationId名に変更してください。

AndroidManifest.xml app/build.gradle

【補足】 サンプル・プロジェクトを 利用する際の注意事項

サンプル・プロジェクトをインポートしたら、固有のパッケージ名のディレクトリ構成に変更してください。 新規パッケージを追加して、元クラスを移動すると楽です。

Page 13: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました13

Firebaseをアプリで利用するための基本手順

文字だけの説明では、イメージが伝わりにくいと思います。

次ページから、具体的な例としてFirebase Crash Reporting 機能を利用できるようにするための手順を

まとめました。

Page 14: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました14

Firebaseをアプリで利用するための基本手順

【具体例】 (Android Studio での下準備)

Github の firebase/quickstart-android リポジトリをローカルに clone します。

クローン後に、ローカル・リポジトリの crash ディレクトリ(Crash Reporting 機能のサンプル・プロジェクト)をAndroid Studio にインポートします。

Android Studio に、crash プロジェクトをインポートしたら2ページ前の手順を参考に、パッケージ名の変更を行ってください。

Page 15: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました15

Firebaseをアプリで利用するための基本手順

【具体例】 (Firebase コンソールでの操作)

予め Google アカウントで、Chrome にログイン済であれば、Console リンクをクリックするとFirebase コンソールが開きます。

firebase サイト firebase.google.com を開きます。

新規プロジェクトを作成をクリックしてFirebase 機能を利用する新規プロジェクトを作成します。

Page 16: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました16

Firebaseをアプリで利用するための基本手順

新規プロジェクト用の適当なプロジェクト名を入力します。

クリックしてプロジェクトを  作成します。

新規プロジェクトを作成のクリックでプロジェクトの作成ダイアログが開きます。

Page 17: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました17

Firebaseをアプリで利用するための基本手順

プロジェクトが作成され 作成した新規プロジェクト用の コンソール画面が開きます。

新規作成したプロジェクト が選択されています。

新規作成したFirebaseプロジェクトに任意のAndroid アプリを登録して、アプリからFirabaseの機能を使えるようクリックします。

Page 18: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました18

Firebaseをアプリで利用するための基本手順

AndroidアプリにFirebaseを追加のクリックでAndroidアプリにFirebaseを追加ダイアログが開きます。

クリックしてFirebaseプロジェクトにアプリを追加します。

Firebaseの機能を使いたいアプリのパッケージ名を指定します。

必要なければ入力の必要は、ありません。詳細は、次ページ参照

Page 19: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました19

Firebaseをアプリで利用するための基本手順

デバッグ用の署名証明書 SHA-1(オプション)は、 Firebase Invites か Firebase Dynamic Links を使う場合や、 アプリをリリースする際に Oauth client ID や API key を使う場合や、 エラーレポートをアプリの共同開発者版のものと区別したい場合に必要となります。

Firebse > Support > Support (Recent changes & updates | FAQ)Frequency Asked Questions > Projects and the Firebase consoleDo I need to provide a SHA-1 when adding an Android app? より

Firebase Invites か Firebase Dynamic Links を使う場合、SHA-1を指定してくださいとあります。https://firebase.google.com/support/faq/

Firebase > Support > Support Guides >Launch Checklist > Firebase Launch Checklist より

OAuth client ID や API key を使う場合、アプリをリリースする際には、リリース版 SHA-1 証明書キーを登録してくださいとあります。https://firebase.google.com/support/guides/launch-checklist

Page 20: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました20

Firebaseをアプリで利用するための基本手順

アプリを追加のクリックで、この後でダウンロードされるFirebase の機能を使えるようにする google-services.json 設定ファイルをFirebase 機能を使いたいアプリの Android Studio プロジェクトの app モジュール下にコピー追加するよう促すダイアログに切り替わります。

クリックして、続行します。

Page 21: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました21

Firebaseをアプリで利用するための基本手順

続行のクリックで、Firebase 機能を使いたいアプリの Android Studio プロジェクトの ルートと、 app モジュール下にある build.gradle への追加設定を促すダイアログに切り替わります。

クリックして、設定を終了します。

Android Studio ルートの build.gralde 設定buildscript { dependencies { // Firebase を使えるようにするプラグイン設定を追加 classpath 'com.google.gms:google-services:3.0.0'; }}

Android Studio app/下の build.gralde 設定dependencies{ // (補足)利用するFirebase機能のライブラリを追加 compile 'com.google.firebase:firebase-crash:9.0.2'}設定記述の末尾に、プラグイン適用指定を追加apply plugin: 'com.google.gms.google-services'

設定が反映されるにはSync( )が必要です。

Page 22: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました22

Firebaseをアプリで利用するための基本手順

終了のクリックで、Android アプリで Firebase の機能を使えるようにするgoogle-services.json 設定ファイルがダウンロードされますので、Firebase 機能を使うアプリのASプロジェクトに、前2ページ分の設定操作を行ってください。

ダウンロードしたjson 設定ファイルのコピー先

以下の設定後に、ASのツールバーからSync( )を行って設定を反映します。

ASプロジェクト・ルートのbuild.gradle への追加設定

ダイアログの説明にない追加設定ASプロジェクト・appモジュール下のbuild.gradle への利用するFirebase機能のライブラリをインポートする追加設定

ASプロジェクト・appモジュール下のbuild.gradle 末尾への追加設定

Page 23: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました23

Firebase Crash Reporting の

特徴と注意点

Page 24: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました24

Crash Reporting の特徴 (1)

● 現段階ではベータ版● 基本無料で利用可能● Googleアカウントがあれば利用可能● Google Play に登録/公開していないアプリでも利用可能● Firebase コンソールのプロジェクトへのアプリ・パッケージ名登録と、

アプリ側のルート下と、appモジュール下の build.gradle 設定とapp 直下への json 設定ファイル追加のみで利用開始可能

Page 25: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました25

Crash Reporting の特徴 (2)

● キャッチされなかった例外のレポートのみであれば、現状コードへの追加実装も不要

● エラーレポートには、発生日時や端末情報に例外種別とスタックトレースも記録可能

● 捕捉されたエラーは、20分程度でエラーレポートに反映され&コンソールで確認可能

● 例外や発生箇所や端末やAPI レベルなどで、エラーレポートのフィルタリングも可能

● エラーレポートへの任意例外の記録やカスタムログの追加も、対応実装の追加で可能

Page 26: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました26

Crash Reporting の特徴 (3)

【留意事項】● End user privacy

Firebase Crush Reporting は、クラッシュしたアプリ・ユーザのメールアドレスや電話番号など、         個人を特定できる情報を収集していません。

Googleさんとしては、 カスタムログに個人特定情報入れると、自分たちに送ることになるので入れないでね!とのこと。

【以上の参照元】Firebase > Docs > GUIDE > Crash Reporting > Introduction

Firebase Crash Reporting

    https://firebase.google.com/docs/crash/

Page 27: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました27

Crash Reporting の特徴詳細

● Firebase Crash Reporting を使うには、app モジュールの build.gradle の dependencies に、Crash Report のライブラリをインポートする設定を追加します。

compile 'com.google.firebase:firebase-crash:9.0.2'

● 自動的にキャッチされない例外を捕捉してエラーレポートを記録しますが、それだけでなく、下記のように、明示的にエラーレポートを記録させることもできます。 

FirebaseCrash.report( new Exception("My first Android non-fatal error"));

● Firebase カスタムログ出力を使って、エラーレポートに独自情報(カスタムログ出力内容)の                   追加もできます。 

FirebaseCrash.log("Activity created");

Page 28: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました28

Crash Reporting の注意事項

● ProGurad を使うと、エラーレポートのスタックトレースも難読化されます。難読化を解除したい場合は、マッピングファイルのアップロードが必要です。 (マッピングファイルの出力先は、下記のフォーマット)<project root>/<module name>/build/outputs/mapping/<build type>/<appname>-proguard-mapping.txt

例:app/build/outputs/mapping/debug/app-proguard-mapping.txtアップロードについては、スライドP.38を参照ください。

● Crash Reporting と Analictics で報告されるエラー総数は、                  現在一致しません。

Page 29: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました29

Crash Reporting 既知の問題 (1)

● クラッシュレポートは、バックプロセスで実行されます。

● このためバックプロセス分の Application オブジェクトも生成され、ライフサイクルなどのシステム・コールバック・メソッドもまた実行されることになります。

● Application オブジェクトのシステム・コールバックで、プロセスをまたいで共有されるデータ(*1)の更新を行う場合、マルチプロセス対応をしていないと思わぬ上書きが発生し、同期問題が発生するのです。onCreate()でDBの初期化などをしないようにしてください。

        (*1)Shared Preferences や Database など

Page 30: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました30

Crash Reporting 既知の問題 (2)

● 同期問題は、プロセスをまたいでデータを共有するサードパーティ製のライブラリにもあてはまります。これらのライブラリを使う際には、マルチプロセス対応の有無を確認してから利用や対応を行ってください。

● プロセスをまたいで共有されるデータは、Content Providerを介して管理することが推奨されています。

【以上の参照元】Firebase > Docs > GUIDE > Crash Reporting > Android > Report Crashes

Report Crashes

https://firebase.google.com/docs/crash/android

Page 31: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました31

Firebase Crash Reporting を

使ってみる

Page 32: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました32

Firebase Crash Reporting をアプリから利用する

 Firebase Crash Reporting は、 基本手順を踏めば任意のアプリに組み込めますが、 今回は、サンプルの crash プロジェクトを使ってみました。 

 組み込み手順については、 「Firebaseをアプリで利用するための基本手順」の具体例を参照ください。

アプリを起動すると表示される画面

チェックなしでクリックすると、NullPointer例外が発生してアプリがクラッシュします。

チェックありでクリックすると、NullPointer例外がキャッチされ、何もなかったように振る舞います。

Page 33: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました33

Firebase Crash Reporting をアプリから利用する

Catch Crashチェックあり

Catch Crashチェックなし

アプリの実装 (抜粋)

キャッチされない例外を発生させて放置

捕捉した例外をカスタムログに出力し、エラーレポートに記録

Page 34: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました34

Firebase Crash Reporting でエラーレポートを記録させる

 Firebase Crash Reporting の働きを確認するため、

 1.チェックなしでボタンをクリックしてアプリをクラッシュさせる。 2.チェックありでボタンをクリックして例外を記録させる。

 …を行った後、 Firebaseコンソールにログインして、           エラーレポートを確認します。

Page 35: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました35

Firebase Crash Reporting のエラーレポート確認手順 (1)

予め Google アカウントで、Chrome にログイン済であれば、Console リンクをクリックするとFirebase コンソールが開きます。

firebase サイト firebase.google.com を開きます。

作成済みのFirebase を使用するプロジェクトをクリックして選択します。

Page 36: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました36

Firebase Crash Reporting のエラーレポート確認手順 (2)

前ページでクリックされた、Firebase を使用するプロジェクトに         切り替わります。

Firebase Crash Reporting のエラーレポートを確認するためCrash項目をクリックします。

右ペインがCrash Reporting に切り替わります。

Page 37: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました37

Firebase Crash Reporting のエラーレポート確認 (1)はじめは、チェックなしのクリックによるキャッチされない NulPointer例外がレポートされています。

スタックトレース詳細を確認するには、例外発生元のリンクをクリックします。キャッチされない

例外のため「致命的」とレポートされる。

Page 38: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました38

Firebase Crash Reporting のエラーレポート確認 (2)

はじめの、キャッチされないNullPointer例外のスタックトレースが表示されています。

ProGuard を使う場合は、スタックトレース内容も難読化されます。難読化を解除するには、マッピングファイルのアップロードが必要です。

前ページのエラー発生元リンクのクリックにより、スタックトレース表示に切り替わっています。

Page 39: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました39

Firebase Crash Reporting のエラーレポート確認 (3)

スタックトレース内容だけでなく、端末のAndroidバージョンや空きメモリ状況などもレポートしてくれます。

Page 40: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました40

Firebase Crash Reporting のエラーレポート確認 (4)

続いて、チェックを入れてキャッチされた例外のスタックトレースを表示しています。

遅れてレポートされた、キャッチされて実装側で任意レポートとカスタムログが出力されたNullPointer例外のスタックトレースが表示されています。

キャッチされた例外なので、「非致命的」とレポートされています。

Page 41: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました41

Firebase Crash Reporting のエラーレポート確認 (5)

フィルタリング条件も、アプリのバージョン番号や端末のAPIバージョンに、端末種類や日時などが用意されています。

Page 42: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました42

Firebase Crash Reporting の雑感

 …以上のように、 Firebase Crash Reporting は、 開発者側の設定を最小限にしようとしていることと、

 エラーレポートでは、 細かなフィルタリング条件や、エラー端末情報が補足され、 単なるエラーチェックだけでなく、エラー分析に役立つよう 試みられており、

 基本無償でありながら、モバイル・アプリの 品質や利用/収益改善の支援を目指していることは、               確かなように思えます。

Page 43: Firebase Crash Reporting を使ってみました。

Firabase Crash Reporting を使ってみました43

ご清聴、ありがとうございました。

イメージなどを詰め込みすぎ、資料が小さく読みづらかったことを

         お詫びいたします。