# Cross-platform application

Cross-platform is a new type of devtodev project for applications designed to run on different operating systems using a shared codebase. The project combines user data from multiple platforms.

{% hint style="info" %}
**Please note that you cannot switch previously created devtodev projects to a cross-platform type!**
{% endhint %}

{% hint style="warning" %}
**Prerequisite**

Cross-platform projects use identification by User ID. You need to use your own custom identifiers and set them using the [setUserID](https://docs.devtodev.com/integration/integration-of-sdk-v2/setting-up-events/user-profile#user-id) method during SDK initialization.&#x20;

**Required SDK version**: 2.6.0 (Unity 3.10.0) and higher.
{% endhint %}

## Limitations

For now, cross-platform projects **do not support**:

* Push Notifications, A/B tests or Remote Configuration;
* Store integrations for market data (Google Play, Apple App Store etc.);
* Cohort export;&#x20;
* Subscription tracking and Subscriptions report.&#x20;

## Adding a cross-platform application&#x20;

1. Select **Cross-platform application** as your app type and click `Next`.&#x20;

<figure><img src="/files/jbbaucdVTC1Q45bbHvZE" alt=""><figcaption></figcaption></figure>

2. Give your project a name and select an app type. \
   If you choose the “app” type, gaming events will not be tracked and displayed in the interface, even if they are integrated. Game-related reports will be hidden in the interface. \
   \
   Optionally, you can enable a [Test mode](/integration/test-devices.md) to exclude data received during integration. \
   \
   Click `Next` to proceed.

<figure><img src="/files/FMiVReMKWFcS9SL0DMzJ" alt=""><figcaption></figcaption></figure>

3. Click `Finish` to add the project ot devtodev. Next, you will need to add at least one platform. You will be redirected to Settings to complete the process.&#x20;

<figure><img src="/files/SlM85TdH76RtbCiYiUg9" alt=""><figcaption></figcaption></figure>

### Adding a platform

1. Click `Add Platfrom` to select a platform for your app.&#x20;

<figure><img src="/files/2neAEF5wYKLjFr9tryeT" alt=""><figcaption></figcaption></figure>

2. Select a platform type from the drop-down list and add a name. This name will appear in the report filters and in project settings.&#x20;

{% hint style="info" %}
Note: You will not be able to change the platform after creation, however, you will be able to delete it.&#x20;
{% endhint %}

Click `Save` to finish.&#x20;

<figure><img src="/files/ku6YsSf5WTNCD4NOK9Ok" alt=""><figcaption></figcaption></figure>

### Edit platform&#x20;

Click on the `pencil icon` to make changes. &#x20;

<figure><img src="/files/eRsQVd4o9gV7x2ibGz7T" alt=""><figcaption></figcaption></figure>

You can change the name of the platform.&#x20;

It is possible to delete a platform when there is more than one platform in the list. Click `Delete` and confirm the action.&#x20;

{% hint style="warning" %}
When you delete a platform, devtodev stops receiving events from this platform and hides historical data from the reports. \
If you would like to save the historical data, do not delete the platform; remove the `Platform ID` from your integration code. &#x20;
{% endhint %}

<figure><img src="/files/206oT7t8uexpU0rMohay" alt=""><figcaption></figcaption></figure>

## Integration

The integration process is similar to a standalone type of application. The only difference is an additional Platform ID.&#x20;

* [**SDK**](/integration/integration-of-sdk-v2/sdk-integration.md): simply copy the `App ID + Platform ID` in the initialization code of the corresponding platform app.
* [**Data API**](/integration/server-api/data-api-2.0.md): you will need to send the `Platfrom Id` separately with every package as a `platform` field.&#x20;

<figure><img src="/files/ctMB8d26FUhGflNt2MZm" alt=""><figcaption></figcaption></figure>

## Revenue rate settings

You can set up revenue rate and transaction check rules for different platforms in Settings -> Payments integration -> [Payments settings](/reports-and-functionality/project-related-reports-and-fuctionality/settings.md#payments-settings).

## Cross-platform features

### Platform filter&#x20;

In most of the reports you will see a **Platforms** filter at the top of the list. By default, the reports will show data from all platforms. You can select a specific platform to inspect it in more detail.

<figure><img src="/files/SZ3rkqITWpll7riyHobZ" alt=""><figcaption></figcaption></figure>

Some reports, like Transactions, will allow you to select several platforms at once.&#x20;

<figure><img src="/files/f6lHT13lu15lf0z5yI1G" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If the report does not have a platform filter, it will use the data from all platforms at once.&#x20;
{% endhint %}

### User card&#x20;

Here you can check all events the user performed on different platforms.&#x20;

The user has the same devtodev ID on all platforms.&#x20;

In the Basic properties tab you will see a dedicated list of properties for each platform and general information about the user in the General section. For example, *Install date* and device information are platform-specific, so they will be different for each platform section.&#x20;

The General section stores the *Install date* of the first-ever platform and updates the *Last seen* field according to the latest data from any platform.&#x20;

<figure><img src="/files/g8dgAQPed0qZqQZxyLdc" alt=""><figcaption></figcaption></figure>

Cheater/Tester marks are connected to the User card and are **not** platform-specific. If you mark a user for a cheat transaction on one platform, the user becomes a cheater on **all platforms** and their transactions become invalid.&#x20;

### SQL&#x20;

Each table has a `platform` parameter, the value corresponds to `Platform ID` in project Settings.&#x20;

The cross-platform projects store users from all platforms in corresponding tables and also in one common `users` table. You can find a platform-specific users table by Platform ID in the name postfix.&#x20;

<figure><img src="/files/sPHjTHJCcu0vBJhE0s4M" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.devtodev.com/getting-started/adding-an-app-to-the-space/cross-platform-application.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
