diff --git a/.styles/config/vocabularies/Base/accept.txt b/.styles/config/vocabularies/Base/accept.txt index ffb1674..6fd12d3 100644 --- a/.styles/config/vocabularies/Base/accept.txt +++ b/.styles/config/vocabularies/Base/accept.txt @@ -64,4 +64,8 @@ prepending destructure crypto typedigital -enum \ No newline at end of file +enum +Onboarding +Anonymization +SDKs +Walkthrough \ No newline at end of file diff --git a/.vale.ini b/.vale.ini index 30f120e..525b2b6 100644 --- a/.vale.ini +++ b/.vale.ini @@ -7,3 +7,8 @@ Packages = Microsoft, proselint [*.md] BasedOnStyles = Vale, proselint + +# Disable problematic proselint rules +proselint.DateSpacing = NO +proselint.DateMidnight = NO +proselint.Needless = NO diff --git a/api/api.json b/api/api.json index 24f3e35..0b98ca0 100644 --- a/api/api.json +++ b/api/api.json @@ -1 +1 @@ -{ "tags": "api", "categoryOrder": 6 } +{ "tags": "api", "categoryOrder": 7 } diff --git a/articles/articles.json b/articles/articles.json index bb6efe0..541969d 100644 --- a/articles/articles.json +++ b/articles/articles.json @@ -1 +1 @@ -{ "tags": "articles", "categoryOrder": 2 } +{ "tags": "articles", "categoryOrder": 3 } diff --git a/articles/signal-type-naming.md b/articles/signal-type-naming.md index 030f1bf..2e50caa 100644 --- a/articles/signal-type-naming.md +++ b/articles/signal-type-naming.md @@ -5,7 +5,7 @@ description: Should you give your signal types a simple name, or use a more comp lead: Should you give your signal types a simple name, or use a more complex naming scheme? We'll help you decide. --- -When you send a signal, you'll always have to tell TelemetryDeck what **type** of signal you want to send. Type is just a +When you send an event, you'll always have to tell TelemetryDeck what **type** of signal you want to send. Type is just a String, so in theory you could add anything in there. Your type could be `asfdgllahsavhaligha`, or `This sentence no verb` or even `πŸ€–`. We recommend a different style to keep things clear and easy to find. diff --git a/basics/acquisition.md b/basics/acquisition.md new file mode 100644 index 0000000..6547126 --- /dev/null +++ b/basics/acquisition.md @@ -0,0 +1,138 @@ +--- +title: Acquisition Analytics +tags: + - setup + - basics + - pirate-metrics + - acquisition +basics: true +description: Learn how to interpret and act on TelemetryDeck's acquisition metrics to optimize how users discover your app. +lead: Acquisition is the first stage of the Pirate Metrics framework, focusing on how users find and install your app. TelemetryDeck automatically tracks these patterns to help you make data-driven decisions about marketing, platform support, and regional strategy. +searchEngineTitle: App User Acquisition Analytics & Metrics | TelemetryDeck +searchEngineDescription: Learn how to interpret user acquisition data for your mobile app with TelemetryDeck's automatic acquisition analytics. +order: 20 +--- + +## What is User Acquisition? + +User acquisition represents the entry point of your app's growth funnel – how users discover and install your app. These metrics help you understand your marketing effectiveness, identify your target audience, and spot growth opportunities. + +With TelemetryDeck's Acquisition dashboard, these insights are automatically collected and visualized with no additional code required beyond updating to the latest SDK version. + +## User growth trends + +**Questions you can answer:** +- Is my user base growing over time? +- Are there patterns in my acquisition rate? +- How effective are my marketing campaigns? + +![Daily, Weekly, and Monthly New Users](/docs/images/acquisition-new-users.png) + +**How to interpret the charts:** +- **Consistent upward trend**: Your app is steadily gaining users – investigate what's working and double down +- **Sudden spikes**: Often correlate with marketing campaigns, app updates, or press coverage – for example, the spike in February on the Weekly New Users chart might indicate a successful promotion +- **Cyclical patterns**: May indicate seasonal interest or day-of-week effects - like potential weekend vs. weekday differences +- **Declining trend**: May indicate market saturation or competitive pressures - requiring refreshed marketing + +**Action example:** If you see that your user acquisition consistently spikes after releasing new features (as might be visible in the Weekly New Users chart), you could plan your marketing and development cycles to maximize this pattern. + +## New vs. active users ratio + +**Questions you can answer:** +- What proportion of my users are new versus returning? +- Is my app primarily attracting new users or maintaining existing ones? +- How does acquisition compare to retention? + +![Active vs New Users Ratio](/docs/images/acquisition-active-vs-new.png) + +**How to interpret the chart:** +- **High ratio (>0.5)**: Many new users compared to your active base - suggesting strong acquisition but possibly weak retention +- **Low ratio (<0.2)**: Most of your active users are returning users - indicating strong retention but slower growth +- **Fluctuating ratio**: May indicate inconsistent marketing or seasonal patterns + +**Action example:** In the Daily Active vs New Users chart, you can see the ratio fluctuating between approximately 0.1 and 0.5. When it drops to 0.1 (as seen around March 13th), it suggests that only about 7.69% of your active users that day were new installations - the rest were returning users, which indicates good retention but might signal a need to boost acquisition efforts. + +## Temporal usage patterns + +**Questions you can answer:** +- When during the day do users typically discover my app? +- Which days of the week see the most new installations? +- Do weekdays significantly outperform weekends for user acquisition? + +![Acquisition Time Patterns](/docs/images/acquisition-by-time.png) + +**How to interpret the charts:** +- **Hour of day peaks**: Show prime discovery times (user-local) +- **Day of week trends**: Reveal which days drive the most acquisitions +- **Weekend vs. weekday balance**: Indicates usage context (work vs. leisure) + +**Action example:** The Hour of Day chart shows peak installations occur around 12pm–2pm with the highest activity at 1pm, followed by another strong period at 5pm–6pm. This suggests users are discovering your app during lunch breaks and after work hours. The Day of Week chart reveals significantly higher acquisition on Monday through Wednesday, with Thursday showing the lowest activity. Most notably, the Weekend vs Weekday chart shows only 17.48% of new users come on weekends (compared to the statistical norm of 29%), while 82.52% come on weekdays (above the norm of 71%). This strong weekday bias suggests your app may be more work-related or discovered primarily during business hours. Consider scheduling your marketing campaigns and social media posts for Monday through Wednesday mornings to capitalize on these patterns. + +## Recent temporal patterns + +**Questions you can answer:** +- Are recent user acquisition patterns consistent with long-term trends? +- Have specific events or campaigns created temporary spikes? +- How can I differentiate between one-off events and genuine trends? + +![Recent Acquisition Time Patterns](/docs/images/acquisition-by-time-last-weeks.png) + +**How to interpret the charts:** +- **Four-week hourly view**: Identifies specific days with unusual activity +- **Weekly pattern comparison**: Shows consistency or variability week-to-week +- **Recent weekend/weekday ratio**: Confirms if the overall pattern holds true + +**Action example:** Looking at the past 4 weeks data, we can see more granular patterns emerge. The Hour of Day chart shows a significant spike around noon on one particular day, which might represent a specific marketing event or feature launch rather than a consistent pattern. The Day of Week chart across 4 weeks shows variability, with some weeks showing strong Monday performance while others peak on Wednesday or Friday. However, the Weekend/Weekdays chart consistently shows weekdays outperforming weekends across all 4 weeks, confirming this is a reliable long-term trend rather than coincidental. When planning your marketing strategy, use the long-term data for general scheduling, but analyze these recent patterns to identify successful one-time events that could be replicated. + +## Device & platform distribution + +**Questions you can answer:** +- What devices are my users using to access my app? +- Should I prioritize specific hardware or screen sizes? +- When can I safely drop support for older devices? + +![New Users by Device Type](/docs/images/acquisition-device-distribution.png) + +**How to interpret the chart:** +- **Top device models**: Prioritize testing and optimization for these devices +- **Age of devices**: Indicates how quickly your users upgrade hardware +- **Platform distribution**: Helps inform development priorities + +**Action example:** The chart shows iOS devices account for 70% of your user base, with various iPhone models representing the majority of new users. iPhone 11, 11 Pro, 15, and 16 Pro each account for approximately 10% of acquisitions. This suggests you should prioritize testing on these devices and ensure your UI works well across both newer and slightly older hardware. The presence of older devices like iPhone 12 (5%) indicates you should maintain compatibility with devices from previous generations. With macOS representing 30% of users, cross-platform support remains important but iOS should be your primary focus. + +## Geographic & language distribution + +**Questions you can answer:** +- Where are my users located geographically? +- What languages do my users speak? +- Which markets should I prioritize for expansion? + +![New Users by Country and Language](/docs/images/acquisition-geographic-distribution.png) + +**How to interpret the charts:** +- **Dominant regions**: Countries with the largest segments indicate your strongest markets +- **Unexpected regions**: Emerging segments may represent untapped opportunities +- **Language distribution**: Helps prioritize localization efforts + +**Action example:** Looking at the New Users by Country chart, you can see that the United States (40%) represents your largest market, followed by Germany (25%) and Poland (10%). The United Kingdom, France, Australia, India, and Italy each account for approximately 5% of your user base. This suggests you should prioritize these markets in your marketing efforts. The language distribution confirms that English (65%) should remain your primary focus, with German (15%) as a strong secondary language. The presence of French, Italian, Polish, and Russian (each at approximately 5%) suggests these could be considered for future localization efforts to expand your reach. + +## Making data-driven decisions + +As you analyze your acquisition metrics, consider these key questions: + +1. **Marketing optimization** + - When should you schedule campaigns based on your users' discovery patterns? + - Which geographic markets show the strongest growth potential? + - How can you tailor your App Store presence for your most important regions? + +2. **Development priorities** + - Which devices and platforms deserve the most testing attention? + - What language localizations would benefit the most users? + - Are there seasonal patterns that should influence your feature roadmap? + +3. **Growth opportunities** + - Are there unexpected regions or user segments showing organic growth? + - Does your user acquisition align with your marketing efforts and spend? + - How can you optimize the first-time experience for your most common user profiles? + +Remember that acquisition is just the first step in the user journey. Once you've optimized how users find your app, focus next on activation – ensuring they have a great first experience that turns them into engaged users. \ No newline at end of file diff --git a/basics/basics.json b/basics/basics.json new file mode 100644 index 0000000..a760877 --- /dev/null +++ b/basics/basics.json @@ -0,0 +1 @@ +{ "tags": "basics", "categoryOrder": 2 } diff --git a/basics/index.md b/basics/index.md new file mode 100644 index 0000000..20e9671 --- /dev/null +++ b/basics/index.md @@ -0,0 +1,336 @@ +--- +title: Analytics Overview +tags: + - setup + - basics + - analytics +basics: true +description: Learn how to navigate TelemetryDeck's dashboard to find the insights you need about your app's performance. +lead: TelemetryDeck's dashboard is organized into intuitive sections that help you understand how users interact with your app. This guide walks you through each part of the interface. +searchEngineTitle: TelemetryDeck Dashboard Guide | App Analytics +searchEngineDescription: Learn how to navigate the TelemetryDeck dashboard to get the most out of your app analytics data. +order: 10 +--- + +## Dashboard navigation + +After integrating the TelemetryDeck SDK into your app, your data will start appearing in the TelemetryDeck dashboard. The main navigation tabs help you find different types of insights: + +![TelemetryDeck Main Navigation](/docs/images/dashboard-main-nav.png) + +Let's explore what you'll find in each section: + +## Overview + +The Overview tab provides a high-level summary of your app's performance, showing key metrics like daily active users, total users, user retention, app version distribution, and system version distribution: + +![Overview Dashboard](/docs/images/dashboard-overview.png) + +This view gives you immediate answers to: "How is my app performing right now?" and "Are my users upgrading to new versions?" + +## Customers (User Analytics) + +The Customers section organizes your user data according to the journey users take with your app, from discovery to monetization: + +![Acquisition Dashboard](/docs/images/dashboard-acquisition.png) + +Each tab focuses on a different stage of the user journey: + +**Acquisition** tracks how users find and install your app, with metrics for new user counts, device distribution, geographic insights, and typical discovery patterns. + +**Activation** (Coming Soon) monitors initial engagement with metrics like active user counts, session length distribution, and usage patterns by time of day and day of week. + +**Retention** (Coming Soon) measures how effectively your app keeps users coming back, tracking distinct days used, engaged user metrics, and power user identification. + +**Referral** (Coming Soon) helps understand how users share your app with others. + +**Revenue** (Coming Soon) tracks your app's financial performance metrics. + +
+
+
+ +
+

