## Record event The Amplify analytics plugin also makes it easy to record custom events within the app. The plugin handles retry logic in the event the device loses network connectivity and automatically batches requests to reduce network bandwidth. ```java AnalyticsEvent event = AnalyticsEvent.builder() .name("PasswordReset") .addProperty("Channel", "SMS") .addProperty("Successful", true) .addProperty("ProcessDuration", 792) .addProperty("UserAge", 120.3) .build(); Amplify.Analytics.recordEvent(event); ``` ```kotlin val event = AnalyticsEvent.builder() .name("PasswordReset") .addProperty("Channel", "SMS") .addProperty("Successful", true) .addProperty("ProcessDuration", 792) .addProperty("UserAge", 120.3) .build() Amplify.Analytics.recordEvent(event) ``` ```java AnalyticsEvent event = AnalyticsEvent.builder() .name("PasswordReset") .addProperty("Channel", "SMS") .addProperty("Successful", true) .addProperty("ProcessDuration", 792) .addProperty("UserAge", 120.3) .build(); RxAmplify.Analytics.recordEvent(event); ``` ## Flush events Events have default configuration to flush out to the network every 30 seconds. If you would like to change this, update `amplifyconfiguration.json` with the value in milliseconds you would like for `autoFlushEventsInterval`. This configuration will flush events every 10 seconds: ```json { "UserAgent": "aws-amplify-cli/2.0", "Version": "1.0", "analytics": { "plugins": { "awsPinpointAnalyticsPlugin": { "pinpointAnalytics": { "appId": "AppID", "region": "Region", "autoFlushEventsInterval": 10000 }, "pinpointTargeting": { "region": "Region" } } } } } ``` To manually flush events, call: ```java Amplify.Analytics.flushEvents(); ``` ```kotlin Amplify.Analytics.flushEvents() ``` ```java RxAmplify.Analytics.flushEvents(); ``` ## Authentication events import native_common from "/src/fragments/lib-v1/analytics/native_common/getting-started/auth-events.mdx"; ```java /** * Call this method to log an authentication event to the analytics client. */ public void logAuthenticationEvent() { AnalyticsEvent event = AnalyticsEvent.builder() .name("_userauth.sign_in") .build(); Amplify.Analytics.recordEvent(event); } ``` ```kotlin /** * Call this method to log an authentication event to the analytics client. */ fun logAuthenticationEvent() { val event = AnalyticsEvent.builder() .name("_userauth.sign_in") .build() Amplify.Analytics.recordEvent(event) } ``` ```java /** * Call this method to log an authentication event to the analytics client. */ public void logAuthenticationEvent() { AnalyticsEvent event = AnalyticsEvent.builder() .name("_userauth.sign_in") .build(); RxAmplify.Analytics.recordEvent(event); } ``` ## Global Properties You can register global properties which will be sent along with all invocations of `Amplify.Analytics.recordEvent`. ```java Amplify.Analytics.registerGlobalProperties( AnalyticsProperties.builder() .add("AppStyle", "DarkMode") .build()); ``` ```kotlin Amplify.Analytics.registerGlobalProperties( AnalyticsProperties.builder() .add("AppStyle", "DarkMode") .build()) ``` ```java RxAmplify.Analytics.registerGlobalProperties( AnalyticsProperties.builder() .add("AppStyle", "DarkMode") .build()); ``` To unregister a global property, call `Amplify.Analytics.unregisterGlobalProperties()`: ```java Amplify.Analytics.unregisterGlobalProperties("AppStyle", "OtherProperty"); ``` ```kotlin Amplify.Analytics.unregisterGlobalProperties("AppStyle", "OtherProperty") ``` ```java RxAmplify.Analytics.unregisterGlobalProperties("AppStyle", "OtherProperty"); ``` ## Disable Analytics To disable analytics, call: ```java Amplify.Analytics.disable(); ``` ```kotlin Amplify.Analytics.disable() ``` ```java RxAmplify.Analytics.disable(); ``` ## Enable Analytics To re-enable, call: ```java Amplify.Analytics.enable(); ``` ```kotlin Amplify.Analytics.enable() ``` ```java RxAmplify.Analytics.enable(); ```