(なぜ有効にしたい場合じゃないのか、と突っ込まれそうですが)
Firebase Analyticsを無効にしたい場合の設定
マニフェストで設定する場合
[Analytics の収集を無効にする]
https://firebase.google.com/support/guides/disable-analytics
収集を一時的に無効にする場合 (この設定の場合は、プログラム上で有効に変更可能)
<meta-data android:name="firebase_analytics_collection_enabled" android:value=false />
収集を完全に無効にする場合
<meta-data android:name="firebase_analytics_collection_deactivated" android:value=true />
プログラム上で有効・無効を切り替える場合
FirebaseAnalyticsクラスの setAnalyticsCollectionEnabled() メソッドをを呼び出します。
と、ここまではドキュメントの引用ですが・・・
firebase_analytics_collection_deactivatedが正しく反映されなかった時期があるらしい
Stackoverflow - Disable the Analytics service for Firebase Cloud Messaging
ということで、実験してみました。(Google servicesのバージョン:9.8.0)
※10.0.0は、つい最近まで、一部のデバイスでダウンロードできない時期があったので、9.8.0で実験しています。(今回は、minSdkの確認も兼ねた実験の一部だったので、API10の実機を使用しています。)
使用ライブラリは、
play-services-base、play-services-auth、play-services-drive
のみです。
firebase_analytics_collection_deactivated を true に設定した場合
I/FA: Collection disabled with firebase_analytics_collection_deactivated=1
がログに出力されます。
firebase_analytics_collection_deactivated を false に設定した場合
V/FA: Collection enabled
V/FA: App package, google app id: (略)
がログに出力されます。
firebase_analytics_collection_enabled を false に設定した場合
I/FA: Collection disabled with firebase_analytics_collection_enabled=0
がログに出力されます。
従って、現在は、Firebase Analyticsを無効にしたい場合は、firebase_analytics_collection_deactivatedをtrueに設定するのが正解のようです。
(または、firebase_analytics_collection_enabledをfalseに設定)
書き間違えていないか、何度も見直してしまいそうですが・・
AppMeasurementなどが動いている?
一見すると、(ログ上では)deactivatedなどの部分は正しく動作しているように見えますが・・・
実験用に(System.exit()などで)アプリを強制停止させると、3パターンともに、
次のようなログが出力されます。
※Google servicesを使っているアプリのみの現象です。
※Firebase関連のAPIは、サーバ側で無効にしてあります。
I/ActivityManager: Start proc (パッケージ名) for broadcast (パッケージ名)/com.google.firebase.iid.FirebaseInstanceIdInternalReceiver:(略)
・・・
D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
・・・
D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
・・・
I/FA: App measurement is starting up, version: 9877
・・・
I/FA: To enable faster debug mode event logging run:
adb shell setprop firebase.analytics.debug-mode (パッケージ名)
・・・
I/dalvikvm: Could not find method android.database.Cursor.getType, referenced from method com.google.android.gms.measurement.internal.(略)
・・・
V/FA: Using measurement service
V/FA: Connecting to remote service
D/FA: Connected to remote service
D/FirebaseInstanceId: background sync failed: SERVICE_NOT_AVAILABLE, retry in 60s
D/FirebaseInstanceId: background sync failed: SERVICE_NOT_AVAILABLE, retry in 30s
AppMeasurementが動いていると、何か問題が?
[AppMeasurement]
https://developers.google.com/android/reference/com/google/android/gms/measurement/AppMeasurement
This class was deprecated.
Use FirebaseAnalytics instead.
ということで、AppMeasurementは、FirebaseAnalyticsの一部になっているかと思います。
なので、配布地域によっては、法律やToSの内容などに配慮が必要になるかな・・と。
また、(AppMeasurement単体の問題ではないように思いますが)
SERVICE_NOT_AVAILABLEの場合に、数十秒間隔でリトライしている点も気になります。
(本当は、強制終了したはずのプロセスが、なぜ残っているのか気になって実験した・・というのは置いておいて。)
プログラム上でFirebase Analyticsを無効に切り替える場合の問題
setAnalyticsCollectionEnabled(false)を呼びたいだけなのに・・
FirebaseAnalytics.getInstance()の部分で、WAKE_LOCKなどの
パーミッションが必要と表示されてしまいます。(ビルドは通るようです)
また、無効にするために、無効にしたいもののインスタンスを作る・・ことになるので、
マニフェストで設定する方法の方が良さそうです。
補足:
依存関係にfirebase-iidが(間接的に)入っていれば、マージ後のマニフェストに、
必要なパーミッションが追加されるかと思いますが、
FirebaseAnalytics.getInstance()のアノテーションで、
"android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.WAKE_LOCK" が必須となっているために発生する現象です。
なので、実害は無さそう??
Stackoverflow - FirebaseAnalytics.getInstance showing warning but compiles successfully
蛇足 Google開発者サービス(Google play services)がサポートする環境は、バージョン10.2.x以降、API14になるとのこと。
ちなみに、flavor間でplay-servicesのバージョンを切り替えようとすると、すごくはまります。
(バージョンがコンフリクトを起こしたり・・)
なので、早めに準備しておいた方がよさげです。
[Google Play Services - Release Notes (November 2016 - v.10.0)]
https://developers.google.com/android/guides/releases
Android version 2.3.x (Gingerbread) Deprecation
Google Play services 10.0.x is the final release that includes full support for Android version 2.3.x (Gingerbread).