If you set Firebase Analytics simply based on the reference, it will be as follows. quickstart-android
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//① Define a Firebase Analytics instance in a field so that it can be used throughout the class
private FirebaseAnalytics mFirebaseAnalytics;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//② Set Firebase Analytics instance at the timing of 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!Fires the event log when the text is clicked
Bundle params = new Bundle();
params.putString("param1", "test");
params.putInt("param2", 100);
params.putDouble("param3", 3.14);
mFirebaseAnalytics.logEvent("event1", params);
}
}
}
If you write the code according to the reference, as mentioned above, ** Firebase Analytics instance definition location **, ** instance setting location **, ** event log firing location using that instance ** are different. .. This makes it difficult to manage instances of Firebase Analytics within each class, and it is difficult to use Firebase Analytics.
Also, apart from the above, the parameter setting part to be added to the event log also becomes redundant as the number of parameters increases, and if possible, this part can also be set more simply (for example, using a chain method). Want to.
Implement FirebaseAnalyticsHelper class using Singleton pattern as follows. Regarding the Singleton pattern, [the one posted on Wikipedia](https://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83 I referred to% B3).
public class FirebaseAnalyticsHelper {
//① Define a Firebase Analytics instance in the field
private FirebaseAnalytics mFirebaseAnalytics;
//② Set up a Firebase Analytics instance with "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;
}
//③ Create a method to fire the event log
public void logEvent(@NonNull final String name, Bundle params) {
mFirebaseAnalytics.logEvent(name, params);
}
public void logEvent(@NonNull final String name) {
mFirebaseAnalytics.logEvent(name, null);
}
}
When applied to the above-mentioned MainActivity using this FirebaseAnalyticsHelper class, the code related to ** FirebaseAnalytics can be written only in the part that fires the event log as shown below. ** **
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!Fires the event log when the text is clicked
Bundle params = new Bundle();
params.putString("param1", "test");
params.putInt("param2", 100);
params.putDouble("param3", 3.14);
FirebaseAnalyticsHelper.getInstance(this).logEvent("event1", params);
}
}
}
Below is the sample code. hinom77/SimpleFirebaseAnalytics ~ Branch: feature_singleton
Implement the FirebaseAnalyticsParams class using the Builder pattern as follows. Regarding the Builder pattern, there are various patterns as in the article Builder pattern pattern written in Java, but here ** Effective Java Builder ** is used.
public class FirebaseAnalyticsParams {
//(1) Define parameter settings in "Builder pattern"
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) Return the Params value as a Bundle type
public Bundle getBundleParams() {
return mParams;
}
}
When applied to the above-mentioned MainActivity using this FirebaseAnalyticsParams class, the code of the parameter setting part can be as simple as **, no matter how many variables there are.
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!Fires the event log when the text is clicked
FirebaseAnalyticsParams params = new FirebaseAnalyticsParams
.Builder().param1("test").param2(100).param3(3.14).build();
FirebaseAnalyticsHelper.getInstance(this).logEvent("event1", params);
}
}
}
Note that the FirebaseAnalyticsHelper class also needs to be partially rewritten in response to the above.
Below is the sample code. hinom77/SimpleFirebaseAnalytics ~ Branch: feature_builder
Recommended Posts