+ + Acquisition Analytics +

+

Learn how to interpret and act on acquisition metrics to optimize how users discover your app.

+
+
+
+ +
+

+ + Understanding Pirate Metrics Framework +

+

Learn about the AARRR framework that organizes analytics by acquisition, activation, retention, referral, and revenue.

+
+
+
+
+ +TelemetryDeck also provides built-in presets for tracking purchases and revenue that require minimal additional configuration in your app: + +
+
+
+ +
+

+ + Purchase Tracking with Built-in Presets +

+

Learn how to track in-app purchases with TelemetryDeck's built-in purchase tracking system and dashboards.

+
+
+
+
+ +## Metrics (Technical Analytics) + +The Metrics section provides essential technical insights about your app across different devices and platforms: + +![Metrics Dashboard - Devices](/docs/images/metrics-devices.png) + +**Key metrics include:** + +- **Devices**: Hardware models, screen resolutions, and platform distributions +- **Versions**: App and SDK version adoption rates +- **Errors**: Issue monitoring by frequency and type +- **Localization**: Language and regional settings insights +- **Accessibility**: Usage of accessibility features + +
+
+
+ +
+

+ + Complete Metrics Analytics Guide +

+

Explore our comprehensive guide to technical analytics, including detailed information on device types, app versions, error tracking, localization insights, and accessibility usage.

+
+
+
+
+ +## Explore (Signal Analytics) + +The Explore section gives you direct access to your raw event data through multiple views: + +![Explore Dashboard - Signal Types](/docs/images/dashboard-signal-types.png) + +Here you can examine all signal types your app has sent, explore parameters attached to your events, view recent events chronologically, and use the query playground to experiment with data analysis. This section is particularly useful for debugging, understanding user behavior sequences, and diving deeper into specific user actions. + +
+
+
+ +
+

+ + Event Naming Best Practices +

+

Learn how to name your signal types effectively for better organization and analysis.

+
+
+
+
+ +## Dashboards (Custom Insights) + +The Dashboards section allows you to create and organize custom visualizations: + +![Custom Dashboards](/docs/images/dashboard-custom.png) + +You can build insights using either the visual editor (for simple queries) or TelemetryDeck Query Language (TQL) for more complex analysis. Common dashboard setups include: + +- **Feature usage dashboards** that track adoption of specific features +- **Conversion funnels** showing how users progress through multi-step processes +- **User segment comparisons** between different types of users +- **Error monitoring dashboards** focused on app stability + +Each insight can be organized into groups (displayed in the sidebar) to keep related metrics together, such as "Onboarding Experience", "Premium Features", or "App Performance". + +
+
+
+ +
+

+ + Understanding Insights +

+

Learn what insights are and how they help you understand your app's performance data.

+
+
+
+ +
+

+ + Creating Custom Dashboards +

+

Learn how to organize your insights into custom dashboard groups for better organization.

+
+
+
+ +
+

+ + Setting Up Filters +

+

Learn how to use the filter editor to refine your insights and focus on specific data.

+
+
+
+ +
+

+ + Creating Funnel Charts +

+

Learn how to track user conversion through multi-step processes with funnel charts.

+
+
+
+
+ +## Common Dashboard tasks + +### Filtering data + +At the top of most dashboard pages, you'll find time filters that let you focus on specific periods: + +![Filtering Data](/docs/images/dashboard-filtering-data.png) + +- **Last 30 Days** (default) – Shows data from the past month +- **Test Mode** – Toggle to see data from development builds (when your app is run directly from your IDE) + +
+
+
+ +
+

