---
title: "Adjust"
description: "Daha iyi abonelik takibi ve analizler için Adjust'ı Adapty ile bağlayın."
---

[Adjust](https://www.adjust.com/), pazarlama kampanyalarından veri toplayıp sunan önde gelen Mobil Ölçüm Ortağı (MMP) platformlarından biridir. Bu sayede şirketler kampanya performanslarını takip edebilir.

Adapty, mağazalardan gelen [abonelik olaylarını](events) tek bir yerden takip etmenizi sağlayan eksiksiz bir veri seti sunar. Adapty ile kullanıcılarınızın davranışlarını kolayca inceleyebilir, tercihlerini öğrenebilir ve bu bilgileri onlarla hedefli ve etkili bir şekilde iletişim kurmak için kullanabilirsiniz. Bu entegrasyon sayesinde abonelik olaylarını Adjust'ta takip edebilir ve kampanyalarınızın tam olarak ne kadar gelir ürettiğini analiz edebilirsiniz.

Adapty ile Adjust arasındaki entegrasyon iki ana şekilde çalışır.

1. **Adapty, Adjust'tan attribution verisi alır**  
   Adjust entegrasyonunu kurduğunuzda Adapty, Adjust'tan attribution verisi almaya başlar. Bu verilere kullanıcının profil sayfasından kolayca erişebilir ve görüntüleyebilirsiniz.

  
    <img src="/assets/shared/img/98769d9-CleanShot_2023-08-11_at_14.39.182x.webp"
    style={{
      border: '1px solid #727272', /* border width and color */
      width: '700px', /* image width */
      display: 'block', /* for alignment */
      margin: '0 auto' /* center alignment */
    }}
  />
  

2. **Adapty, abonelik olaylarını Adjust'a gönderir**  
   Adapty, entegrasyonunuzda yapılandırılan tüm abonelik olaylarını Adjust'a gönderebilir. Böylece bu olayları Adjust kontrol panelinde takip edebilirsiniz. Bu entegrasyon, reklam kampanyalarınızın etkinliğini değerlendirmek için oldukça faydalıdır.

## Entegrasyonu kurma \{#set-up-integration\}

### Adapty'yi Adjust'a bağlama \{#connect-adapty-to-adjust\}

1. Adapty Kontrol Paneli'ni açın ve [Integrations > Adjust](https://app.adapty.io/integrations/adjust) sayfasına gidin.

2. Sayfanın üstündeki geçiş düğmesini "açık" konuma getirin.

3. Alanları doldurun ve erişim bilgilerinizi girin.

  
    <img src="/assets/shared/img/5064125-CleanShot_2023-08-11_at_14.43.382x.webp"
    style={{
      border: '1px solid #727272', /* border width and color */
      width: '700px', /* image width */
      display: 'block', /* for alignment */
      margin: '0 auto' /* center alignment */
    }}
  />
  

3. Adjust platformunda OAuth yetkilendirmesini etkinleştirdiyseniz, iOS ve Android uygulamalarınız için entegrasyon sürecinde **OAuth Token** sağlamanız zorunludur.
4. Ardından iOS ve Android uygulamalarınız için **app token** bilgilerini girin. Adjust kontrol panelinizi açın; uygulamalarınızı orada göreceksiniz.

  
    <img src="/assets/shared/img/adjust-apps.webp"
    style={{
      border: '1px solid #727272', /* border width and color */
      width: '700px', /* image width */
      display: 'block', /* for alignment */
      margin: '0 auto' /* center alignment */
    }}
  />
  

  :::note
  iOS ve Android için farklı Adjust uygulamalarınız olabilir; bu nedenle Adapty'de her biri için bağımsız bölümler bulunur. Tek bir Adjust uygulamanız varsa her iki alana da aynı bilgileri girin.
  :::

5. Listeden uygulamanızı seçin ve **App Token**'ı kopyalayın. Token'ı Adapty kontrol panelindeki ilgili alana yapıştırın.

  <img src="/assets/shared/img/adjust-token.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### Olayları ve etiketleri yapılandırma \{#configure-events-and-tags\}

Adjust, diğer platformlardan biraz farklı çalışır. Adjust kontrol panelinde olayları manuel olarak oluşturmanız, olay token'larını almanız ve bunları Adapty'deki ilgili olaylara kopyalamanız gerekir.

Bu nedenle ilk adım, Adapty'nin göndermesini istediğiniz tüm olayların token'larını bulmaktır:

1. Adjust kontrol panelinde uygulamanızı açın ve **Events** sekmesine geçin.

  <img src="/assets/shared/img/adjust-events.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

1. Olay token'ını kopyalayın ve Adapty'ye yapıştırın. Kimlik bilgilerinin altında, Adapty'den Adjust'a gönderebileceğiniz üç olay grubu bulunur. Adapty'nin sunduğu olayların tam listesine [buradan](events) ulaşabilirsiniz.

  <img src="/assets/shared/img/adjust-event-token.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

Adapty, abonelik olaylarını sunucudan sunucuya (server-to-server) entegrasyon yöntemiyle Adjust'a gönderir; böylece tüm abonelik olaylarını Adjust kontrol panelinizde görüntüleyebilir ve bunları edinim kampanyalarınızla ilişkilendirebilirsiniz.

:::important
Şunları göz önünde bulundurun:

- Adjust, 58 günden eski olayları desteklemez. Dolayısıyla 58 günden eski bir olayınız varsa Adapty bunu Adjust'a gönderir; ancak olayın tarihi geçerli zaman damgasıyla değiştirilir.
- Adjust, IPv6'yı desteklemez. **App settings** bölümünde veya SDK etkinleştirilirken SDK'da IP toplamayı devre dışı bırakırsanız yalnızca bir arka uç IPv6 adresi gönderilebilir ve bu durum takibin başarısız olmasına yol açabilir — IPv4 kullanımını garantilemek için SDK'da IP toplamayı etkin tutun.

:::

### Uygulamanızı Adjust'a bağlama \{#connect-your-app-to-adjust\}

Yukarıdaki adımları tamamladıktan sonra uygulamanıza şu iki metodu ekleyin. Bu metotlar, uygulamanız ile Adjust arasındaki iletişimi kurar:

1. **Adjust'a abonelik verisi göndermek için**: Adjust cihaz kimliğini `setIntegrationIdentifier()` SDK metoduna aktarın
2. **Adjust'tan attribution verisi almak için**: `updateAttribution()` SDK metoduyla attribution verilerini güncelleyin

Adjust 5.0 veya sonraki sürümler için aşağıdaki örneği kullanın:

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="iOS (Swift)" default>

```swift showLineNumbers
class AdjustModuleImplementation {

func updateAdjustAdid() {
    Adjust.adid { adid in
        guard let adid else { return }
        Adapty.setIntegrationIdentifier(key: "adjust_device_id", value: adid)
    }
}
func updateAdjustAttribution() {
    Adjust.attribution { attribution in
        guard let attribution = attribution?.dictionary() else { 
            return
        }
        
        Adapty.updateAttribution(attribution, source: "adjust")
    }
}
```

</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

```kotlin showLineNumbers
Adjust.getAdid { adid ->
    if (adid == null) return@getAdid

    Adapty.setIntegrationIdentifier("adjust_device_id", adid) { error ->
        if (error != null) {
            // handle the error
        }
    }
}

Adjust.getAttribution { attribution ->
    if (attribution == null) return@getAttribution

    Adapty.updateAttribution(attribution, "adjust") { error ->
        // handle the error
    }
}
```

</TabItem>
<TabItem value="java" label="Android (Java)" default>

```java showLineNumbers
Adjust.getAdid(adid -> {
    if (adid == null) return;

    Adapty.setIntegrationIdentifier("adjust_device_id", adid, error -> {
        if (error != null) {
            // handle the error
        }
    });
});

Adjust.getAttribution(attribution -> {
    if (attribution == null) return;

    Adapty.updateAttribution(attribution, "adjust", error -> {
        // handle the error
    });
});
```

</TabItem>
<TabItem value="rn" label="React Native (TS)" default>

```typescript showLineNumbers

var adjustConfig = new AdjustConfig(appToken, environment);

// Before submiting Adjust config...
adjustConfig.setAttributionCallbackListener(attribution => {
  // Make sure Adapty SDK is activated at this point
  // You may want to lock this thread awaiting of `activate`
  adapty.updateAttribution(attribution, "adjust");
});

// ...
Adjust.create(adjustConfig);

Adjust.getAdid((adid) => {
  if (adid)
    adapty.setIntegrationIdentifier("adjust_device_id", adid);
});
```

</TabItem>

<TabItem value="flutter" label="Flutter" default>

```javascript showLineNumbers

try {
  final adid = await Adjust.getAdid();

  if (adid == null) {
    // handle the error
  }
  
  await Adapty().setIntegrationIdentifier(
    key: "adjust_device_id", 
    value: adid,
  );
    
  final attributionData = await Adjust.getAttribution();

  var attribution = Map<String, String>();

  if (attributionData.trackerToken != null) attribution['trackerToken'] = attributionData.trackerToken!;
  if (attributionData.trackerName != null) attribution['trackerName'] = attributionData.trackerName!;
  if (attributionData.network != null) attribution['network'] = attributionData.network!;
  if (attributionData.adgroup != null) attribution['adgroup'] = attributionData.adgroup!;
  if (attributionData.creative != null) attribution['creative'] = attributionData.creative!;
  if (attributionData.clickLabel != null) attribution['clickLabel'] = attributionData.clickLabel!;
  if (attributionData.costType != null) attribution['costType'] = attributionData.costType!;
  if (attributionData.costAmount != null) attribution['costAmount'] = attributionData.costAmount!.toString();
  if (attributionData.costCurrency != null) attribution['costCurrency'] = attributionData.costCurrency!;
  if (attributionData.fbInstallReferrer != null) attribution['fbInstallReferrer'] = attributionData.fbInstallReferrer!;

  await Adapty().updateAttribution(attribution, source: "adjust");
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle the error
}
```

</TabItem>

<TabItem value="unity" label="Unity" default>

```csharp showLineNumbers
// 1. To update ADID
Adjust.GetAdid((adid) => {
    if (adid == null) {
        // handle the error
        return;
    }

    Adapty.SetIntegrationIdentifier("adjust_device_id", adid, (error) => {
        if (error != null) {
            // handle the error
            return;
        }

    });
});

// 2. To update Attribution

// in your adjust configuration scope:
adjustConfig.AttributionChangedDelegate = AttributionChangedCallback;

public void AttributionChangedCallback(AdjustAttribution attributionData) {
    var attribution = new Dictionary<string, string>();

    if (attributionData.TrackerToken != null) attribution["trackerToken"] = attributionData.TrackerToken;
    if (attributionData.TrackerName != null) attribution["trackerName"] = attributionData.TrackerName;
    if (attributionData.Network != null) attribution["network"] = attributionData.Network;
    if (attributionData.Adgroup != null) attribution["adgroup"] = attributionData.Adgroup;
    if (attributionData.Creative != null) attribution["creative"] = attributionData.Creative;
    if (attributionData.ClickLabel != null) attribution["clickLabel"] = attributionData.ClickLabel;
    if (attributionData.CostType != null) attribution["costType"] = attributionData.CostType;
    if (attributionData.CostAmount != null) attribution["costAmount"] = attributionData.CostAmount.ToString();
    if (attributionData.CostCurrency != null) attribution["costCurrency"] = attributionData.CostCurrency;
    if (attributionData.FbInstallReferrer != null) attribution["fbInstallReferrer"] = attributionData.FbInstallReferrer;

    // you will probably need to install Newtonsoft.Json package, if not yet
    var attributionJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(attribution);

    Adapty.UpdateAttribution(attributionJsonString, "adjust", (error) => {
        if (error != null) {
            // handle the error
        }
    });
}
```

</TabItem>

</Tabs>

## Olay yapısı \{#event-structure\}

Adapty, seçilen olayları [**Adjust Entegrasyon sayfasındaki**](https://app.adapty.io/integrations/adjust) **Events names** bölümünde yapılandırıldığı şekilde Adjust'a gönderir. Her olay şu yapıdadır:

```json
{
   "event_token": "EVENT_TOKEN_FROM_CONFIG",
   "app_token": "APP_TOKEN_FROM_CONFIG",
   "s2s": 1,
   "environment": "production",
   "created_at_unix": 1709294400,
   "currency": "USD",
   "revenue": 9.99,
   "customer_user_id": "user_12345",
   "external_device_id": "user_12345",
   "ip_address": "192.168.100.1",
   "user_agent": "Mozilla/5.0 (Linux; Android 14; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36",
   "android_id": "875646c2-4a56-4211-8931-168532479006",
   "gps_adid": "875646c2-4a56-4211-8931-168532479006",
   "callback_params": "{\"integration_event_id\":\"550e8400-e29b-41d4-a716-446655440000\",\"customer_user_id\":\"user_12345\",\"vendor_product_id\":\"com.example.app.yearly.premium\",\"transaction_id\":\"GPA.3312-4512-1100-55923\",\"original_transaction_id\":\"GPA.3312-4512-1100-55923\",\"store\":\"play_store\",\"store_country\":\"US\",\"price_usd\":9.99,\"proceeds_usd\":8.49,\"price_local\":9.99,\"proceeds_local\":8.49,\"net_revenue_usd\":8.49,\"net_revenue_local\":8.49,\"tax_amount_usd\":0.0,\"tax_amount_local\":0.0,\"consecutive_payments\":3,\"rate_after_first_year\":false}",
   "partner_params": "{\"integration_event_id\":\"550e8400-e29b-41d4-a716-446655440000\",\"customer_user_id\":\"user_12345\",\"vendor_product_id\":\"com.example.app.yearly.premium\",\"transaction_id\":\"GPA.3312-4512-1100-55923\",\"original_transaction_id\":\"GPA.3312-4512-1100-55923\",\"store\":\"play_store\",\"store_country\":\"US\",\"price_usd\":9.99,\"proceeds_usd\":8.49,\"price_local\":9.99,\"proceeds_local\":8.49,\"net_revenue_usd\":8.49,\"net_revenue_local\":8.49,\"tax_amount_usd\":0.0,\"tax_amount_local\":0.0,\"consecutive_payments\":3,\"rate_after_first_year\":false}"
}
```

Parametreler:

| Parametre            | Tür     | Açıklama                                                                                                                                                                                          |
|:---------------------|:--------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `app_token`          | String  | Entegrasyon ayarlarınızdaki Adjust App Token.                                                                                                                                                     |
| `event_token`        | String  | Belirli bir Adapty olayıyla eşleştirilmiş Adjust Event Token.                                                                                                                                    |
| `s2s`                | Integer | Sunucudan sunucuya (server-to-server) olay bayrağı.                                                                                                                                               |
| `environment`        | String  | `sandbox` veya `production`.                                                                                                                                                                      |
| `created_at_unix`    | Integer | Saniye cinsinden olay zaman damgası.                                                                                                                                                              |
| `currency`           | String  | İşlem için para birimi kodu (ör. "USD"). Yalnızca gelir 0,001'i aştığında eklenir; Adjust, gelir ve para biriminin birlikte gönderilmesini gerektirir.                                            |
| `revenue`            | Float   | İşlem gelir tutarı. Yalnızca değer 0,001'i aştığında eklenir. Adjust negatif gelir değerlerini desteklemediğinden iade olayları gelir özellikleri olmadan gönderilir.                            |
| `customer_user_id`   | String  | Kullanıcının Customer User ID'si.                                                                                                                                                                 |
| `external_device_id` | String  | `customer_user_id` ile aynıdır.                                                                                                                                                                   |
| `ip_address`         | String  | Kullanıcının IP adresi (yalnızca IPv4).                                                                                                                                                           |
| `user_agent`         | String  | Cihaz User Agent dizesi.                                                                                                                                                                          |
| `adid`               | String  | Adjust Cihaz Kimliği (biliniyorsa).                                                                                                                                                               |
| `android_id`         | String  | **Yalnızca Android**. Google Advertising ID.                                                                                                                                                      |
| `gps_adid`           | String  | **Yalnızca Android**. Google Advertising ID.                                                                                                                                                      |
| `idfa`               | String  | **Yalnızca iOS**. Reklamverenler için Kimlik (ID for Advertisers).                                                                                                                                |
| `idfv`               | String  | **Yalnızca iOS**. Satıcılar için Kimlik (ID for Vendors).                                                                                                                                         |
| `callback_params`    | String  | Mevcut tüm [olay alanlarını](webhook-event-types-and-fields#for-most-event-types) içeren JSON dizesi. Yalnızca null olmayan alanlar dahil edilir.                                                 |
| `partner_params`     | String  | `callback_params` ile aynıdır.                                                                                                                                                                    |

## Sorun giderme \{#troubleshooting\}

### Gelir tutarsızlığı \{#revenue-discrepancy\}

Adapty ile Adjust arasında gelir tutarsızlığı varsa, bunun nedeni muhtemelen tüm kullanıcılarınızın Adapty SDK'sını içeren uygulama sürümünü kullanmamasıdır. Veri tutarlılığını sağlamak için kullanıcılarınızı Adapty SDK'sının bulunduğu uygulama sürümüne güncellemeye zorlayabilirsiniz.