web-dev-qa-db-ja.com

Firebase Analyticsはオフラインで機能しますか?

Firebaseは一般的にオフラインで動作し、機会があればいつでも同期することを知っています。同じことがFirebase-Analyticsfor mobile(Android、iOS)アプリにも当てはまりますか?

はい(または部分的にはい)の場合-ユーザーはどのくらいオフラインにできますか?

15

はい、イベントはローカルに保存され、ラジオがオンになるとアップロードされます。 72時間以上遅れて到着したイベントは、サーバーによって無視されます。

26
Steve Ganem

Firebase Analyticsは、ログに記録された偶数をデバイスにローカルに保存します(オンラインまたはオフライン)。データをアップロードする時間であり、デバイスにネットワーク接続がある場合、Firebase Analyticsはデータを可能な限り少ないアップロードでバッチ処理し、圧縮してデータのアップロードを試みます。

アップロードが成功すると、データはデバイスから削除されます。アップロードが失敗すると、プログレッシブバックオフを使用して新しい試行がスケジュールされます。デバイスがオフラインの場合、アプリはアップロードを試みる前に接続を待機します。

72時間より古いデータは無視されます。デバイスに保存できるデータの量には安全上の制限があります(ディスク使用量を制限するため)。長期間オフラインになっているデバイスに過剰なデータを記録すると、データが失われる可能性があります。

6
djabi

分析の72時間の制限時間を回避することが可能です。まず、権限を追加する必要があります

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

マニフェストファイル内。イベントをログに記録する前に、次の方法を使用してインターネットが利用可能かどうかを確認してください。

private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

上記の方法を使用して、ユーザーがオンラインであるかどうかを確認し、オンラインである場合は通常どおりイベントをログに記録します。オンラインでない場合は、今はログに記録せず、SharedPreferencesを使用してイベント名とそのパラメーターを文字列として保存します。

if(isNetworkAvailable()){
// the user is online, log the events
}else{
// Don't log the events, save the event name and its parameters using SharedPreferences
}

BroadcastReceiverリスニング接続変更イベントを登録し、マニフェストファイルに以下を追加します。

<receiver
Android:name="type your class directory extending BroadcastReceiver here"
        Android:enabled="true"
        Android:exported="true">
        <intent-filter>
            <action Android:name="Android.net.conn.CONNECTIVITY_CHANGE" />
            <action Android:name="Android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
</receiver>

BroadcastReceiverを拡張するクラスで、ネットワークが利用可能かどうかを確認し、SharedPreferencesによって保存されたイベントをログに記録します

public class NetworkEnabledBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(isNetworkAvailable(context)){
        //Check if there are saved events and parameters using the same named
        //SharedPreferences used for saving the events and parameters, log if 
        //so, then clear the data. 
        }
    }
    private boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}
1
Ozan

Firebase Blogから、分析データは次の場合にバッチ処理されて送信されます。

  • クライアントライブラリは、1時間前のローカルデータがあることを確認します。
  • ユーザーがコンバージョンイベントをトリガーした場合(アプリ内購入など)。
  • アプリがバックグラウンドに入るときはいつでも。

そのため、ユーザーがアプリを20分間試してからアンインストールしても、ユーザーがアプリをバックグラウンドに移動した瞬間にアプリがデータを送信するため、そのセッションデータは引き続き受信されます。

IOSで分析データが実際に失われる1つのコーナーケースは、アプリがクラッシュした後、ユーザーがすぐにアンインストールした場合です。

ドキュメント: https://firebase.googleblog.com/2016/11/how-long-does-it-take-for-my-firebase-analytics-data-to-show-up.html

0
Luan Si Ho