+ + Using Test Mode +

+

Understand how to use Test Mode to separate development events from production data.

+
+
+
+
+ +### Exploring details + +Many visualizations have interactive elements: + +![Exploring Details](/docs/images/dashboard-exploring-details.png) + +- Hover over chart elements to see detailed values +- Click on segments in pie/donut charts to filter by that value +- Use the "..." menu in the top right of cards for additional options + + +## Collaboration + +
+
+
+ +
+

+ + Inviting Team Members +

+

Learn how to invite colleagues to your TelemetryDeck organization and collaborate on analytics.

+
+
+
+
+ +## Advanced features + +
+
+
+ +
+

+ + Using TQL for Advanced Queries +

+

Learn about TelemetryDeck Query Language for creating complex custom insights.

+
+
+
+ +
+

+ + Website Traffic Source Analysis +

+

For web apps, learn how to track where your users are coming from before visiting your site.

+
+
+
+
+ +## Integrations + +
+
+
+ +
+

+ + RevenueCat Integration +

+

Learn how to integrate TelemetryDeck with RevenueCat to combine usage data with purchase data.

+
+
+
+ +
+

+ + Superwall Integration +

+

Learn how to integrate TelemetryDeck with Superwall to get insights into your paywalls.

+
+
+
+
+ +## Privacy & Security + +
+
+
+ +
+

+ + How User Data Anonymization Works +

+

Learn how TelemetryDeck protects user privacy while still providing valuable analytics.

+
+
+
+ +
+

+ + Privacy FAQ +

+

Find answers to common questions about TelemetryDeck's privacy features and policies.

+
+
+
+
\ No newline at end of file diff --git a/basics/metrics.md b/basics/metrics.md new file mode 100644 index 0000000..9ebe19c --- /dev/null +++ b/basics/metrics.md @@ -0,0 +1,177 @@ +--- +title: Metrics Analytics +tags: + - setup + - basics + - technical-metrics + - analytics +basics: true +description: Learn how to interpret and act on TelemetryDeck's technical metrics to optimize your app's performance and compatibility. +lead: Metrics Analytics provides critical technical insights about how your app performs across different devices, platforms, and configurations. TelemetryDeck automatically collects these details to help you make informed decisions about development priorities, OS support, and accessibility needs. +searchEngineTitle: App Technical Metrics & Analytics | TelemetryDeck +searchEngineDescription: Learn how to interpret technical metrics data for your app with TelemetryDeck's automatic device, version, and error analytics. +order: 70 +--- + +## What are Technical Metrics? + +Technical metrics represent the operational aspects of your app – how it performs across devices, versions, languages, and accessibility settings. These metrics help you understand your app's compatibility landscape, identify technical issues, and prioritize development efforts. + +With TelemetryDeck's Metrics dashboard, these insights are automatically collected and visualized with no additional code required beyond the basic SDK integration. + +## Device & platform distribution + +**Questions you can answer:** +- What devices are my users using to access my app? +- Which platforms should I prioritize for development and testing? +- When can I safely drop support for older devices? + +![Device and Platform Distribution](/docs/images/metrics-devices.png) + +**How to interpret the charts:** +- **Models**: Shows specific device models being used, helping prioritize testing +- **Types**: Reveals device categories for understanding user hardware preferences +- **Platforms**: Displays the OS platform breakdown (iOS, macOS, visionOS) +- **Platform distribution changes**: Identifies shifts in platform usage over time + +**Action example:** Looking at the Models chart, we can see MacBook Air (M1 and M2) models account for 17% of devices, while new Apple Vision Pro (RealityDevice) users represent 7%. iPhone models collectively account for a significant portion of usage. With iOS accounting for 62.05% of platform usage and macOS at 34.55%, you should prioritize iOS testing while maintaining solid macOS support. The emergence of visionOS at 3.40% shows early adoption of this platform that may warrant attention for future development. + +## Version analytics + +**Questions you can answer:** +- How quickly are users adopting my latest app version? +- When do users typically update after a new release? +- Are there patterns in build adoption? +- Which SDK versions are in use across your user base? + +![Version Analytics](/docs/images/metrics-versions.png) + +**How to interpret the charts:** +- **App Versions**: Tracks adoption of your app releases over time +- **Build Numbers**: Provides more granular insight into specific build adoption +- **SDK Versions**: Reveals which versions of your SDK are in use + +**Action example:** The App Versions chart shows a clear transition starting in early March, with users moving from the previous version (green) to the latest release (blue). This transition happened relatively quickly, suggesting users are responsive to updates. The Build Numbers chart shows a similar pattern, with a diverse range of builds in use before March consolidating to newer versions. The SDK Versions chart reveals an interesting transition from version 2.2.3 (yellow) to 2.2.4 (light green) and SwiftClient 1.5.1 (green) in March, suggesting your SDK updates are being adopted alongside app updates. This data indicates that you can likely count on most users updating within 2-3 weeks of a release. + +## Error monitoring + +**Questions you can answer:** +- What are the most common errors occurring in my app? +- When did error rates spike or change? +- Which errors should I prioritize fixing? +- Are errors occurring on specific devices or platforms? + +![Error Monitoring](/docs/images/metrics-errors.png) + +**How to interpret the charts:** +- **Most Frequent Errors**: Ranks issues by occurrence count and percentage +- **Error History**: Shows error frequency over time, highlighting spikes +- **Thrown Exception Errors**: Details specific exception types +- **Error distribution**: Helps correlate errors with platforms or versions + +**Action example:** The "Most Frequent Errors" chart identifies "ProjectDetails.loadAppInfo" as your most common error (29% of total errors), followed by "AITranslation.loadAvailability" (25%). These two issues account for more than half of all errors, making them high-priority fixes. The error history graph shows a significant spike in mid-March, which may correlate with a specific release or backend change. Focusing on resolving these top issues first will have the largest impact on improving app stability for your users. + +{% noteinfo "Action Required" %} +TelemetryDeck offers built-in presets for error tracking that require some configuration in your app code. With a few simple implementation steps, you can collect and categorize errors to identify patterns and prioritize fixes. +{% endnoteinfo %} + +
+
+
+ +
+

+ + Implementing Error Tracking +

+

Learn how to set up TelemetryDeck's error reporting system in your app code to capture and analyze runtime issues.

+
+
+
+
+ +## Localization insights + +**Questions you can answer:** +- What languages do my users speak? +- Which regions show significant app usage? +- Should I invest in additional localizations? +- Are users using my app in the same language as their device? + +![Localization Insights](/docs/images/metrics-localization.png) + +**How to interpret the charts:** +- **Preferred Language**: Shows user device language settings +- **App Language**: Indicates which language the system (or user) has selected for your app +- **Region**: Displays geographical distribution of your users +- **Layout Direction**: Shows text direction preferences (LTR vs RTL) + +**Action example:** The data shows a diverse user base with English (45.52% preferred/51.87% app) and German (30.94% preferred/31.12% app) leading language usage. Germany (25.49%), US (20.60%), and UK (13.29%) are your top markets. The strong German presence in both language and regional data suggests significant opportunity for enhanced German-language support and targeted marketing in German-speaking countries. + +## Accessibility usage + +**Questions you can answer:** +- How many of my users utilize accessibility features? +- Which accessibility settings are most common? +- Does my app need better accessibility support? +- How would design changes impact users with accessibility needs? + +![Accessibility Usage](/docs/images/metrics-accessibility.png) + +**How to interpret the charts:** +- **Preferred Content Size**: Shows text size preferences (88.43% use default size "L") +- **Bold Text Usage**: Indicates users who need stronger text contrast (3.31%) +- **Reduce Motion**: Shows users sensitive to animations (0% in this sample) +- **Reduce Transparency**: Reveals users who need less UI transparency (4.13%) + +**Action example:** While most users (88.43%) use the default content size "L", a significant portion (6.61%) use the larger "XXXL" setting, indicating they need much larger text for readability. Additionally, 4.13% of users have enabled the Reduce Transparency setting. These metrics suggest you should test your app thoroughly with larger text settings and ensure it remains functional and attractive for users who need these accessibility features. The complete absence of "Reduce Motion" usage in your current user base doesn't mean you can ignore motion considerations – it may simply reflect that users who need this setting aren't using your app yet. + +I'll revise and shorten the ending to be more concise and ensure links provide value without repetition: + +## Making data-driven decisions with Metrics + +Your technical metrics provide critical insights for development decisions. Consider these key questions as you analyze the data: + +1. **Platform strategy** + - Which device models and OS versions represent your core users? + - When can you adopt new platform features or drop legacy support? + - Does your user base justify expanding to emerging platforms? + +2. **Technical improvements** + - Which errors have the highest impact on your user experience? + - Are specific devices or configurations experiencing more issues? + - How quickly are users adopting your latest app version? + +3. **Localization priorities** + - Which languages and regions show significant adoption? + - Are users using your app in their preferred language? + - Would accessibility improvements benefit a meaningful portion of users? + +Remember that technical metrics complement your user behavior analytics. By combining device insights with acquisition and engagement data, you'll build a complete picture of how technical decisions impact real-world user experience. + +## Related guides + +
+
+
+ +
+

+ + Strategic OS Support Planning +

+

Learn the practical framework for balancing backward compatibility with development resources using metrics data.

+
+
+
+ +
+

+ + Version Migration Insights +

+

Discover patterns in how quickly users update and what this means for your release strategy.

+
+
+
+
\ No newline at end of file diff --git a/basics/pirate-metrics.md b/basics/pirate-metrics.md new file mode 100644 index 0000000..dc2ca4c --- /dev/null +++ b/basics/pirate-metrics.md @@ -0,0 +1,148 @@ +--- +title: The Pirate Metrics Framework +tags: + - basics + - analytics + - pirate-metrics +basics: true +description: Learn how the AARRR framework provides a powerful lens for understanding your app's growth and how TelemetryDeck makes it accessible. +lead: The Pirate Metrics framework (AARRR) gives you a structured approach to understanding your app's full user journey. TelemetryDeck automatically organizes your analytics around these principles, making data-driven growth decisions simpler. +searchEngineTitle: Pirate Metrics (AARRR) Framework for App Analytics | TelemetryDeck +searchEngineDescription: Learn how TelemetryDeck implements the Pirate Metrics (AARRR) framework to provide actionable insights for your app with minimal configuration. +order: 100 +--- + +## What are Pirate Metrics? + +Pirate Metrics, also known as the AARRR framework, was created by venture capitalist Dave McClure to provide a simple, actionable way to think about product growth. The name "Pirate Metrics" comes from the sound pirates make: "AARRR!" + +This framework breaks down the complete user journey into five key stages that form a natural progression: + +![AARRR Framework Chart](/docs/images/aarrr-framework.png) + +1. **Acquisition**: How users discover and install your app +2. **Activation**: How users experience your app for the first time +3. **Retention**: How users become regular, engaged users +4. **Referral**: How existing users invite new users +5. **Revenue**: How your app generates sustainable income + +## Why we use Pirate Metrics at TelemetryDeck + +We've adopted the Pirate Metrics framework for TelemetryDeck's analytics because: + +1. **It's comprehensive**: The framework covers the entire user lifecycle from first discovery to becoming a paying, loyal advocate +2. **It's focused**: Each stage has clear metrics that matter, helping you avoid "data overload" +3. **It's actionable**: The framework naturally leads to specific strategies for improvement at each stage +4. **It's universal**: These concepts apply to virtually any app or digital product regardless of category + +Most importantly, organizing analytics this way helps you identify your biggest growth opportunities. For example, if you have excellent acquisition but poor activation, you know exactly where to focus your efforts. + +## How TelemetryDeck implements Pirate Metrics + +The great news? **TelemetryDeck has done all the hard work for you**. + +Rather than requiring you to: +- Research which metrics matter for each stage +- Create custom tracking for each metric +- Build visualizations and dashboards +- Understand the intricacies of the framework + +TelemetryDeck automatically organizes analytics around the Pirate Metrics framework with built-in insights that require minimal setup. Just update to our latest SDK, and the built-in metrics start working immediately. + +## Built-in insights for each stage + +Here's what TelemetryDeck automatically tracks for each stage of the Pirate Metrics framework: + +### Acquisition insights + +TelemetryDeck automatically tracks: +- Daily, weekly, and monthly new user counts +- Device and platform distribution (which devices are your new users using?) +- Geographic distribution (where are your new users located?) +- Acquisition time patterns (when do users typically discover your app?) + +All of these insights help you understand where your users come from and optimize your marketing efforts. + +### Activation insights (Coming Soon) + +Our upcoming activation dashboard will automatically track: +- Daily, weekly, and monthly active user counts +- Average session length distribution +- Average sessions per active user +- Usage patterns by time of day and day of week +- First-time user experiences + +These insights help you understand if users are successfully getting started with your app. + +### Retention insights (Coming Soon) + +Our retention dashboard will automatically track: +- Distinct days used distribution (how often users return) +- Engaged users metrics (session length > 2 minutes, 5+ days used per month) +- Power users metrics (session length > 5 minutes, 12+ days used per month) +- Long-term usage trends + +These insights help you identify if users are finding ongoing value in your app. + +### Referral insights (Coming Soon) + +Our referral dashboard will track: +- Referral tracking metrics +- Channel effectiveness comparison +- Social sharing activity + +These insights help you understand how effectively your app generates word-of-mouth growth. + +### Revenue insights (Coming Soon) + +Our revenue dashboard will track: +- Purchase counts (trials and non-trials) +- Free trial metrics +- Trial conversion rates +- Revenue trends over time + +These insights help you understand your app's financial performance and optimize monetization. + +## Minimal configuration required + +The beauty of TelemetryDeck's implementation is that **most of these insights work with zero additional code** beyond basic SDK integration. Our SDKs automatically collect the necessary data to power these dashboards. + +For some advanced metrics (particularly in the Referral and Revenue categories), you may need to add a few simple signals to your app. We provide simple, copy-paste examples for all major platforms that make this process quick and easy. + +## Growth without the complexity + +By implementing Pirate Metrics as built-in dashboards, TelemetryDeck gives you the benefits of sophisticated growth analytics without requiring you to: + +- Become an expert in analytics theory +- Build complex custom dashboards +- Spend time deciphering what metrics matter +- Manually track dozens of different events + +Instead, you get clear, actionable insights organized in a way that naturally guides you toward your biggest growth opportunities. + +## Getting started with Pirate Metrics + +To access these powerful dashboards: + +1. **Update your SDK** to the latest version (SwiftSDK 2.8.0+, KotlinSDK 6.0.0+, FlutterSDK 2.3.0+) +2. **Navigate to the Customers tab** in your TelemetryDeck dashboard +3. **Explore each section** of the Pirate Metrics framework + +As you navigate through these sections, you'll develop a comprehensive understanding of your app's performance throughout the entire user journeyβ€”from discovery to monetizationβ€”all with minimal setup on your part. + +To dive deeper into specific parts of the framework, check out our dedicated guides: + +
+
+
+ +
+

+ + Acquisition Analytics Guide +

+

Learn how to interpret and act on acquisition metrics to optimize how users discover your app.

