Skip to content

Instantly share code, notes, and snippets.

@adrianhall
Created March 23, 2018 18:44
Show Gist options
  • Save adrianhall/8e20e553d475f527c4e245bd2efa2af6 to your computer and use it in GitHub Desktop.
Save adrianhall/8e20e553d475f527c4e245bd2efa2af6 to your computer and use it in GitHub Desktop.
Analytics Client base class
package com.amazon.aws.mobile.samples.tasks.providers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import com.amazon.aws.mobile.samples.tasks.extensions.getConnectivityManager
import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration
import com.amazonaws.mobileconnectors.pinpoint.PinpointManager
import com.amazonaws.mobileconnectors.pinpoint.analytics.AnalyticsEvent
class AnalyticsClient {
companion object {
private lateinit var pinpointManager: PinpointManager
private var isConnected = true
fun initialize(context: Context) {
AWSProvider.initialize(context) // Will silently do nothing if already done
val config = PinpointConfiguration(context, AWSProvider.credentialsProvider, AWSProvider.configuration)
pinpointManager = PinpointManager(config)
// register a broadcast receiver to be called when the connection changes
val networkStateReceiver = object : BroadcastReceiver() {
override fun onReceive(_context: Context?, intent: Intent?) {
isConnected = _context?.getConnectivityManager()?.activeNetworkInfo != null
if (isConnected)
pinpointManager.analyticsClient.submitEvents()
}
}
context.registerReceiver(networkStateReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
// Determine the current connectivity state
isConnected = context.getConnectivityManager().activeNetworkInfo != null
}
fun submitEventsIfConnected(submitEvents: Boolean = true) {
if (submitEvents && isConnected)
pinpointManager.analyticsClient.submitEvents()
}
fun startSession(submitEvents: Boolean = true) {
pinpointManager.sessionClient.startSession()
submitEventsIfConnected(submitEvents)
}
fun stopSession(submitEvents: Boolean = true) {
pinpointManager.sessionClient.startSession()
submitEventsIfConnected(submitEvents)
}
fun recordEvent(eventName: String, submitEvents: Boolean = true) {
recordEvent(pinpointManager.analyticsClient.createEvent(eventName))
}
fun recordEvent(event: AnalyticsEvent, submitEvents: Boolean = true) {
pinpointManager.analyticsClient.recordEvent(event)
submitEventsIfConnected(submitEvents)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment