public void configure()

in aws-analytics-pinpoint/src/main/java/com/amplifyframework/analytics/pinpoint/AWSPinpointAnalyticsPlugin.java [333:414]


    public void configure(
            JSONObject pluginConfiguration,
            @NonNull Context context
    ) throws AnalyticsException {
        if (pluginConfiguration == null) {
            throw new AnalyticsException(
                    "Missing configuration for " + getPluginKey(),
                    "Check amplifyconfiguration.json to make sure that there is a section for " +
                            getPluginKey() + " under the analytics category."
            );
        }

        AWSPinpointAnalyticsPluginConfiguration.Builder configurationBuilder =
                AWSPinpointAnalyticsPluginConfiguration.builder();

        AWSCredentialsProvider credentialsProvider;

        if (credentialsProviderOverride != null) {
            credentialsProvider = credentialsProviderOverride;
        } else {
            try {
                credentialsProvider =
                        (AWSMobileClient) Amplify.Auth.getPlugin(AUTH_DEPENDENCY_PLUGIN_KEY).getEscapeHatch();
            } catch (IllegalStateException exception) {
                throw new AnalyticsException(
                        "AWSPinpointAnalyticsPlugin depends on AWSCognitoAuthPlugin but it is currently missing",
                        exception,
                        "Before configuring Amplify, be sure to add AWSCognitoAuthPlugin same as you added " +
                                "AWSPinpointAnalyticsPlugin."
                );
            }
        }

        // Read all the data from the configuration object to be used for record event
        try {
            configurationBuilder
                    .withAppId(pluginConfiguration.getJSONObject("pinpointAnalytics")
                            .getString(PinpointConfigurationKey.APP_ID.getConfigurationKey()));
            configurationBuilder
                    .withRegion(pluginConfiguration.getJSONObject("pinpointAnalytics")
                            .getString(PinpointConfigurationKey.REGION.getConfigurationKey()));

            if (pluginConfiguration.has(PinpointConfigurationKey.AUTO_FLUSH_INTERVAL.getConfigurationKey())) {
                configurationBuilder
                        .withAutoFlushEventsInterval(pluginConfiguration
                                .getLong(PinpointConfigurationKey.AUTO_FLUSH_INTERVAL.getConfigurationKey()));
            }

            if (pluginConfiguration.has(PinpointConfigurationKey.TRACK_APP_LIFECYCLE_EVENTS
                    .getConfigurationKey())) {
                configurationBuilder
                        .withTrackAppLifecycleEvents(pluginConfiguration
                                .getBoolean(PinpointConfigurationKey.TRACK_APP_LIFECYCLE_EVENTS
                                        .getConfigurationKey()));
            }
        } catch (JSONException exception) {
            throw new AnalyticsException(
                    "Unable to read appId or region from the amplify configuration json.",
                    exception,
                    "Make sure amplifyconfiguration.json is a valid json object in expected format. " +
                            "Please take a look at the documentation for expected format of amplifyconfiguration.json."
            );
        }

        AWSPinpointAnalyticsPluginConfiguration pinpointAnalyticsPluginConfiguration = configurationBuilder.build();
        PinpointManager pinpointManager = PinpointManagerFactory.create(
                context,
                pinpointAnalyticsPluginConfiguration,
                credentialsProvider
        );
        this.analyticsClient = pinpointManager.getAnalyticsClient();
        this.targetingClient = pinpointManager.getTargetingClient();

        // Initiate the logic to automatically submit events periodically
        autoEventSubmitter = new AutoEventSubmitter(analyticsClient,
                pinpointAnalyticsPluginConfiguration.getAutoFlushEventsInterval());
        autoEventSubmitter.start();

        // Instantiate the logic to automatically track app session
        autoSessionTracker = new AutoSessionTracker(this.analyticsClient, pinpointManager.getSessionClient());
        autoSessionTracker.startSessionTracking(application);
    }