+
+
+
+
diff --git a/guides/android-setup.md b/guides/android-setup.md index a1ce38c..b8bd877 100644 --- a/guides/android-setup.md +++ b/guides/android-setup.md @@ -23,10 +23,9 @@ dependencies { } ``` - ## Permission for internet access -Sending signals requires access to the internet so the following permission should be added to the app's `AndroidManifest.xml` +Sending events requires access to the internet so the following permission should be added to the app's `AndroidManifest.xml` ```xml @@ -48,58 +47,89 @@ A quick way to start is by adding your App ID to the `application` section of th And that's it! Your app is now ready to use TelemetryDeck. Hit the build button to check if everything is working – if not, check out the troubleshooting section below. -For more advanced configuration options, programmatic usage and information about signals, parameters and all other aspects of the SDK, check out the [README file](https://github.com/TelemetryDeck/KotlinSDK?tab=readme-ov-file#programmatic-usage). - Feel free to browse the [TelemetryDeck SDK's source code](https://github.com/TelemetryDeck/KotlinSDK) as well. It's tiny and you'll see for yourself how TelemetryDeck is hashing user identifiers before they ever reach the server. Privacy, yay! -## You're all set! +## Verify your setup + +Build and run your app to verify that TelemetryDeck is properly integrated. The SDK automatically tracks user activity when the app starts or returns from the background. + +{% notewarning "When running from Android Studio, you're sending test signals" %} +If your app is configured with a debug build type (i.e. the default build variant running from Android Studio), your signals will be tagged as **Test Signals**, meaning that you can easily filter them out later. You'll see them show up in the TelemetryDeck Dashboard when the **Test Mode** toggle under the tab bar is turned on. +{% endnotewarning %} + +Open the TelemetryDeck Dashboard, navigate to "Explore > Recent Signals" and make sure "Test Mode" is enabled. You should see automatic signals appear after launching your app. + +--- -By default, the TelemetryDeck SDK will automatically track user activity based on when the app starts, or when it returns from the background. This means, that this is all you need to do to start sending signals to TelemetryDeck. +{% noteinfo "Ready for Basic Insights" %} +Congratulations! With just the SDK integration you've completed, TelemetryDeck will automatically track user sessions, app launches, and device information. This basic setup provides valuable built-in insights without any additional code. -You can now go to the [Dashboard](https://dashboard.telemetrydeck.com/) and watch your signals pour in, for example in the "Recent Signals" list. Signals produced while working in your IDE will automatically be tagged as **Test Signals** so remember to enable Test Mode in the Dashboard to see your testing data your Insights and charts. Disable Test Mode in the dashboard to see your production data once your app is live. +You can now build and release your app. Once users start using it, your TelemetryDeck dashboard will begin showing data about user behavior, device types, and other key metrics. +{% endnoteinfo %} -## Privacy Policy and Opt-Out +## Privacy Policy You don't need to update your privacy policy, [but we recommend you do it anyway](/docs/guides/privacy-faq/#do-i-need-to-add-telemetrydeck-to-my-privacy-policy%3F). +## Enhancing Your Analytics (Optional) -## Advanced: Sending Signals Manually +While basic session tracking provides valuable information, sending custom events lets you answer questions specific to how users engage with *your* app. -Let's send a signal manually. Navigate to a Kotlin file and add the following code at the top: +### Sending custom events + +Navigate to a Kotlin file and add the following code at the top: ```kotlin import com.telemetrydeck.sdk.TelemetryDeck ``` -Then, in an appropriate function, you can send your manual first signal. - -By default, you're not sending signals immediately; you're _enqueing_ them. This batches them up to be sent every now and then, and is the recommended way to send signals, as it will conserve a lot of battery life for your users. To enqueue a signal to be sent by TelemetryDeck use this line: +Then, in an appropriate function, you can send your first custom event: ```kotlin TelemetryDeck.signal("pizzaOrderConfirmed") ``` -Of course you can replace `somethingSpecificHappened` by any other name you'd like. - -## Advanced: Sending Signals with Parameters, and enriching signals - -The `signal` function takes an optional parameter for the **user** of your application, and any additional **payload** you want to send. +You can also add a user identifier and parameters to your events: ```kotlin TelemetryDeck.signal("pizzaOrderConfirmed", myUser.emailAddress, mapOf("pizzaType" to "hawaii")) ``` -A user identifier is any string that uniquely identifies a user of your application. For example, you might use the user's email address, or the user's Facebook ID. We will _hash_ this string before we send it to the server, and there we'll salt+hash it again, so that it's impossible to guess the user's identifier but still making it possible to count and recognize users. You can read more about how we manage user identifiers [here](https://github.com/TelemetryDeck/KotlinSDK?tab=readme-ov-file#user-identifiers). +{% noteinfo "About Signal Data" %} +A user identifier is any string that uniquely identifies a user of your application. We will _hash_ this string before sending it to the server, and there we'll salt+hash it again for privacy protection. -The payload is a map of parameters to be sent with the signal, and can be any key-value pair. We'll automatically send information about the user's device, the system version, and the app's version with each signal, but you can add to that list of parameters either with each call to `enqueue` or by using [enrich providers](https://github.com/TelemetryDeck/KotlinSDK#custom-telemetry). +The payload is a map of parameters to be sent with the signal. We'll automatically send information about the user's device, system version, and app version with each signal, but you can add custom parameters either with each call or by using [enrich providers](https://github.com/TelemetryDeck/KotlinSDK#custom-telemetry). +{% endnoteinfo %} ---- +For more advanced configuration options, programmatic usage and information about signals, parameters and all other aspects of the SDK, check out the [README file](https://github.com/TelemetryDeck/KotlinSDK?tab=readme-ov-file#programmatic-usage). ## Troubleshooting - `Could not find method implementation() for arguments on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.` – Make sure you're adding the entries to `android/app/build.gradle`, not `android/build.gradle`. [More Info](https://stackoverflow.com/questions/45615474/gradle-error-could-not-find-method-implementation-for-arguments-com-android) ---- -## Requirements: +## SDK requirements The TelemetryDeck SDK requires Android SDK 21 or later. For a complete list of requirements, see the [Requirements section](https://github.com/TelemetryDeck/KotlinSDK?tab=readme-ov-file#requirements) of the README. + +## What to do next + +Now that you've integrated TelemetryDeck, learn how to use the analytics platform to gain valuable insights about your users: + +
+
+
+ +
+

+ + πŸ“Š Analytics Walkthrough +

+

Learn how to navigate TelemetryDeck, interpret insights, and use analytics to make data-driven decisions that improve your app and grow your user base.

+

+ Start here to get real value from your analytics + β†’ +

+
+
+
+
diff --git a/guides/flutter-setup.md b/guides/flutter-setup.md index 6fd7b8b..f3b2349 100644 --- a/guides/flutter-setup.md +++ b/guides/flutter-setup.md @@ -54,18 +54,37 @@ Change the app's `AndroidManifest.xml` to include: Set the `com.apple.security.network.client` entitlement to `true` in the `macos/Runner/DebugProfile.entitlements` and `macos/Runner/Release.entitlements` files. You can also do this in Xcode by selecting the `macos` target, then the `Signing & Capabilities` tab, and checking `Outgoing connections (Client)` for both the Release and Debug targets of your app. +## Verify your setup -## Sending signals +Build and run your app to verify that TelemetryDeck is properly integrated. The SDK automatically begins collecting data when initialized. -Send a signal using the following method: +{% notewarning "When running from your IDE, you're sending test signals" %} +If your app is configured with a debug build type (i.e. the default build variant running from Android Studio), your signals will be tagged as **Test Signals**, meaning that you can easily filter them out later. You'll see them show up in the TelemetryDeck Dashboard when the **Test Mode** toggle under the tab bar is turned on. +{% endnotewarning %} + +Open the TelemetryDeck Dashboard, navigate to "Explore > Recent Signals" and make sure "Test Mode" is enabled. You should see automatic signals appear after launching your app. + +--- + +{% noteinfo "Ready for Basic Insights" %} +Congratulations! With just the SDK integration you've completed, TelemetryDeck will automatically track user sessions, app launches, and device information. This basic setup provides valuable built-in insights without any additional code. + +You can now build and release your app. Once users start using it, your TelemetryDeck dashboard will begin showing data about user behavior, device types, and other key metrics. +{% endnoteinfo %} + +## Enhancing your analytics (optional) + +While basic session tracking provides valuable information, sending custom events lets you answer questions specific to how users engage with *your* app. + +### Sending custom events + +Send a simple event using the following method: ```dart Telemetrydecksdk.send("signal_type") ``` -## Signals with additional attributes - -Append any number of custom attributes to a signal: +You can append any number of custom attributes to a signal: ```dart Telemetrydecksdk.send("signal_type", @@ -73,9 +92,7 @@ Telemetrydecksdk.send("signal_type", } ``` -## Stop sending signals - -Prevent signals from being sent using the stop method: +To temporarily stop sending signals (for example, if a user opts out): ```dart Telemetrydecksdk.stop() @@ -83,38 +100,79 @@ Telemetrydecksdk.stop() In order to restart sending events, you will need to call the `start` method again. -## Test mode +### Additional configuration options -If your app's build configuration is set to "Debug", all signals sent will be marked as testing signals. In the Telemetry Viewer app, activate **Test Mode** to see those. +#### Manual Test Mode control If you want to manually control whether test mode is active, you can set the `testMode` field: -```swift -Telemetrydecksdk.start(TelemetryManagerConfiguration( - appID: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", - testMode: true)); +```dart +Telemetrydecksdk.start( + const TelemetryManagerConfiguration( + appID: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", + testMode: true + ), +); ``` -## Custom Server +#### Logging output -A tiny subset of our customers will want to use a custom signal ingestion server or a custom proxy server. To do so, you can pass the URL of the custom server to the `TelemetryManagerConfiguration`: +Enable additional logs by setting the `debug` field to `true`: -```swift -Telemetrydecksdk.start(TelemetryManagerConfiguration( - appID: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", - apiBaseURL: "https://nom.telemetrydeck.com")); +```dart +void main() { + Telemetrydecksdk.start( + const TelemetryManagerConfiguration( + appID: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", + debug: true + ), + ); +} ``` -## Logging output +#### Custom server -By default, some logs helpful for monitoring TelemetryDeck are printed out to the native console of each platform. You can enable additional logs by setting the `debug` field to `true`: +A tiny subset of our customers will want to use a custom signal ingestion server or a custom proxy server. To do so, you can pass the URL of the custom server to the `TelemetryManagerConfiguration`: ```dart -void main() { - Telemetrydecksdk.start(TelemetryManagerConfiguration( - appID: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", - debug: true)); -} +Telemetrydecksdk.start( + const TelemetryManagerConfiguration( + appID: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", + apiBaseURL: "https://nom.telemetrydeck.com", + ), +); ``` For more advanced configuration options, programmatic usage and information about signals, parameters and all other aspects of the SDK, check out the [README file](https://github.com/TelemetryDeck/FlutterSDK?tab=readme-ov-file#sending-signals). + +## App Store requirements + +When publishing your Flutter app, you'll need to address privacy requirements: + +- **iOS Apps**: Disclose analytics usage in Apple's App Store Connect privacy details. TelemetryDeck is privacy-focused, but disclosure is still required. +- **All Platforms**: Consider updating your privacy policy to mention analytics collection. + +For guidance, see our [Apple App Privacy guide](/docs/articles/apple-app-privacy/) and [Privacy FAQ](/docs/guides/privacy-faq/#do-i-need-to-add-telemetrydeck-to-my-privacy-policy%3F). + +## What to do next + +Now that you've integrated TelemetryDeck, learn how to use the analytics platform to gain valuable insights about your users: + +
+
+
+ +
+

+ + πŸ“Š Analytics Walkthrough +

+

Learn how to navigate TelemetryDeck, interpret insights, and use analytics to make data-driven decisions that improve your app and grow your user base.

+

+ Start here to get real value from your analytics + β†’ +

+
+
+
+
diff --git a/guides/javascript-setup.md b/guides/javascript-setup.md index 758e429..c8a794e 100644 --- a/guides/javascript-setup.md +++ b/guides/javascript-setup.md @@ -26,7 +26,7 @@ There are different tutorials you should read depending on your use case. {% endnoteinfo %} -## Set Up +## Set up When setting up, you need to check wether the platform you're working on has the SubtleCrytpo API available. @@ -34,7 +34,7 @@ Anytime you're in a browser context, your code will have access to the default S The next two sections explain these two cases in detail. Either way, please install the package using npm or the package manager of your choice, such as NPM. -### Set up in Browser Based Applications +### Set up in browser-based applications This is the correct setup procedure for JavaScript code that runs in a browser and can install an NPM package. For example: @@ -64,7 +64,7 @@ If can't specify a user identifier at initialization, you can set it later by se Please note that `td.signal` is an async function that returns a promise. -### Set up in Node.js Applications +### Set up in Node.js applications Initialize the TelemetryDeck SDK with your app ID and your user's user identifier. Since `globalThis.crypto.subtle` does not exist in Node.js, you need to pass in an alternative implementation provided by Node.js. @@ -96,13 +96,13 @@ Some frameworks, like Svelte, don't need `crypto` and node.js. Here are some tip {% endnotewarning %} -### Advanced Initialization Options +### Advanced initialization options See the [source code](https://github.com/TelemetryDeck/JavaScriptSDK/blob/main/src/telemetrydeck.js#L6-L17) for a full list of available options accepted by the `TelemetryDeck` constructor. -## Sending Signals +## Sending Events -Send a basic signal by calling `td.signal()` with a signal type: +Send a basic event by calling `td.signal()` with a signal type: ```javascript td.signal(""); @@ -157,8 +157,25 @@ export class Store { The default implementation can be found in `src/utils/store.js`. ---- - - - -[TelemetryDeck](https://telemetrydeck.com?source=github) helps you build better products with live usage data. Try it out for free. +## What to do next + +Now that you've integrated TelemetryDeck, learn how to use the analytics platform to gain valuable insights about your users: + +
+
+
+ +
+

+ + πŸ“Š Analytics Walkthrough +

+

Learn how to navigate TelemetryDeck, interpret insights, and use analytics to make data-driven decisions that improve your app and grow your user base.

+

+ Start here to get real value from your analytics + β†’ +

