Airship Android Integration

Getting Started

Integration Example

You can find our Bluedot – Airship Android Example on GitHub or follow the steps below to integrate Airship and Bluedot PointSDK.

 

Integrate Airship SDK into your App

Details on integrating the Airship SDK can be found on their documentation website here.

 

Integrate Bluedot PointSDK in your Project

To integrate Point SDK, please refer to the integration steps here

Interaction between Airship SDK and Bluedot PointSDK

Start Airship Services

1. Start Airship services by overriding onCreate in your custom Application class

override fun onCreate() {    
    super.onCreate()

    UAirship.takeOff(this, OnReadyCallback {
      // Enable user notifications
      it.pushManager.userNotificationsEnabled = true
    })
}
or add Autopilot configuration to AndroidManifest.xml
<meta-data android:name="com.urbanairship.autopilot" android:value="com.package.yourAirshipAutopilotClass"/>

Setup Bluedot Location Services

1. Start PointSDK at the entry point in your application by overriding onCreate() and replace your Bluedot ProjectId in <Your Bluedot Project ID>:

super.onCreate();
 ...
 // start Point SDK
boolean locationPermissionGranted = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED

if (locationPermissionGranted) {
  serviceManager = ServiceManager.getInstance(this);
  if (!serviceManager.isBluedotServiceInitialized()) {
    InitializationResultListener resultListener = bdError -> {
    String text = "Initialization Result "

    if (bdError != null) {
      text = text + bdError.reason
      Log.i("Bluedot", text)
    }
    else {
      startGeoTriggering()
    }
  }
  serviceManager.initialize("<Your Bluedot Project ID>", resultListener)
 }
}
else
{
   requestLocationPermissions()
}

2. Start Geo-triggering feature

public void startGeoTriggering() {
  // Start Geo-triggering feature
  GeoTriggeringService.builder()
    .start(this, geoTriggerError -> {
      if (geoTriggerError != null) {
        Log.i("Bluedot", "Error in starting GeoTrigger" + geoTriggerError.reason)
      }
      else {
        Log.i("Bluedot", "GeoTrigger started successfully")
      }
  });
}

3. Receiving Geo-trigger events

Create a receiver in the Manifest to receive Geo-trigger events (such as entering a location):

<application android:label="@string/app_name" >
  <receiver
    android:name="my.package.ExampleGeoTriggerReceiver"
    android:enabled="true"
    android:exported="false"
  >
    <intent-filter>
      <action android:name="io.bluedot.point.GEOTRIGGER" />
    </intent-filter>
  </receiver>
</application>

Implement the receiver

public class ExampleGeoTriggerReceiver extends GeoTriggeringEventReceiver {
  @Override
  public void onZoneEntryEvent(@NotNull ZoneEntryEvent entryEvent, @NotNull Context context) {
    ...
  }

  @Override
  public void onZoneExitEvent(@NotNull ZoneExitEvent exitEvent, @NotNull Context context) {
    ...
  }
}
image

Exit does not apply to GEOLINE™.

Use Case

Objective: To trigger automated message pushed to the user when their device checks in into Geofence .

Setting Automated Message: Automated message to be setup via Urban Airship Dashboard, to trigger when a new event is posted.

override fun onZoneEntryEvent(entryEvent: ZoneEntryEvent, context: Context) {
  val builder = CustomEvent.Builder("bluedot_place_entered")
  builder.setInteraction("location", entryEvent.zoneInfo.zoneId)
  entryEvent.zoneInfo.zoneName?.let { builder.addProperty("bluedot_zone_name", it) }
  entryEvent.zoneInfo.customData?.let {
    for ((key, value) in it) {
      builder.addProperty(key, value)
    }
  }
  val event = builder.build()
  event.track()
}

override fun onZoneExitEvent(exitEvent: ZoneExitEvent, context: Context) {
  val builder = CustomEvent.Builder("bluedot_place_exited")
  builder.setInteraction("location", exitEvent.zoneInfo.zoneId)
  exitEvent.zoneInfo.zoneName?.let { builder.addProperty("bluedot_zone_name", it) }
  exitEvent.zoneInfo.customData?.let {
    for ((key, value) in it) {
      builder.addProperty(key, value)
    }
  }

  if (exitEvent.dwellTime != -1) {
    builder.addProperty("dwell_time", exitEvent.dwellTime)
  }
  val event = builder.build()
  event.track()
}
Created by Bluedot DevOps on February 24, 2018