[JAVA] Rendez Firebase Analytics simple et facile à utiliser avec les modèles Singleton et Builder

Contexte et aperçu

Si vous définissez Firebase Analytics simplement en fonction de la référence, ce sera comme suit. quickstart-android

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    //① Définissez une instance Firebase Analytics dans un champ afin qu'elle puisse être utilisée dans toute la classe
    private FirebaseAnalytics mFirebaseAnalytics;

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

        //② Définissez l'instance Firebase Analytics au moment de onCreate
        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!Déclenche le journal des événements lorsque l'utilisateur clique sur le texte
            Bundle params = new Bundle();
            params.putString("param1", "test");
            params.putInt("param2", 100);
            params.putDouble("param3", 3.14);
            mFirebaseAnalytics.logEvent("event1", params);
        }
    }
}

Si vous écrivez le code conformément à la référence, comme mentionné ci-dessus, ** l'emplacement de la définition de l'instance Firebase Analytics **, ** l'emplacement du paramètre d'instance **, ** l'emplacement de déclenchement du journal des événements à l'aide de cette instance ** sont différents. .. Cela rend difficile la gestion des instances de Firebase Analytics au sein de chaque classe, et il est difficile d'utiliser Firebase Analytics.

En plus de ce qui précède, la partie de paramétrage à ajouter au journal des événements devient également redondante à mesure que le nombre de paramètres augmente, de sorte que cette partie peut également être définie plus simplement (par exemple, en utilisant une méthode en chaîne). Vouloir.

1. Utilisez le modèle Singleton pour simplifier tout, de la définition de l'instance au déclenchement du journal des événements.

À l'aide du modèle Singleton, implémentez la classe FirebaseAnalyticsHelper comme suit. Pour le modèle Singleton, voir [Publié sur Wikipedia](https://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83] J'ai fait référence à% B3).

public class FirebaseAnalyticsHelper {

    //① Définissez une instance Firebase Analytics sur le terrain
    private FirebaseAnalytics mFirebaseAnalytics;

    //② Configurer une instance Firebase Analytics avec "Singleton pattern"
    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;
    }

    //③ Créez une méthode pour déclencher le journal des événements
    public void logEvent(@NonNull final String name, Bundle params) {
        mFirebaseAnalytics.logEvent(name, params);
    }
    public void logEvent(@NonNull final String name) {
        mFirebaseAnalytics.logEvent(name, null);
    }
}

Si vous appliquez cette classe FirebaseAnalyticsHelper au MainActivity mentionné ci-dessus, il vous suffit d'écrire le code lié à ** FirebaseAnalytics comme indiqué ci-dessous uniquement dans la partie qui déclenche le journal des événements. ** **

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!Déclenche le journal des événements lorsque l'utilisateur clique sur le texte
            Bundle params = new Bundle();
            params.putString("param1", "test");
            params.putInt("param2", 100);
            params.putDouble("param3", 3.14);
            FirebaseAnalyticsHelper.getInstance(this).logEvent("event1", params);
        }
    }
}

Voici l'exemple de code. hinom77/SimpleFirebaseAnalytics ~ Branch: feature_singleton

2. Simplifiez la gestion des paramètres avec le modèle Builder

Implémentez la classe FirebaseAnalyticsParams à l'aide du modèle Builder comme suit. Concernant le modèle Builder, il existe différents modèles comme dans l'article Modèle de modèle Builder écrit en Java, mais ici ** Effective Java Builder ** est utilisé.

public class FirebaseAnalyticsParams {

    //(1) Définir les réglages des paramètres dans "Modèle de générateur"
    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) Renvoyer la valeur Params sous forme de type Bundle
    public Bundle getBundleParams() {
        return mParams;
    }
}

Lorsqu'il est appliqué au MainActivity mentionné ci-dessus à l'aide de cette classe FirebaseAnalyticsParams, le code de la partie de paramétrage peut être aussi simple qu'une ligne, quel que soit le nombre de variables.

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!Déclenche le journal des événements lorsque l'utilisateur clique sur le texte
            FirebaseAnalyticsParams params = new FirebaseAnalyticsParams
                    .Builder().param1("test").param2(100).param3(3.14).build();
            FirebaseAnalyticsHelper.getInstance(this).logEvent("event1", params);
        }
    }
}

Notez que la classe FirebaseAnalyticsHelper doit également être partiellement réécrite en réponse à ce qui précède.

Voici l'exemple de code. hinom77/SimpleFirebaseAnalytics ~ Branch: feature_builder

Recommended Posts

Rendez Firebase Analytics simple et facile à utiliser avec les modèles Singleton et Builder
Comment utiliser @Builder et @NoArgsConstructor ensemble
Un moyen très simple d'utiliser enum avec JSP
Facile à créer LINE BOT avec Java Servlet
Lors de l'importation de CSV avec Rails, il était vraiment facile d'utiliser la commande nkf
Facile à créer LINE BOT avec Java Servlet Partie 2: J'ai essayé des messages image et des modèles
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Rendre Docker déroutant avec Pokemon et le rendre plus facile à attacher
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Mettez en majuscule uniquement la plage spécifiée avec la sous-chaîne. (Comment utiliser la sous-chaîne)
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure
Comment utiliser le certificat et la clé privée créés par l'authentification BASIC de Docker avec AWS ALB
Si vous souhaitez simuler une méthode dans RSpec, vous devez utiliser la méthode allow pour mock et la méthode singleton.