+
+
+
+
diff --git a/guides/objective-c-setup.md b/guides/objective-c-setup.md index 10538cf..3911731 100644 --- a/guides/objective-c-setup.md +++ b/guides/objective-c-setup.md @@ -10,7 +10,7 @@ tags: featured: false testedOn: Xcode 14.1 & Swift 5.5 description: Configure the TelemetryDeck SDK in Your Objective-C Application for iOS and macOS -lead: Let's include the TelemetryClient Swift Package in your Objective-C application and send signals! +lead: Let's include the TelemetryClient Swift Package in your Objective-C application and send events! order: 1000 --- @@ -65,7 +65,6 @@ The `TelemetryClient` package will provide you with a class `TelemetryManager` t return YES; } - ``` {% noteinfo "You need your app's Unique Identifier" %} @@ -74,12 +73,35 @@ TelemetryDeck assigns a unique identifier to your app, and you need to hand that Use the [TelemetryDeck Dashboard](https://dashboard.telemetrydeck.com) to create a new app and copy its unique identifier into your computer's clipboard. {% endnoteinfo %} -## Sending signals +## Verify your setup -Let's send a signal to show the app has launched correctly. +Run your app to verify that TelemetryDeck is properly integrated. Let's send an event to show the app has launched correctly: -{% noteinfo "What's a signal?" %} +```objc +[TelemetryManager send:@"applicationDidFinishLaunching"]; +``` + +{% notewarning "When running from Xcode, you're sending test signals" %} +If your app is built in `DEBUG` configuration (i.e. running from Xcode), your events will be tagged as **Test Signals**, meaning that you can easily filter them out later. You'll see them show up in the TelemetryDeck Dashboard when the **Test Mode** toggle under the tab bar is turned on. +{% endnotewarning %} + +Open the TelemetryDeck Dashboard, navigate to "Explore > Recent Signals" and make sure "Test Mode" is enabled. You should see your signal appear after launching your app. + +--- + +{% noteinfo "Ready for Basic Insights" %} +Congratulations! With just the SDK initialization, TelemetryDeck will automatically track user sessions, app launches, and device information. This basic setup provides valuable built-in insights without any additional code. + +You can now build and ship your app. Once users start using it, your TelemetryDeck dashboard will begin showing data about user behavior, device types, and other key metrics. +{% endnoteinfo %} + +## Enhancing your analytics (optional) + +While basic session tracking provides valuable information, sending custom events lets you answer questions specific to how users engage with *your* app. +### Sending custom events + +{% noteinfo "What's a signal?" %} Signals represent an **event** or a **view** that happened in your app, which is used by a **user**. Signals consist of these parts: - **Signal Type**: A string that indicates which kind of event happened @@ -88,17 +110,9 @@ Signals represent an **event** or a **view** that happened in your app, which is See the [Signals Reference](/docs/api/signals-reference/) for more information about how you can effectively use Signals. {% endnoteinfo %} -See the [TelemetryDeck package's `README.md` file](https://github.com/TelemetryDeck/SwiftSDK/blob/main/README.md) for more information on how to send signals. For now, let's just send one signal that tells us the app has launched. Go to your app delegate and below the initialization add this line: +You don't need to keep an instance of TelemetryManager and hand it around, just call the `send` function on the class directly. If you want to add custom metadata payload, add it to the function call as a dictionary: ```objc -[TelemetryManager send:@"applicationDidFinishLaunching"]; -``` - -We're done. This is all you need to send a signal. You don't need to keep an instance of TelemetryManager and hand it around, just call the `send` function on the class directly. If you want to add custom metadata payload, add it to the function call like as a dictionary. - -This is helpful for additional parameters for filtering or grouping signals. We'll auto add some metadata for you, like the app version, device model, etc. - -```swift [ TelemetryManager send:@"applicationDidFinishLaunching" @@ -106,19 +120,37 @@ This is helpful for additional parameters for filtering or grouping signals. We' ]; ``` -And you're done! You are now sending signals to the TelemetryDeck server (the signals are marked as **Testing Signals** in the dashboard, switch on **Testing Mode** to see them). +The metadata is helpful for additional parameters for filtering or grouping signals. We'll automatically add some metadata for you, like the app version, device model, and more. -{% notewarning "When running from Xcode, you're sending testing signals" %} +For more information on how to send events, see the [TelemetryDeck package's `README.md` file](https://github.com/TelemetryDeck/SwiftSDK/blob/main/README.md). -If you app is built in `DEBUG` configuration (that means running from Xcode), your signals will be tagged as **Testing Signals**, meaning that you can filter them out later. You'll see them show up in the TelemetryDeck Dashboard when it's set to **Test Mode**. -{% endnotewarning %} +## App Store requirements + +Before uploading your app to the App Store, you'll need to complete Apple's privacy details on App Store Connect. Although TelemetryDeck is privacy-focused, you still need to disclose analytics usage. -## You're all set! +For guidance on completing these requirements, see our [Apple App Privacy guide](/docs/articles/apple-app-privacy/). -You can now send signals! Don't overdo it in the beginning. It's okay if you only send **one** signal, named `applicationDidFinishLaunching` in the beginning. This will already give you number of users, number of launches, retention… a lot! +For privacy policy recommendations, check our [Privacy FAQ](/docs/guides/privacy-faq/#do-i-need-to-add-telemetrydeck-to-my-privacy-policy%3F). -After a while, you can add a send call for each screen in your app, so you can see which screens are used most. We also recommend adding all your custom settings to your metadata each time (except the ones that might identify an individual user please). This way you can see which settings most of your users use. +## What to do next -## Privacy Policy and Opt-Out +Now that you've integrated TelemetryDeck, learn how to use the analytics platform to gain valuable insights about your users: -You don't need to update your privacy policy, [but we recommend you do it anyway](/docs/guides/privacy-faq/#do-i-need-to-add-telemetrydeck-to-my-privacy-policy%3F). +
+
+
+ +
+

+ + πŸ“Š Analytics Walkthrough +

+

Learn how to navigate TelemetryDeck, interpret insights, and use analytics to make data-driven decisions that improve your app and grow your user base.

+

+ Start here to get real value from your analytics + β†’ +

+
+
+
+
diff --git a/guides/privacy-faq.md b/guides/privacy-faq.md index 339d92c..c85a295 100644 --- a/guides/privacy-faq.md +++ b/guides/privacy-faq.md @@ -38,7 +38,7 @@ Here's an example of how you could mention TelemetryDeck in your privacy policy: ## Do I need to fill out Apple's app privacy details? -By default, the privacy manifest metadata included in the TelemetryDeck Swift SDK should already fill out Apple App Privacy Details information for you. See our [App Privacy Guide](/docs/articles/apple-app-privacy/) for more information. +Yes, every app needs to fill out this form, even those that do not track any data. But our Swift SDK includes a privacy manifest which should list all the right things in your [generated privacy report](https://developer.apple.com/documentation/bundleresources/describing-data-use-in-privacy-manifests#Create-your-apps-privacy-report). Alternatively, see our [App Privacy Guide](/docs/articles/apple-app-privacy/) for detailed instructions. ## Do I need to offer an opt-out from TelemetryDeck? @@ -56,7 +56,7 @@ See our article [How TelemetryDeck anonymizes user identifiers](/docs/articles/a ## What data does TelemetryDeck collect from my app users? -By default, TelemetryDeck collects the following metadata from app users: +By default, TelemetryDeck collects some metadata such as the following from app users: - clientUser: The anonymized user identifier that you can use to identify a user - type: The type of the signal, e.g. "event" or "error" @@ -65,6 +65,8 @@ By default, TelemetryDeck collects the following metadata from app users: - Device Information: architecture, locale, operating system version, device model, platform - The SDK Version +For a full list, refer to [this document](/docs/ingest/default-parameters/). + Developers can optionally send additional metadata with each signal. ### What data does TelemetryDeck collect from my website visitors? diff --git a/guides/react-setup.md b/guides/react-setup.md index c92631a..f131071 100644 --- a/guides/react-setup.md +++ b/guides/react-setup.md @@ -1,5 +1,5 @@ --- -title: React and React Native Setup Guide +title: React (Native) Setup Guide tags: - Setup - JavaScript @@ -57,7 +57,7 @@ ReactDOM.render(, document.getElementById("root")); ## Basic usage -To send signals, use the `useTelemetryDeck` hook and destructure the various methods that can be used to modify the instance or send signals to TelemetryDeck. +To send events, use the `useTelemetryDeck` hook and destructure the various methods that can be used to modify the instance or send events to TelemetryDeck. For more information, see the [JS documentation](/docs/guides/javascript-setup/). ```tsx @@ -94,7 +94,7 @@ function Dashboard() { export { Dashboard }; ``` -## React Native & Expo Support +## React Native & Expo support `telemetrydeck-react` also supports React Native or Expo. If no global implementation is available because you are not on the web, TelemetryDeck needs a subtle implementation which can be either injected by extending `globalThis` or added to the TelemetryDeck instance. @@ -136,6 +136,29 @@ import App from "./App"; registerRootComponent(App); ``` +## What to do next + +Now that you've integrated TelemetryDeck, learn how to use the analytics platform to gain valuable insights about your users: + +
+
+
+ +
+

+ + πŸ“Š Analytics Walkthrough +

+

Learn how to navigate TelemetryDeck, interpret insights, and use analytics to make data-driven decisions that improve your app and grow your user base.

+

+ Start here to get real value from your analytics + β†’ +

+
+
+
+
+ ## Sponsors [](https://typedigital.de) diff --git a/guides/swift-setup.md b/guides/swift-setup.md index c519efe..cc3ef00 100644 --- a/guides/swift-setup.md +++ b/guides/swift-setup.md @@ -9,7 +9,7 @@ tags: featured: true testedOn: Xcode 16 & Swift 5.9 description: Configure the TelemetryDeck SDK in Your Swift Application for iOS, macOS, watchOS and tvOS -lead: Let's include the TelemetryDeck Swift Package in your application and send signals! +lead: Let's include the TelemetryDeck Swift Package in your application and send events! order: 100 --- @@ -43,9 +43,9 @@ Xcode will ask you to link the package with your target in the next screen, titl In case Xcode forgets to ask you to link the library with your target, you can do so manually by selecting your target in the project navigator and selecting the Build Phases tab. Click the + button in the Link Binary With Libraries section and select the `TelemetryDeck` library. {% endnoteinfo %} -## Initializing the TelemetryDeck Swift Package +## Initializing the TelemetryDeck Swift package -The `TelemetryDeck` package will provide you with a class `TelemetryDeck` that you'll use for all interactions with TelemetryDeck. Before you can use that class, you'll need to initialize it at the start of your app. We strongly recommend doing so as soon as possible, as you won't be able to send Signals before the `TelemetryDeck` is initialized. +The `TelemetryDeck` package will provide you with a class `TelemetryDeck` that you'll use for all interactions with TelemetryDeck. Before you can use that class, you'll need to initialize it at the start of your app. We strongly recommend doing so as soon as possible, as you won't be able to send events before the `TelemetryDeck` is initialized. This is slightly different depending on whether you use SwiftUI or UIKit's `AppDelegate` to manage your app's lifecycle, so let's look at these individually. @@ -146,42 +146,55 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } ``` -You are now ready to send signals! +## Verify your setup -## Sending signals +Run your app to verify that TelemetryDeck is properly integrated. The SDK automatically sends a `TelemetryDeck.Session.started` signal when your app launches. -Let's send a signal to show that something has happened in your app. +{% notewarning "When running from Xcode, you're sending test events" %} -{% noteinfo "What is a signal?" %} +If your app is built in `DEBUG` configuration (i.e. running from Xcode), your events will be tagged as **Test Signals**, meaning that you can easily filter them out later. You'll see them show up in the TelemetryDeck Dashboard when the **Test Mode** toggle under the tab bar is turned on. +{% endnotewarning %} -Signals are an indication that **an event** happened in your app, which is used by a **user**. Signals consist of these parts: +Open the TelemetryDeck Dashboard, navigate to "Explore > Recent Signals" and make sure "Test Mode" is enabled. You should see the automatic session signal appear after launching your app. -- **Signal Name** – A string that indicates which kind of event happened -- **User Identifier** – A string that identifies your user (we auto-generate one for you) -- **Optional Parameters** – A dictionary of additional data about your app or the event triggering the signal +--- -See the [Signals Reference](/docs/api/signals-reference/) for more information about how you can effectively use Signals. +{% noteinfo "Ready for Basic Insights" %} +Congratulations! With just the SDK initialization, TelemetryDeck will automatically track user sessions, app launches, and device information. This basic setup provides valuable built-in insights without any additional code. + +You can now build and ship your app. Once users start using it, your TelemetryDeck dashboard will begin showing data about user behavior, device types, and other key metrics. {% endnoteinfo %} -{% notewarning "When running from Xcode, you're sending test signals" %} +## Enhancing your analytics (optional) -If your app is built in `DEBUG` configuration (i.e. running from Xcode), your signals will be tagged as **Test Signals**, meaning that you can easily filter them out later. You'll see them show up in the TelemetryDeck Dashboard when the **Test Mode** toggle in the sidebar is turned on. -{% endnotewarning %} +While basic session tracking provides valuable information, sending custom events lets you answer questions specific to how users engage with *your* app. + +### Common questions you can answer with custom events + +- Which features do users engage with most frequently? +- Where in the onboarding flow do users drop off? +- How are users navigating between different screens? +- Which settings or configurations are most popular? + +### Sending custom events + +{% noteinfo "What is a signal?" %} +Signals are an indication that **an event** happened in your app, which is used by a **user**. Signals consist of these parts: -The default way to set a user identifier is `TelemetryDeck.updateDefaultUserID`. This way you only have to set it once, or when it changes, such as user login. -See the [TelemetryDeck SDK's `README.md` file](https://github.com/TelemetryDeck/SwiftSDK/blob/main/README.md) for more information on how to send signals. +- **Signal Name** – A string that indicates which kind of event happened +- **User Identifier** – A string that identifies your user (we auto-generate one for you) +- **Optional Parameters** – A dictionary of additional data about your app or the event triggering the signal -{% noteinfo "Best practice:" %} -You can also set a user identifier per send call as shown below, but this is not usually necessary. +See the [Signals Reference](/docs/api/signals-reference/) for more information about how you can effectively use Signals. {% endnoteinfo %} -Let's imaging your app is a pizza oven monitor and we want to send a signal that tells us the user has tapped the "Start Baking" button. Go to the place in your code where the user taps the button and add the following code: +Let's imagine your app is a pizza oven monitor and we want to send a signal that tells us the user has tapped the "Start Baking" button. Go to the place in your code where the user taps the button and add the following code: ```swift TelemetryDeck.signal("Oven.Bake.startBaking") ``` -And done. This is all you need to send a signal. You do not need to keep an instance of TelemetryDeck and hand it around, just call the static `signal` function on the class directly. If you want to add a custom parameters, add them to the function call like this: +That's all you need to send a signal. You do not need to keep an instance of TelemetryDeck and hand it around, just call the static `signal` function on the class directly. If you want to add custom parameters, add them to the function call like this: ```swift TelemetryDeck.signal( @@ -197,11 +210,7 @@ TelemetryDeck.signal( The value you pass to `customUserID` will be automatically hashed before being sent to our servers to protect the users privacy. This does not happen for the values in `parameters` though, so hash yourself where needed. {% endnoteinfo %} -And you're done! You are now sending signals to the TelemetryDeck server. πŸŽ‰ - -Run your app and confirm that your first signal arrived in the "Recent Signals" tab on TelemetryDeck. Don't forget to turn on "Test Mode" to see signals sent in debug builds! - -## Configuring Default Signal Properties (Optional) +## Configuring default signal properties (optional) When initializing TelemetryDeck, you can configure some defaults to help keep your signals organized and consistent: @@ -224,20 +233,31 @@ config.defaultParameters = {[ // These parameters will be merged with any additional parameters you specify in signal() calls ``` -## Fill out Apple's app privacy details - -Something you need to do before you can upload your app to the App Store is going through Apple's privacy details on App Store Connect. This informs your users about what data is collected, and how it is collected. - -Although TelemetryDeck is privacy friendly, as we only handle not personally identifiable information, you still need to click through the privacy details. - -We have a [handy guide](/docs/articles/apple-app-privacy/) where we go over each step that is required. - -## Privacy Policy and Opt-Out - -You don't need to update your privacy policy, [but we recommend you do it anyway](/docs/guides/privacy-faq/#do-i-need-to-add-telemetrydeck-to-my-privacy-policy%3F). - -## You're all set! - -You can now send signals! Don't overdo it in the beginning. It's okay if you only send **one** signal, named `App.launched`. This will already give you number of users, number of launches, system versions, retention, and more! - -After a while, you can add a signal for each screen in your app, so you can see which screens your users use most. It's also recommended to add all your custom settings to your metadata each time. This way you can see which settings most of your users use. +## App Store requirements + +Before uploading your app to the App Store, you'll need to complete Apple's privacy details on App Store Connect. Although TelemetryDeck is privacy-focused, you still need to disclose analytics usage. + +For guidance on completing these requirements, see our [Apple App Privacy guide](/docs/articles/apple-app-privacy/). For privacy policy recommendations, check our [Privacy FAQ](/docs/guides/privacy-faq/#do-i-need-to-add-telemetrydeck-to-my-privacy-policy%3F). + +## What to do next + +Now that you've integrated TelemetryDeck, learn how to use the analytics platform to gain valuable insights about your users: + +
+
+
+ +
+

+ + πŸ“Š Analytics Walkthrough +

+

Learn how to navigate TelemetryDeck, interpret insights, and use analytics to make data-driven decisions that improve your app and grow your user base.

+

+ Start here to get real value from your analytics + β†’ +

+
+
+
+
diff --git a/guides/vue-setup.md b/guides/vue-setup.md index 64290d1..6d58dc8 100644 --- a/guides/vue-setup.md +++ b/guides/vue-setup.md @@ -45,7 +45,7 @@ app.use(TelemetryDeckPlugin, { app.mount("#app"); ``` -## Basic Usage +## Basic usage ```ts