/Documentation

Android SDK

Updated Aug 10, 2026

Overview of Android SDK

How to set up Android SDK

implementation("io.stape:android-sgtm:1.0")

Initialization

import io.stape.sgtm.Options import io.stape.sgtm.Stape val stape = Stape.withOption(Options("yourdomain.com"))

Sending events

stape.sendEvent("event1", mapOf("userId" to "cdd1eac3e254", "language" to "en")) stape.sendEvent("event2", EventData(userId = "cdd1eac3e254", language = "en"))

Tracking Firebase events

import android.os.Bundle import com.google.firebase.analytics.FirebaseAnalytics import io.stape.sgtm.firebase.FirebaseAnalyticsAdapter import io.stape.sgtm.Options import io.stape.sgtm.Stape private val stape = Stape.withOption(Options("yourdomain.com")) private val firebaseAnalytics = FirebaseAnalytics.getInstance(this) val analytics = FirebaseAnalyticsAdapter(stape, firebaseAnalytics) // Using Bundle as a parameter analytics.logEvent("event3", Bundle().apply { putString("userId", "cdd1eac3e254") putString("language", "en") }) // Using ParamBuilder as a parameter analytics.logEvent("event4") { param("userId", "cdd1eac3e254") param("language", "en") }

Trying sample app

  1. 1.
  2. 2.
  3. 3.
  4. 4.
  5. 5.
  6. 6.

Stape Data Client in server GTM

Data Client on GitHub.
Templates
Add new Client template
Add Data Client
Submit changes

How to add Android SDK to your project

implementation 'io.stape:android-sgtm:1.0'
import android.app.Application; import io.stape.sgtm.Options; import io.stape.sgtm.Stape; public class MyApp extends Application {     @Override     public void onCreate() {         super.onCreate();         Options options = new Options("gtm.example.com");         Stape stape = Stape.withOptions(options);     } }
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import io.stape.sgtm.Stape; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity {     private Stape stape;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         // Initialize Stape instance         stape = Stape.getInstance();         // Send "Add to Cart" event         sendAddToCartEvent();     }     private void sendAddToCartEvent() {         // Create event data         Map<String, Object> eventData = new HashMap<>();         eventData.put("value", 68);         eventData.put("currency", "USD");         eventData.put("page_hostname", "stape.io");         eventData.put("page_location", "http://stape.io");         eventData.put("user_data", getUserData());         // Send event         stape.sendEvent("add_to_cart", eventData);     }     private Map<String, Object> getUserData() {         Map<String, Object> userData = new HashMap<>();         userData.put("email", sha256("jhonn@doe.com"));         return userData;     }     private String sha256(String input) {         try {             MessageDigest digest = MessageDigest.getInstance("SHA-256");             byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));             StringBuilder hexString = new StringBuilder();             for (byte b : hash) {                 String hex = Integer.toHexString(0xff & b);                 if (hex.length() == 1) hexString.append('0');                 hexString.append(hex);             }             return hexString.toString();         } catch (NoSuchAlgorithmException e) {             throw new RuntimeException(e);         }     } }

How to test the setup

The most common problem when using the SDK is getting a 400 error

Was this article helpful?

Comments

Can’t find what you are looking for?