From 813fee5e7cc8bad4196254063cc3e7772a7e6d1c Mon Sep 17 00:00:00 2001 From: Elijah Hunt Date: Tue, 7 Oct 2025 13:44:42 +0200 Subject: [PATCH 1/5] Fixes for migration - Batch 2.3 --- .../mixpanel-kotlin-android.md | 29 +++++------ .../kotlin-android/kotlin-android-faq.md | 44 ++++++++-------- .../mixpanel-react-native.md | 48 +++++++++--------- ...py.png => anomaly_detection_dashboard.png} | Bin ...py.png => protocols_meta_source_setup.png} | Bin ...ng => slack_violation_generated_setup.png} | Bin ...block copy.png => tracking-plan-block.png} | Bin ...er copy.png => tracking-plan-debugger.png} | Bin ...itor copy.png => tracking-plan-editor.png} | Bin ...hema copy.png => tracking-plan-schema.png} | Bin ...g => typewriter-compile-time-warnings.png} | Bin ...es copy.png => typewriter-event-names.png} | Bin ...opy.png => typewriter-order-completed.png} | Bin ...copy.png => typewriter-property-names.png} | Bin ...png => typewriter-run-time-validation.png} | Bin ...ite copy.png => typewriter-test-suite.png} | Bin ...er-token copy.png => typewriter-token.png} | Bin ...opy.png => typewriter-violation-toast.png} | Bin 18 files changed, 61 insertions(+), 60 deletions(-) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{anomaly_detection_dashboard copy.png => anomaly_detection_dashboard.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{protocols_meta_source_setup copy.png => protocols_meta_source_setup.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{slack_violation_generated_setup copy.png => slack_violation_generated_setup.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{tracking-plan-block copy.png => tracking-plan-block.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{tracking-plan-debugger copy.png => tracking-plan-debugger.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{tracking-plan-editor copy.png => tracking-plan-editor.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{tracking-plan-schema copy.png => tracking-plan-schema.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-compile-time-warnings copy.png => typewriter-compile-time-warnings.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-event-names copy.png => typewriter-event-names.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-order-completed copy.png => typewriter-order-completed.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-property-names copy.png => typewriter-property-names.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-run-time-validation copy.png => typewriter-run-time-validation.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-test-suite copy.png => typewriter-test-suite.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-token copy.png => typewriter-token.png} (100%) rename src/connections/sources/catalog/libraries/mobile/react-native/images/{typewriter-violation-toast copy.png => typewriter-violation-toast.png} (100%) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md index e94aeb650c..5bd00c7fa6 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md @@ -3,14 +3,12 @@ title: Analytics Kotlin Mixpanel Plugin strat: kotlin-android --- -[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. +[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. -Segment's Mixpanel destination plugin code is open source and [available on GitHub](https://github.com/segment-integrations/analytics-kotlin-mixpanel){:target="_blank"}. +Segment's Mixpanel destination plugin code is open source and [available on GitHub](https://github.com/segment-integrations/analytics-kotlin-mixpanel){:target="\_blank"}. ## Getting Started - - 1. From the Segment app Destinations page click on **Add Destination**. 2. Search for Mixpanel in the Destinations Catalog and confirm the Source to connect to. 3. Copy your Mixpanel "API Secret" and "Token", and paste them into the Connection Settings in Segment. @@ -30,11 +28,9 @@ Or the following for Kotlin DSL implementation('com.segment.analytics.kotlin.destinations:mixpanel:') ``` - - ## Using the Plugin in your App -Open the file where you setup and configure the Analytics-Kotlin library. Add this plugin to the list of imports. +Open the file where you setup and configure the Analytics-Kotlin library. Add this plugin to the list of imports. ``` import com.segment.analytics.kotlin.destinations.mixpanel.MixpanelDestination @@ -67,12 +63,11 @@ analytics.identify("user-123", buildJsonObject { The first thing you'll want to do is to identify your users so Mixpanel knows who they are. You'll use the Identify method to accomplish this which takes the unique `userId` of a user and any `traits` you know about them. > info "" -> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are _not_ using this setting, use the instructions below. - +> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are \_not_ using this setting, use the instructions below. As soon as you have a `userId` for a visitor that was previously anonymous you'll need to [`alias`](/docs/connections/spec/alias/) their old anonymous `id` to the new `userId`. In Mixpanel only **one** anonymous user history can be merged to **one** identified user. For that reason you should only call `alias` once, right after a user registered, but before the first `identify`. - When you call the Identify method from the client in either a browser using Analytics.js or one a mobile SDKs, several things occur: Segment recognizes and translates the [special traits](/docs/connections/spec/identify/#traits) so that they fit the expectations of Mixpanel's API. The table below shows the mappings. Pass the key on the left and Segment transforms it to the key on the right before sending to Mixpanel. +When you call the Identify method from the client in either a browser using Analytics.js or one a mobile SDKs, several things occur: Segment recognizes and translates the [special traits](/docs/connections/spec/identify/#traits) so that they fit the expectations of Mixpanel's API. The table below shows the mappings. Pass the key on the left and Segment transforms it to the key on the right before sending to Mixpanel. @@ -117,7 +112,7 @@ Group calls are sent to Mixpanel if, **and only if**, 1. The Group Identifier Traits setting has one or more traits saved in the destination settings for Mixpanel. ![Group ID Traits](/docs/connections/destinations/catalog/mixpanel/images/mixpanel-group-id-traits.png) -2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="_blank"}. +2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="\_blank"}. 3. A Group trait with the same name as one of the configured Group Identifier Traits is sent with the group call. ```swift @@ -128,7 +123,7 @@ analytics.group("user-123", buildJsonObject { }); ``` -Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="_blank"}. +Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="\_blank"}. If the group call **does not** have a group trait that matches the Group Identifier Traits setting, then the event will be ignored. @@ -157,6 +152,7 @@ analytics.track("View Product", buildJsonObject { put("productName" "Striped trousers") }); ``` + Because Mixpanel is an event tracking analytics tool, you'll want to [`track`](/docs/connections/spec/track/) your user's actions. The more useful events you [`track`](/docs/connections/spec/track/), the better Mixpanel becomes. You should use the [`track`](/docs/connections/spec/track/) method to accomplish this. The Segment [`track`](/docs/connections/spec/track/) method maps events and event properties directly to Mixpanel events and event properties. @@ -173,14 +169,13 @@ There are two strings to avoid when naming event properties that will be sent to Previously, Segment set all traits and properties as both Super Properties and People Properties (If you had Mixpanel People enabled). Now Mixpanel allows you to segment your reports by both People Properties and Super Properties. To give you better precision and control over what property or trait gets set as a Super Property or People Property, you can disable **Set All Traits as Super Properties or People Properties By Default** and pass in the properties or traits that you want to send to Mixpanel as People or Super Properties as shown below. Segment passes through all of Mixpanel's special traits as People Properties so you only need to add the ones that aren't on [this list](#group-using-device-mode). - -![mixpanel people properties list](images/mixpanelpeoplesuperprops.png) +![mixpanel people properties list](/docs/connections/destinations/catalog/mixpanel/images/mixpanelpeoplesuperprops.png) ### Incrementing events You don't need to add extra code to increment event counts for Mixpanel people, as long as they are "known users". Supply the events that should be incremented. -![mixpanel increment events list](images/mixpanelincrementinpeople.png) +![mixpanel increment events list](/docs/connections/destinations/catalog/mixpanel/images/mixpanelincrementinpeople.png) You can find this in the **Advanced Options** of your Mixpanel settings on your Segment Destinations page. @@ -188,7 +183,7 @@ For each event name listed, Segment calls Mixpanel `increment`, and set a user t For example, if you add **Logged In** to the list of increment events, Segment increments a user trait called **Logged In** and set a trait called **Last Logged In** with the current date and time. -If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "*Viewed* Signup *Page*" and `.screen('Listing')` would translate to "*Viewed* Listing *Screen*". +If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "_Viewed_ Signup _Page_" and `.screen('Listing')` would translate to "_Viewed_ Listing _Screen_". Remember, Segment sends one event per `page` call. @@ -232,4 +227,4 @@ If you're testing in Xcode remember you must first background the app, then the Push notifications are only available for projects bundling the Segment-Mixpanel SDK. > info "" -> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in [Android] (/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature) +> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in [Android] (/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md index 8e1f3dea68..aa4a62d7f4 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md @@ -30,6 +30,7 @@ The core Segment SDK is extremely lightweight. The JAR weighs in at 12.3KB. ## How should I configure Proguard? For the Segment SDKs, you can add the following snippet to your Proguard configuration: + ``` - keep class com.segment.analytics.** { *; } - keep class androidx.lifecycle.DefaultLifecycleObserver @@ -49,42 +50,45 @@ Yes. Please refer to the [Java Compatibility](https://github.com/segmentio/analy If you're on a version prior to `1.10.4`, the SDK internally uses a number of Java 8 language APIs through desugaring (see [Java 8+ API](https://developer.android.com/studio/write/java8-support#library-desugaring) desugaring support). Please make sure your project either uses Android Gradle plugin 4.0.0 or higher, has a minimum API level of 26, or is upgraded to the latest SDK. - ## My deeplinks are not tracked? - While Analytics Kotlin will automatically track deep links that open your app when the `trackDeepLinks` Configuration property is set to `true`. There are some situations when the app is already open that could cause a deep link open event to be missed. The `openUrl` function allows you to manually track that a deep link has opened your app while your app was already open: +``` +override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + + // Add a deep-link opened event manually. + // This is necessary when your Activity has a android:launchMode of + // 'singleInstance', 'singleInstancePerTask', 'singleTop', or any other mode + // that will re-use an existing Activity instead of creating a new instance. + // The Analytics SDK automatically identifies when you app is started from + // a deep link if the Activity is created, but not if it is re-used. Therefore + // we have to add this code to manually capture the Deep Link info. + + val referrer = "unknown" + analytics.trackDeepLinkOpen(referrer, intent) +} +``` - override fun onNewIntent(intent: Intent?) { - super.onNewIntent(intent) - - // Add a deep-link opened event manually. - // This is necessary when your Activity has a android:launchMode of - // 'singleInstance', 'singleInstancePerTask', 'singleTop', or any other mode - // that will re-use an existing Activity instead of creating a new instance. - // The Analytics SDK automatically identifies when you app is started from - // a deep link if the Activity is created, but not if it is re-used. Therefore - // we have to add this code to manually capture the Deep Link info. - - val referrer = "unknown" - analytics.trackDeepLinkOpen(referrer, intent) - } - -Note: Due to the way deep links are handled in Android, we can not know the referrer when a deep link causes `onNewIntent()` to be fired instead of `onCreate()`. +Note: Due to the way deep links are handled in Android, we can not know the referrer when a deep link causes `onNewIntent()` to be fired instead of `onCreate()`. For a sample implementation see our [Kotlin Sample App](https://github.com/segmentio/analytics-kotlin/tree/main/samples/kotlin-android-app). ## Will I still see device-mode integrations listed as `false` in the integrations object? + When you successfully package a plugin in device-mode, you will no longer see the integration listed as `false` in the integrations object for a Segment event. This logic is now packaged in the event metadata, and is not surfaced in the Segment debugger. ## What is the instanceId set in context? -The instanceId was introduced in [V 1.10.1](https://github.com/segmentio/analytics-kotlin/releases/tag/1.10.1){:target="_blank"} and correlates events to a particular instance of the client in a scenario when you might have multiple instances on a single app. + +The instanceId was introduced in [V 1.10.1](https://github.com/segmentio/analytics-kotlin/releases/tag/1.10.1){:target="\_blank"} and correlates events to a particular instance of the client in a scenario when you might have multiple instances on a single app. ## How should I configure my proxy URL? + To proxy events to Segment's API, you can configure your proxy URL via the `requestFactory` setting: + ``` Analytics(BuildConfig.SEGMENT_WRITE_KEY, androidContext()) { trackApplicationLifecycleEvents = true @@ -104,4 +108,4 @@ Analytics(BuildConfig.SEGMENT_WRITE_KEY, androidContext()) { } ``` -When proxying your events, you must forward the batched events to `https://api.segment.io/v1/b`. The `https://api.segment.io/v1/batch` endpoint is reserved for events arriving from server side sending, and proxying to that endpoint for your mobile events may result in unexpected behavior. \ No newline at end of file +When proxying your events, you must forward the batched events to `https://api.segment.io/v1/b`. The `https://api.segment.io/v1/batch` endpoint is reserved for events arriving from server side sending, and proxying to that endpoint for your mobile events may result in unexpected behavior. diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md index 30fa0347bc..08179eaab8 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md @@ -3,14 +3,12 @@ title: Analytics React Native Mixpanel Plugin strat: react-native --- -[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. +[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. Segment's Mixpanel destination plugin code is open source and available on GitHub. You can view it [here.](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-mixpanel) ## Getting Started - - 1. From the Segment app Destinations page click on **Add Destination**. 2. Search for Mixpanel in the Destinations Catalog and confirm the Source to connect to. 3. Copy your Mixpanel "API Secret" and "Token", and paste them into the Connection Settings in Segment. @@ -21,11 +19,13 @@ Segment's Mixpanel destination plugin code is open source and available on GitHu You need to install the `@segment/analytics-react-native-plugin-mixpanel` and the `mixpanel-react-native` dependency. Using NPM: + ```bash npm install --save @segment/analytics-react-native-plugin-mixpanel mixpanel-react-native ``` Using Yarn: + ```bash yarn add @segment/analytics-react-native-plugin-mixpanel mixpanel-react-native ``` @@ -33,6 +33,7 @@ yarn add @segment/analytics-react-native-plugin-mixpanel mixpanel-react-native Run `pod install` after the installation to autolink the Mixpanel SDK. See [Mixpanel React Native SDK](https://github.com/mixpanel/mixpanel-react-native) for more details of this dependency. + ## Usage Follow the [instructions for adding plugins](https://github.com/segmentio/analytics-react-native#adding-plugins) on the main Analytics client: @@ -40,12 +41,12 @@ Follow the [instructions for adding plugins](https://github.com/segmentio/analyt In your code where you initialize the analytics client call the `.add(plugin)` method with an `MixpanelPlugin` instance: ```ts -import { createClient } from '@segment/analytics-react-native'; +import { createClient } from "@segment/analytics-react-native"; -import { MixpanelPlugin } from '@segment/analytics-react-native-plugin-mixpanel'; +import { MixpanelPlugin } from "@segment/analytics-react-native-plugin-mixpanel"; const segmentClient = createClient({ - writeKey: 'SEGMENT_KEY' + writeKey: "SEGMENT_KEY", }); segmentClient.add({ plugin: new MixpanelPlugin() }); @@ -58,19 +59,19 @@ If you're not familiar with the Segment Specs, take a look to understand what th ```js const { identify } = useAnalytics(); -identify('user-123', { - username: 'MisterWhiskers', - email: 'hello@test.com', - plan: 'premium', +identify("user-123", { + username: "MisterWhiskers", + email: "hello@test.com", + plan: "premium", }); ``` The first thing you'll want to do is to identify your users so Mixpanel knows who they are. You'll use the Identify method to accomplish this which takes the unique `userId` of a user and any `traits` you know about them. > info "" -> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are _not_ using this setting, use the instructions below. +> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are \_not_ using this setting, use the instructions below. - When you call the Identify method, several things occur: Segment recognizes and translates the [special traits](/docs/connections/spec/identify/#traits) so that they fit the expectations of Mixpanel's API. The table below shows the mappings. Pass the key on the left and Segment transforms it to the key on the right before sending to Mixpanel. +When you call the Identify method, several things occur: Segment recognizes and translates the [special traits](/docs/connections/spec/identify/#traits) so that they fit the expectations of Mixpanel's API. The table below shows the mappings. Pass the key on the left and Segment transforms it to the key on the right before sending to Mixpanel.
@@ -115,18 +116,18 @@ Group calls are sent to Mixpanel if, **and only if**, 1. The Group Identifier Traits setting has one or more traits saved in the destination settings for Mixpanel. ![Group ID Traits](/docs/connections/destinations/catalog/mixpanel/images/mixpanel-group-id-traits.png) -2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="_blank"}. +2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="\_blank"}. 3. A Group trait with the same name as one of the configured Group Identifier Traits is sent with the group call. ```js const { group } = useAnalytics(); -group('some-company', { - name: 'Segment', +group("some-company", { + name: "Segment", }); ``` -Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="_blank"}. +Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="\_blank"}. If the group call **does not** have a group trait that matches the Group Identifier Traits setting, then the event will be ignored. @@ -152,11 +153,12 @@ If you're not familiar with the Segment Specs, take a look to understand what th ```ts const { track } = useAnalytics(); -track('View Product', { +track("View Product", { productId: 123, - productName: 'Striped trousers', + productName: "Striped trousers", }); ``` + Because Mixpanel is an event tracking analytics tool, you'll want to [`track`](/docs/connections/spec/track/) your user's actions. The more useful events you [`track`](/docs/connections/spec/track/), the better Mixpanel becomes. You should use the [`track`](/docs/connections/spec/track/) method to accomplish this. The Segment [`track`](/docs/connections/spec/track/) method maps events and event properties directly to Mixpanel events and event properties. @@ -173,14 +175,13 @@ There are two strings to avoid when naming event properties that will be sent to Previously, Segment set all traits and properties as both Super Properties and People Properties (If you had Mixpanel People enabled). Now Mixpanel allows you to segment your reports by both People Properties and Super Properties. To give you better precision and control over what property or trait gets set as a Super Property or People Property, you can disable **Set All Traits as Super Properties or People Properties By Default** and pass in the properties or traits that you want to send to Mixpanel as People or Super Properties as shown below. Segment passes through all of Mixpanel's special traits as People Properties so you only need to add the ones that aren't on [this list](#group-using-device-mode). - -![mixpanel people properties list](images/mixpanelpeoplesuperprops.png) +![mixpanel people properties list](/docs/connections/destinations/catalog/mixpanel/images/mixpanelpeoplesuperprops.png) ### Incrementing events You don't need to add extra code to increment event counts for Mixpanel people, as long as they are "known users". Supply the events that should be incremented. -![mixpanel increment events list](images/mixpanelincrementinpeople.png) +![mixpanel increment events list](/docs/connections/destinations/catalog/mixpanel/images/mixpanelincrementinpeople.png) You can find this in the **Advanced Options** of your Mixpanel settings on your Segment Destinations page. @@ -188,7 +189,7 @@ For each event name listed, Segment calls Mixpanel `increment`, and set a user t For example, if you add **Logged In** to the list of increment events, Segment increments a user trait called **Logged In** and set a trait called **Last Logged In** with the current date and time. -If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "*Viewed* Signup *Page*" and `.screen('Listing')` would translate to "*Viewed* Listing *Screen*". +If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "_Viewed_ Signup _Page_" and `.screen('Listing')` would translate to "_Viewed_ Listing _Screen_". Remember, Segment sends one event per `page` call. @@ -214,6 +215,7 @@ In short, Segment sends one event to Mixpanel per `screen` call. ### Sending data to Mixpanel's European Union Endpoint To implement Mixpanel in the European Union, enable the setting "Enable European Union Endpoint" on the Settings tab of the Mixpanel destination. When this setting is enabled, Segment updates the endpoint for any data sent from server-side libraries, browsers using Analytics.js, or the iOS SDK. + ### When Will I See Data from my Mobile App? If you already have an app deployed with the Segment library, and you just enabled Mixpanel mobile, it can take up to an hour for all your mobile users to refresh their Segment settings cache, and learn about the new service that you want to send to. @@ -234,4 +236,4 @@ If you're testing in Xcode remember you must first background the app, then the If an `ip` property is passed to Mixpanel, the value will be interpreted as the IP address of the request and therefore automatically parsed into Mixpanel geolocation properties (City, Country, Region). After that IP address has been parsed, they will throw out the IP address and only hold onto those resulting geolocation properties. As such, if you want to display an IP address as a property within the Mixpanel UI or within raw data, you will simply want to slightly modify the naming convention for that property. -Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more in Mixpanel's [Import Events](https://mixpanel.com/help/reference/http#tracking-events){:target="_blank"} documentation. \ No newline at end of file +Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more in Mixpanel's [Import Events](https://mixpanel.com/help/reference/http#tracking-events){:target="\_blank"} documentation. diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/anomaly_detection_dashboard copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/anomaly_detection_dashboard.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/anomaly_detection_dashboard copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/anomaly_detection_dashboard.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/protocols_meta_source_setup copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/protocols_meta_source_setup.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/protocols_meta_source_setup copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/protocols_meta_source_setup.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/slack_violation_generated_setup copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/slack_violation_generated_setup.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/slack_violation_generated_setup copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/slack_violation_generated_setup.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-block copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-block.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-block copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-block.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-debugger copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-debugger.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-debugger copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-debugger.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-editor copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-editor.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-editor copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-editor.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-schema copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-schema.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-schema copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/tracking-plan-schema.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-compile-time-warnings copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-compile-time-warnings.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-compile-time-warnings copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-compile-time-warnings.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-event-names copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-event-names.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-event-names copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-event-names.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-order-completed copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-order-completed.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-order-completed copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-order-completed.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-property-names copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-property-names.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-property-names copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-property-names.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-run-time-validation copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-run-time-validation.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-run-time-validation copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-run-time-validation.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-test-suite copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-test-suite.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-test-suite copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-test-suite.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-token copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-token.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-token copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-token.png diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-violation-toast copy.png b/src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-violation-toast.png similarity index 100% rename from src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-violation-toast copy.png rename to src/connections/sources/catalog/libraries/mobile/react-native/images/typewriter-violation-toast.png From de9f2c75da9204b6b10ac2b8aa3dbe42cbd69d62 Mon Sep 17 00:00:00 2001 From: Elijah Hunt Date: Tue, 7 Oct 2025 14:07:36 +0200 Subject: [PATCH 2/5] Auto format issues fixes --- .../destination-plugins/mixpanel-kotlin-android.md | 10 +++++----- .../mobile/kotlin-android/kotlin-android-faq.md | 2 +- .../destination-plugins/mixpanel-react-native.md | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md index 5bd00c7fa6..6552205f7e 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md @@ -3,9 +3,9 @@ title: Analytics Kotlin Mixpanel Plugin strat: kotlin-android --- -[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. +[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. -Segment's Mixpanel destination plugin code is open source and [available on GitHub](https://github.com/segment-integrations/analytics-kotlin-mixpanel){:target="\_blank"}. +Segment's Mixpanel destination plugin code is open source and [available on GitHub](https://github.com/segment-integrations/analytics-kotlin-mixpanel){:target="_blank"}. ## Getting Started @@ -112,7 +112,7 @@ Group calls are sent to Mixpanel if, **and only if**, 1. The Group Identifier Traits setting has one or more traits saved in the destination settings for Mixpanel. ![Group ID Traits](/docs/connections/destinations/catalog/mixpanel/images/mixpanel-group-id-traits.png) -2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="\_blank"}. +2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="_blank"}. 3. A Group trait with the same name as one of the configured Group Identifier Traits is sent with the group call. ```swift @@ -123,7 +123,7 @@ analytics.group("user-123", buildJsonObject { }); ``` -Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="\_blank"}. +Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="_blank"}. If the group call **does not** have a group trait that matches the Group Identifier Traits setting, then the event will be ignored. @@ -183,7 +183,7 @@ For each event name listed, Segment calls Mixpanel `increment`, and set a user t For example, if you add **Logged In** to the list of increment events, Segment increments a user trait called **Logged In** and set a trait called **Last Logged In** with the current date and time. -If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "_Viewed_ Signup _Page_" and `.screen('Listing')` would translate to "_Viewed_ Listing _Screen_". +If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "*Viewed* Signup *Page*" and `.screen('Listing')` would translate to "*Viewed* Listing *Screen*". Remember, Segment sends one event per `page` call. diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md index aa4a62d7f4..c258937895 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md @@ -83,7 +83,7 @@ When you successfully package a plugin in device-mode, you will no longer see th ## What is the instanceId set in context? -The instanceId was introduced in [V 1.10.1](https://github.com/segmentio/analytics-kotlin/releases/tag/1.10.1){:target="\_blank"} and correlates events to a particular instance of the client in a scenario when you might have multiple instances on a single app. +The instanceId was introduced in [V 1.10.1](https://github.com/segmentio/analytics-kotlin/releases/tag/1.10.1){:target="_blank"} and correlates events to a particular instance of the client in a scenario when you might have multiple instances on a single app. ## How should I configure my proxy URL? diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md index 08179eaab8..23831906ab 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md @@ -3,7 +3,7 @@ title: Analytics React Native Mixpanel Plugin strat: react-native --- -[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. +[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an event-tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. Segment's Mixpanel destination plugin code is open source and available on GitHub. You can view it [here.](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-mixpanel) @@ -69,7 +69,7 @@ identify("user-123", { The first thing you'll want to do is to identify your users so Mixpanel knows who they are. You'll use the Identify method to accomplish this which takes the unique `userId` of a user and any `traits` you know about them. > info "" -> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are \_not_ using this setting, use the instructions below. +> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are _not_ using this setting, use the instructions below. When you call the Identify method, several things occur: Segment recognizes and translates the [special traits](/docs/connections/spec/identify/#traits) so that they fit the expectations of Mixpanel's API. The table below shows the mappings. Pass the key on the left and Segment transforms it to the key on the right before sending to Mixpanel. @@ -116,7 +116,7 @@ Group calls are sent to Mixpanel if, **and only if**, 1. The Group Identifier Traits setting has one or more traits saved in the destination settings for Mixpanel. ![Group ID Traits](/docs/connections/destinations/catalog/mixpanel/images/mixpanel-group-id-traits.png) -2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="\_blank"}. +2. You have created a group key of the same name in your Mixpanel [project settings](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation){:target="_blank"}. 3. A Group trait with the same name as one of the configured Group Identifier Traits is sent with the group call. ```js @@ -127,7 +127,7 @@ group("some-company", { }); ``` -Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="\_blank"}. +Mixpanel supports multiple definitions of groups. For more information see [Mixpanel's Group Analytics documentation](https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics){:target="_blank"}. If the group call **does not** have a group trait that matches the Group Identifier Traits setting, then the event will be ignored. @@ -189,7 +189,7 @@ For each event name listed, Segment calls Mixpanel `increment`, and set a user t For example, if you add **Logged In** to the list of increment events, Segment increments a user trait called **Logged In** and set a trait called **Last Logged In** with the current date and time. -If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "_Viewed_ Signup _Page_" and `.screen('Listing')` would translate to "_Viewed_ Listing _Screen_". +If you'd like to add an increment for viewing a specific page or screen, ensure you have the setting "Track Named Pages" selected and use the dynamically generated event name under "Events to Increment in People." For example, `.page('Signup')` would translate to "*Viewed* Signup *Page*" and `.screen('Listing')` would translate to "*Viewed* Listing *Screen*". Remember, Segment sends one event per `page` call. @@ -236,4 +236,4 @@ If you're testing in Xcode remember you must first background the app, then the If an `ip` property is passed to Mixpanel, the value will be interpreted as the IP address of the request and therefore automatically parsed into Mixpanel geolocation properties (City, Country, Region). After that IP address has been parsed, they will throw out the IP address and only hold onto those resulting geolocation properties. As such, if you want to display an IP address as a property within the Mixpanel UI or within raw data, you will simply want to slightly modify the naming convention for that property. -Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more in Mixpanel's [Import Events](https://mixpanel.com/help/reference/http#tracking-events){:target="\_blank"} documentation. +Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more in Mixpanel's [Import Events](https://mixpanel.com/help/reference/http#tracking-events){:target="_blank"} documentation. From 88af3ba97c61fef2d6023b65bbbdb6967944080f Mon Sep 17 00:00:00 2001 From: Elijah Hunt Date: Wed, 8 Oct 2025 14:43:19 +0200 Subject: [PATCH 3/5] Minor dead link adjustments --- .../sources/catalog/libraries/mobile/apple/swift-typewriter.md | 2 +- .../kotlin-android/destination-plugins/braze-kotlin-android.md | 2 +- .../destination-plugins/mixpanel-kotlin-android.md | 2 +- .../mobile/kotlin-android/kotlin-android-typewriter.md | 2 +- .../catalog/libraries/mobile/kotlin-android/migration.md | 2 +- .../react-native/destination-plugins/mixpanel-react-native.md | 2 +- .../libraries/mobile/react-native/react-native-typewriter.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md b/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md index 770b865ef0..5639931af0 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md @@ -223,7 +223,7 @@ To learn more about the `typewriter.yml` configuration format, see the [Configur As mentioned in the [Best Practices](#best-practices) section above, Segment recommends that you only check in the `plan.json`, and not the generated clients, into your version control. Instead, Segment recommends building these clients as part of the build step for your application. -In your CI environment, this usually involves a step to build the Typewriter client. Make sure to build the production client before deploying the application, as explained in the [Tracking Plan Violation Handling](#tracking-plan-violation-handling) section below. +In your CI environment, this usually involves a step to build the Typewriter client. Make sure to build the production client before deploying the application, as explained in [Tracking Plan Violation Handling](/docs/protocols/apis-and-extensions/typewriter/#tracking-plan-violation-handling). ```yaml # An example (simplified) CircleCI configuration: diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md index ba971afc04..8e5b3d0591 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md @@ -63,7 +63,7 @@ Just under your Analytics-Kotlin library setup, call `analytics.add(plugin = ... Your events will now begin to flow to Braze in device mode. -# Identify +## Identify > info "Tip" > Add Segment's open-source [Middleware](https://github.com/segmentio/segment-braze-mobile-middleware) tool to optimize your integration. This tool limits [Data Point](https://www.braze.com/docs/user_guide/data_and_analytics/data_points/) use by debouncing duplicate identify() calls from Segment. For more information, see the project's [README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work). diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md index 6552205f7e..c64f1a2fb6 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md @@ -167,7 +167,7 @@ There are two strings to avoid when naming event properties that will be sent to ### Explicitly Set People Properties and Super Properties -Previously, Segment set all traits and properties as both Super Properties and People Properties (If you had Mixpanel People enabled). Now Mixpanel allows you to segment your reports by both People Properties and Super Properties. To give you better precision and control over what property or trait gets set as a Super Property or People Property, you can disable **Set All Traits as Super Properties or People Properties By Default** and pass in the properties or traits that you want to send to Mixpanel as People or Super Properties as shown below. Segment passes through all of Mixpanel's special traits as People Properties so you only need to add the ones that aren't on [this list](#group-using-device-mode). +Previously, Segment set all traits and properties as both Super Properties and People Properties (If you had Mixpanel People enabled). Now Mixpanel allows you to segment your reports by both People Properties and Super Properties. To give you better precision and control over what property or trait gets set as a Super Property or People Property, you can disable **Set All Traits as Super Properties or People Properties By Default** and pass in the properties or traits that you want to send to Mixpanel as People or Super Properties as shown below. Segment passes through all of Mixpanel's special traits as People Properties so you only need to add the ones that aren't on [this list](#group). ![mixpanel people properties list](/docs/connections/destinations/catalog/mixpanel/images/mixpanelpeoplesuperprops.png) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md index 43080864d0..44068d46ea 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md @@ -245,7 +245,7 @@ To learn more about the `typewriter.yml` configuration format, see the [Configur As mentioned in the [Best Practices](#best-practices) section above, Segment recommends that you only check in the `plan.json`, and not the generated clients, into your version control. Instead, Segment recommends building these clients as part of the build step for your application. -In your CI environment, this usually involves a step to build the Typewriter client. Make sure to build the production client before deploying the application, as explained in the [Tracking Plan Violation Handling](#tracking-plan-violation-handling) section below. +In your CI environment, this usually involves a step to build the Typewriter client. Make sure to build the production client before deploying the application, as explained in [Tracking Plan Violation Handling](/docs/protocols/apis-and-extensions/typewriter/#tracking-plan-violation-handling). ```yaml # An example (simplified) CircleCI configuration: diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md index 44b2e28938..59d1123c76 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md @@ -15,7 +15,7 @@ If you're using a previous Segment mobile library such as Analytics-Android, fol 1. [Import Analytics-Kotlin](#1-import-analytics-kotlin) 2. [Upgrade your Destinations](#2-upgrade-your-destinations) 3. [Advanced: Upgrade your Middleware](#3-upgrade-middleware-to-plugins) -4. [Upgrade Notes](#4-upgrade-notes-changes-to-the-configuration-object) +4. [Upgrade Notes](#4-upgrade-notes) ## 1. Import Analytics-Kotlin diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md index 23831906ab..a6e65b14ba 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md @@ -173,7 +173,7 @@ There are two strings to avoid when naming event properties that will be sent to ### Explicitly Set People Properties and Super Properties -Previously, Segment set all traits and properties as both Super Properties and People Properties (If you had Mixpanel People enabled). Now Mixpanel allows you to segment your reports by both People Properties and Super Properties. To give you better precision and control over what property or trait gets set as a Super Property or People Property, you can disable **Set All Traits as Super Properties or People Properties By Default** and pass in the properties or traits that you want to send to Mixpanel as People or Super Properties as shown below. Segment passes through all of Mixpanel's special traits as People Properties so you only need to add the ones that aren't on [this list](#group-using-device-mode). +Previously, Segment set all traits and properties as both Super Properties and People Properties (If you had Mixpanel People enabled). Now Mixpanel allows you to segment your reports by both People Properties and Super Properties. To give you better precision and control over what property or trait gets set as a Super Property or People Property, you can disable **Set All Traits as Super Properties or People Properties By Default** and pass in the properties or traits that you want to send to Mixpanel as People or Super Properties as shown below. Segment passes through all of Mixpanel's special traits as People Properties so you only need to add the ones that aren't on [this list](#group). ![mixpanel people properties list](/docs/connections/destinations/catalog/mixpanel/images/mixpanelpeoplesuperprops.png) diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/react-native-typewriter.md b/src/connections/sources/catalog/libraries/mobile/react-native/react-native-typewriter.md index a874791760..61fb85c78a 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/react-native-typewriter.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/react-native-typewriter.md @@ -262,7 +262,7 @@ To learn more about the `typewriter.yml` configuration format, see the [Configur As mentioned in the [Best Practices](#best-practices) section above, Segment recommends that you only check in the `plan.json`, and not the generated clients, into your version control. Instead, Segment recommends building these clients as part of the build step for your application. -In your CI environment, this usually involves a step to build the Typewriter client. Make sure to build the production client before deploying the application, as explained in the [Tracking Plan Violation Handling](#tracking-plan-violation-handling) section below. +In your CI environment, this usually involves a step to build the Typewriter client. Make sure to build the production client before deploying the application, as explained in[Tracking Plan Violation Handling](/docs/protocols/apis-and-extensions/typewriter/#tracking-plan-violation-handling). ```yaml # An example (simplified) CircleCI configuration: From f5d70b0573ca74baa0343c72f424218a60829a60 Mon Sep 17 00:00:00 2001 From: Elijah Hunt Date: Wed, 8 Oct 2025 18:46:46 +0200 Subject: [PATCH 4/5] More missed links --- .../kotlin-android/destination-plugins/adobe-kotlin-android.md | 2 +- .../destination-plugins/mixpanel-kotlin-android.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md index dc134cf17c..840f86c99e 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md @@ -12,7 +12,7 @@ Adobe Analytics uses a slightly different approach to tracking than Segment, and For example, if one of your end users dismissed a welcome dialog in your app, Segment would generate a `Welcome Dialog Dismissed` event with properties that contain the user ID (`user123`) and the dialog name (`welcome-dialog`), while Adobe Analytics would model the same action as a pageView with variables that represent the dialog name, visitorID, and the event name, and an eVar ("dismissed"). -Both Segment and Adobe Analytics have recommended standard data for tracking events. Segment has [the Spec](/docs/connections/spec/), and Adobe uses predefined events. Segment automatically maps incoming event data and some product level properties to Adobe's predefined events, when the event data is in the correct Segment Ecommerce Spec](/docs/connections/spec/ecommerce/v2/) format. Video calls using the format described in this document are also automatically mapped. If you're using the Mobile SDKs, mobile lifecycle events are also automatically mapped. If you need to create Page and Track events that are outside the scope of the Ecommerce Spec, you need to map those in your Segment destinations settings UI. +Both Segment and Adobe Analytics have recommended standard data for tracking events. Segment has [the Spec](/docs/connections/spec/), and Adobe uses predefined events. Segment automatically maps incoming event data and some product level properties to Adobe's predefined events, when the event data is in the correct [Segment Ecommerce Spec](/docs/connections/spec/ecommerce/v2/) format. Video calls using the format described in this document are also automatically mapped. If you're using the Mobile SDKs, mobile lifecycle events are also automatically mapped. If you need to create Page and Track events that are outside the scope of the Ecommerce Spec, you need to map those in your Segment destinations settings UI. Segment strongly recommends that you create a Tracking Plan for both your Segment and Adobe Analytics events before you send any events or properties to Adobe. This helps you map your Segment events to Adobe `events` and Segment properties to Adobe variables. If you decide to set up Adobe Analytics for mobile, you must set up this mapping in both the Segment settings and the Adobe Mobile Services dashboard, so it's good to stay consistent. diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md index c64f1a2fb6..e970d728e3 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md @@ -227,4 +227,4 @@ If you're testing in Xcode remember you must first background the app, then the Push notifications are only available for projects bundling the Segment-Mixpanel SDK. > info "" -> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in [Android] (/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature) +> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in [Android](/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature) From 424f7287f0bf7b012e694e27915d17b09c9bfcc1 Mon Sep 17 00:00:00 2001 From: rchinn1 <93161299+rchinn1@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:55:18 -0700 Subject: [PATCH 5/5] A few content edits --- .../destination-plugins/mixpanel-kotlin-android.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md index e970d728e3..3c42657f2b 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/mixpanel-kotlin-android.md @@ -7,7 +7,7 @@ strat: kotlin-android Segment's Mixpanel destination plugin code is open source and [available on GitHub](https://github.com/segment-integrations/analytics-kotlin-mixpanel){:target="_blank"}. -## Getting Started +## Getting started 1. From the Segment app Destinations page click on **Add Destination**. 2. Search for Mixpanel in the Destinations Catalog and confirm the Source to connect to. @@ -63,7 +63,7 @@ analytics.identify("user-123", buildJsonObject { The first thing you'll want to do is to identify your users so Mixpanel knows who they are. You'll use the Identify method to accomplish this which takes the unique `userId` of a user and any `traits` you know about them. > info "" -> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are \_not_ using this setting, use the instructions below. +> **Important**: Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are \_not_ using this setting, use the instructions below. As soon as you have a `userId` for a visitor that was previously anonymous you'll need to [`alias`](/docs/connections/spec/alias/) their old anonymous `id` to the new `userId`. In Mixpanel only **one** anonymous user history can be merged to **one** identified user. For that reason you should only call `alias` once, right after a user registered, but before the first `identify`. @@ -227,4 +227,4 @@ If you're testing in Xcode remember you must first background the app, then the Push notifications are only available for projects bundling the Segment-Mixpanel SDK. > info "" -> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in [Android](/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature) +> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in [Android](/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature).