1つのアプリが、独自のマーケティングチームと管理チームを持つ複数の別々の会社(フランチャイズ)によって使用されるユースケースがあります。モバイルアプリの起動時にユーザーがフランチャイズを選択する必要があります。その時点から、すべての分析データをそのフランチャイズのFirebase(Googleアナリティクス)アカウントにプッシュします。同様に、そのフランチャイズのサーバーから送信されるプッシュ通知はすべてユーザーに送信する必要があります。
この構成は可能ですか?以前は、フランチャイズごとにGoogleアナリティクスアカウントを設定し、フランチャイズの選択時にサーバーからUA-xxx番号をダウンロードして、それに基づいてGoogleアナリティクスオブジェクトを設定していました。
グーグルアナリティクスに接続されたfirebaseを介してこれを達成するための適切な方法は何ですか?
公式のAPIリファレンスを見つけました: https://firebase.google.com/docs/configure/ このリンクでは、iOSでの実行方法について説明していますが、Androidでの実行方法については触れていません。ただし、firebase initはユーザーコードの前に実行されると言われています。おそらくそれは不可能であることを意味しますか?
彼らが言及しているinitプロバイダーは次のとおりです: https://firebase.google.com/docs/reference/Android/com/google/firebase/provider/FirebaseInitProvider
新しいFirebaseアプリごとに作成する
FirebaseApp firebaseApp =
FirebaseApp.initializeApp(Context, FirebaseOptions,firebaseAppName);
オプションを渡すことでfirebaseアプリを作成できます:
https://firebase.google.com/docs/reference/Android/com/google/firebase/FirebaseOptions.Builder
FirebaseOptions options = new FirebaseOptions.Builder()
.setApiKey(String)
.setApplicationId(String)
.setDatabaseUrl(String)
.build();
次にアナリティクスを使用する場合は、デフォルトのものを設定する必要があります呼び出し:
FirebaseApp firebaseApp =
FirebaseApp.initializeApp(Context, FirebaseOptions,"[DEFAULT]");
これだけが分析に使用されることに注意してください[〜#〜] default [〜#〜] firebase app
しかし、最初に必要なことはすべてマニフェストのinitプロバイダーを削除する
<!--remove firebase provider to init manually -->
<provider
Android:name="com.google.firebase.provider.FirebaseInitProvider"
Android:authorities="${applicationId}.firebaseinitprovider"
tools:node="remove"/>
およびデフォルトのFirebaseアプリを手動で初期化!
デフォルトのFirebaseアプリを介してイベントを送信する方法の例(初期化後):
// get tracker instance
FirebaseAnalytics trakerInstance = FirebaseAnalytics.getInstance(context);
// create bundle for params
Bundle params = new Bundle();
// put param for example action
params.putString(ACTION_KEY, eventAction);
// send event
trackerInstance.logEvent(eventCategory, params);
@ ceph3us私はあなたの解決策を試しましたが、うまくいきませんでした。あなたが提案したように実行時にfirebaseを初期化すると、エラーが発生します:google_app_idがありません。 FirebaseAnalyticsが無効になっています。動作していますか? – rMozes
まず第一に
広告1)error: Missing google_app_id
は、gardleプラグインがプロバイダーを期待どおりに削除しなかったことを示唆しています-そして、アプリは、アプリIDの欠落について文句を言うデフォルトのプロバイダーを開始しています
ad 3)Firebaseアプリが初期化される前に、Firebaseアプリに依存する呼び出しを行わないでください
protected boolean isDefaultFirebaseAppInitialized() {
try {
// try get
return FirebaseApp.getInstance(FirebaseApp.DEFAULT_APP_NAME) != null;
// catch illegal state exc
} catch (IllegalStateException ise) {
// on such case not initialized
return false;
}
}
// check on default app
if(isDefaultFirebaseAppInitialized()) {
// get tracker
FirebaseAnalytics trakerInstance = FirebaseAnalytics.getInstance(context);
// log event
trackerInstance.logEvent(eventCategory, params);
} else {
// postpone
}
@ ceph3us 1.プロバイダーを削除しました。プロバイダーを削除せずにデフォルトのアプリを初期化しようとすると、デフォルトのFirebaseアプリが既に存在することについてIllegalStateExceptionが発生します。 2.説明したように、デフォルトのFirebaseアプリを初期化しました。 3.はい、アプリ名とapp_idをログに記録しましたが、ログがあります:AppName:[DEFAULT]、Google app id:valid_app_idしかし、アナリティクスに何かを投稿したい場合は、次のように表示されます:google_app_idがありません。 FirebaseAnalyticsが無効になっています。 – rMozes
99,99%アプリが初期化される前にイベントを送信しようとしています!(上記の例を参照)
@ ceph3usApplicationサブクラスのonCreateメソッドでFirebaseAppを初期化します。ボタンがクリックされたときにFirebaseにイベントを送信します。とにかく私はテストプロジェクトをgithubにアップロードしました、それを見ていただけますか?何かを誤解している可能性があります。 github.com/rMozes/TestFirebaseAnalytics – rMozes
try(初期化は非同期であるため、初期化をテストするまでイベントを送信できません):
https://github.com/rMozes/TestFirebaseAnalytics/compare/master...c3ph3us:patch-2
上記が失敗した場合、さらに2つのチャンスがあります:)
xmlで文字列を定義することにより:プレースホルダーとして
<string name="google_app_id">fuck_you_google</string>
1)reflectionsを介してプレースホルダーIDを変更する initを呼び出す前、またはfirebaseから使用する前に他のIDに変更する:
2)プレースホルダーIDに独自のテキストを提供する Resources.getString(R.string.google_app_id)呼び出しの独自のResourcesクラス実装を介して:
それを達成する方法の例 (idによって新しいリソースを追加する)
リフレクションを介してRフィールドを適切に変更するか、Resources.getString(R.string.google_app_id)の呼び出しを独自のテキストに置き換えた場合メッセージが間違ったアプリIDを取得しない: "fuck_you_google"
& 幸運を :)