[JAVA] Machen Sie Firebase Analytics einfach und benutzerfreundlich mit Singleton- und Builder-Mustern

Hintergrund und Überblick

Wenn Sie Firebase Analytics einfach basierend auf der Referenz festlegen, ist dies wie folgt. quickstart-android

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    //① Definieren Sie eine Firebase Analytics-Instanz in einem Feld, damit sie in der gesamten Klasse verwendet werden kann
    private FirebaseAnalytics mFirebaseAnalytics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //② Legen Sie die Firebase Analytics-Instanz zum Zeitpunkt von onCreate fest
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

        TextView helloWorld = (TextView) findViewById(R.id.hello_world);
        helloWorld.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.hello_world) {
            // ③ 「Hello World!Löst das Ereignisprotokoll aus, wenn auf den Text geklickt wird
            Bundle params = new Bundle();
            params.putString("param1", "test");
            params.putInt("param2", 100);
            params.putDouble("param3", 3.14);
            mFirebaseAnalytics.logEvent("event1", params);
        }
    }
}

Wenn Sie den Code wie oben erwähnt gemäß der Referenz schreiben, unterscheiden sich ** der Speicherort der Firebase Analytics-Instanzdefinition **, ** der Speicherort der Instanzeinstellung **, ** der Speicherort des Ereignisprotokolls unter Verwendung dieser Instanz **. .. Dies macht es schwierig, Instanzen von Firebase Analytics in jeder Klasse zu verwalten, und es ist schwierig, Firebase Analytics zu verwenden.

Darüber hinaus wird der Parametereinstellungsteil, der dem Ereignisprotokoll hinzugefügt werden soll, mit zunehmender Anzahl von Parametern redundant, sodass dieser Teil auch einfacher eingestellt werden kann (z. B. mithilfe einer Kettenmethode). Möchte.

1. Verwenden Sie das Singleton-Muster, um alles von der Instanzdefinition bis zum Auslösen des Ereignisprotokolls zu vereinfachen

Implementieren Sie die FirebaseAnalyticsHelper-Klasse mithilfe des Singleton-Musters wie folgt. Das Singleton-Muster finden Sie unter [Gepostet auf Wikipedia](https://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83] Ich bezog mich auf% B3).

public class FirebaseAnalyticsHelper {

    //① Definieren Sie eine Firebase Analytics-Instanz im Feld
    private FirebaseAnalytics mFirebaseAnalytics;

    //② Richten Sie eine Firebase Analytics-Instanz mit "Singleton-Muster" ein.
    private static FirebaseAnalyticsHelper sInstance;
    private FirebaseAnalyticsHelper(Context context){
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(context.getApplicationContext());
    }
    public static synchronized FirebaseAnalyticsHelper getInstance(Context context){
        if(sInstance == null){
            sInstance = new FirebaseAnalyticsHelper(context);
        }
        return sInstance;
    }

    //③ Erstellen Sie eine Methode zum Auslösen des Ereignisprotokolls
    public void logEvent(@NonNull final String name, Bundle params) {
        mFirebaseAnalytics.logEvent(name, params);
    }
    public void logEvent(@NonNull final String name) {
        mFirebaseAnalytics.logEvent(name, null);
    }
}

Bei Anwendung auf die oben genannte MainActivity mit dieser FirebaseAnalyticsHelper-Klasse kann der Code für ** FirebaseAnalytics nur in dem Teil geschrieben werden, der das Ereignisprotokoll wie unten gezeigt auslöst. ** ** **

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView helloWorld = (TextView) findViewById(R.id.hello_world);
        helloWorld.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.hello_world) {
            //「Hello World!Löst das Ereignisprotokoll aus, wenn auf den Text geklickt wird
            Bundle params = new Bundle();
            params.putString("param1", "test");
            params.putInt("param2", 100);
            params.putDouble("param3", 3.14);
            FirebaseAnalyticsHelper.getInstance(this).logEvent("event1", params);
        }
    }
}

Unten ist der Beispielcode. hinom77/SimpleFirebaseAnalytics ~ Branch: feature_singleton

2. Vereinfachen Sie die Parameterverwaltung mit dem Builder-Muster

Implementieren Sie die FirebaseAnalyticsParams-Klasse mithilfe des Builder-Musters wie folgt. In Bezug auf das Builder-Muster gibt es verschiedene Muster wie im Artikel In Java geschriebenes Builder-Mustermuster, aber hier ** Effektiver Java Builder ** wird genutzt.

public class FirebaseAnalyticsParams {

    //(1) Definieren Sie die Parametereinstellungen in "Builder-Muster".
    private Bundle mParams;
    private FirebaseAnalyticsParams(Builder builder) {
        mParams = builder.params;
    }
    public static class Builder {
        private Bundle params = new Bundle();

        public Builder param1(String param1) {
            params.putString("param1", param1);
            return this;
        }

        public Builder param2(Integer param2) {
            params.putInt("param2", param2);
            return this;
        }

        public Builder param3(Double param3) {
            params.putDouble("param3", param3);
            return this;
        }

        public FirebaseAnalyticsParams build() {
            return new FirebaseAnalyticsParams(this);
        }
    }

    //(2) Geben Sie den Params-Wert als Bundle-Typ zurück
    public Bundle getBundleParams() {
        return mParams;
    }
}

Bei Anwendung auf die oben genannte MainActivity mit dieser FirebaseAnalyticsParams-Klasse kann der Code für den Parametereinstellungsteil so einfach wie eine Zeile sein, unabhängig davon, wie viele Variablen vorhanden sind.

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView helloWorld = (TextView) findViewById(R.id.hello_world);
        helloWorld.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.hello_world) {
            //「Hello World!Löst das Ereignisprotokoll aus, wenn auf den Text geklickt wird
            FirebaseAnalyticsParams params = new FirebaseAnalyticsParams
                    .Builder().param1("test").param2(100).param3(3.14).build();
            FirebaseAnalyticsHelper.getInstance(this).logEvent("event1", params);
        }
    }
}

Beachten Sie, dass die FirebaseAnalyticsHelper-Klasse als Reaktion auf die oben genannten Punkte ebenfalls teilweise neu geschrieben werden muss.

Unten ist der Beispielcode. hinom77/SimpleFirebaseAnalytics ~ Branch: feature_builder

Recommended Posts

Machen Sie Firebase Analytics einfach und benutzerfreundlich mit Singleton- und Builder-Mustern
Verwendung von @Builder und @NoArgsConstructor zusammen
Super einfache Möglichkeit, Enum mit JSP zu verwenden
Einfacher LINE BOT mit Java Servlet
Beim Importieren von CSV mit Rails war es wirklich einfach, den Befehl nkf zu verwenden
Einfacher LINE BOT mit Java Servlet Teil 2: Ich habe versucht, Bildnachrichten und Vorlagen zu erstellen
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Verwechseln Sie Docker mit Pokemon und erleichtern Sie das Anhängen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Großschreibung nur des angegebenen Bereichs mit Teilzeichenfolge. (Verwendung von Teilzeichenfolgen)
[Java] Verwenden Sie ResolverStyle.LENIENT, um Datum und Uhrzeit gut zu handhaben
Verwendung des Zertifikats und des privaten Schlüssels, die durch die BASIC-Authentifizierung von Docker mit AWS ALB erstellt wurden
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.