---
title: "Access level'ları manuel olarak ver"
description: "Belirli kullanıcılara veya kullanıcı gruplarına ücretli özelliklerin kilidini manuel olarak açın"
---

Belirli kullanıcılara veya kullanıcı gruplarına **premium özellikleri manuel olarak açmak** istiyorsanız, bunu Adapty API aracılığıyla yapabilirsiniz. Bu yöntem; promosyon kampanyaları, yatırımcı erişimi veya özel müşteri destek senaryoları için oldukça kullanışlıdır.

Bu kılavuzda, kullanıcıları nasıl tanımlayacağınızı ve onlara access level'ları programatik olarak nasıl vereceğinizi öğreneceksiniz.

#### Örnek kullanım senaryoları \{#sample-use-cases\}

- **Promo kodları**: Kullanıcılar uygulamanızda geçerli bir promo kodu girdiğinde, onlara otomatik olarak premium özelliklere erişim verin.

- **Yatırımcı/beta tester erişimi**: Özel nitelikleri kontrol ederek yatırımcılara veya beta testçilere premium erişim sağlayın.

## Adım 1. Kullanıcıları tanımlayın \{#step-1-identify-users\}

Adapty, kullanıcıları platformlar ve cihazlar arasında tanımlamak için `customer_user_id` kullanır. Bu, kullanıcıların uygulamayı yeniden yükledikten veya cihaz değiştirdikten sonra da erişimlerini korumasını sağlamak açısından kritik öneme sahiptir.

Bu ID'yi bir kez oluşturmanız yeterlidir. Kullanıcılar uygulamadan ilk kez kayıt olduğunda, SDK aktivasyonu sırasında customer user ID'yi iletebilir ya da SDK kaydolmadan önce aktif edildiyse `identify` metodunu kullanabilirsiniz.

:::important
SDK aktivasyonundan sonra yeni kullanıcıları tanımlarsanız, SDK önce anonim bir profil oluşturur (onsuz çalışamaz). `identify`'ı bir customer user ID ile çağırdığınızda yeni bir profil oluşturulur.

Bu davranış normaldir ve analitik doğruluğunu etkilemez. Daha fazla bilgi için [buraya bakın](ios-quickstart-identify).
:::

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="iOS" default>
```swift showLineNumbers
do {
    try await Adapty.identify("YOUR_USER_ID") // Unique for each user
} catch {
    // handle the error
}
```
</TabItem>
<TabItem value="swift-callback" label="iOS (Swift-Callback)" default>

```swift showLineNumbers
// User IDs must be unique for each user
Adapty.identify("YOUR_USER_ID") { error in
    if let error {
        // handle the error
    }
}
```
</TabItem>
<TabItem value="android" label="Android (Kotlin)" default>
```kotlin showLineNumbers
Adapty.identify("YOUR_USER_ID") { error -> // Unique for each user
    if (error == null) {
        // successful identify
    }
}
```
</TabItem>
<TabItem value="java" label="Android (Java)" default>
```java showLineNumbers
// User IDs must be unique for each user
Adapty.identify("YOUR_USER_ID", error -> {
    if (error == null) {
        // successful identify
    }
});
```
</TabItem>
<TabItem value="react-native" label="React Native" default>
```typescript showLineNumbers
try {
    await adapty.identify("YOUR_USER_ID"); // Unique for each user
    // successfully identified
} catch (error) {
    // handle the error
}
```
</TabItem>

<TabItem value="flutter" label="Flutter" default>
```dart showLineNumbers
try {
  await Adapty().identify(customerUserId); // Unique for each user
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}
```
</TabItem>

<TabItem value="unity" label="Unity" default>
```csharp showLineNumbers
Adapty.Identify("YOUR_USER_ID", (error) => { // Unique for each user
  if(error == null) {
    // successful identify
  }
});
```
</TabItem>

<TabItem value="kmp" label="Kotlin Multiplatform" default>
```kotlin showLineNumbers
Adapty.identify("YOUR_USER_ID") // Unique for each user
    .onSuccess {
        // successful identify
    }
    .onError { error ->
        // handle the error
    }
```
</TabItem>

<TabItem value="capacitor" label="Capacitor" default>
```typescript showLineNumbers
try {
  await adapty.identify({ customerUserId: "YOUR_USER_ID" });
  // successfully identified
} catch (error) {
  // handle the error
}
```
</TabItem>
</Tabs>

## Adım 2. API aracılığıyla access level verin \{#step-2-grant-access-level-via-api\}

Bir kullanıcı `customer_user_id` ile tanımlandıktan sonra, sunucu taraflı API'yi kullanarak onlara access level verebilirsiniz. Bu API çağrısı, kullanıcıya gerçekten ödeme yapmadan ücretli özelliklere erişebilmesi için access level tanımlar.

Metodun tam referansına [buradan](api-adapty/operations/grantAccessLevel) ulaşabilirsiniz.

:::tip
Adapty kontrol panelinde özel bir nitelik (ör. Beta tester veya Investor) ekleyerek kullanıcı erişimini yönetebilirsiniz.
Uygulamanız başlatıldığında, erişimi otomatik olarak vermek için [kullanıcı profilindeki bu niteliği kontrol edin](subscription-status).
Erişimi güncellemek için kontrol panelindeki niteliği değiştirmeniz yeterlidir.
:::

```curl
curl --request POST \
  --url https://api.adapty.io/api/v2/server-side-api/purchase/profile/grant/access-level/ \
  --header 'Accept: application/json' \
  --header 'Authorization: Api-Key YOUR_SECRET_API_KEY' \
  --header 'Content-Type: application/json' \
  --header 'adapty-customer-user-id: CUSTOMER_USER_ID' \
  --data '{
  "access_level_id": "YOUR_ACCESS_LEVEL"
}'
```

## Adım 3. Uygulamada erişimi doğrulayın \{#step-3-verify-access-in-the-app\}

API aracılığıyla erişim verildikten sonra kullanıcının profili otomatik olarak güncellenir. Abonelik durumunu kontrol etmek ve premium özelliklerin kilidini açmak için profilini çekin.

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

```swift showLineNumbers
do {
    let profile = try await Adapty.getProfile()

    if profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false {
        // grant access to premium features
    }
} catch {
// handle the error
}
```

</TabItem>

<TabItem value="swift-callback" label="iOS (Swift-Callback)" default>

```swift showLineNumbers
Adapty.getProfile { result in
    if let profile = try? result.get() {
        // check the access
        if profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false {
            // grant access to premium features
        }
    }
}
```

</TabItem>

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

```kotlin showLineNumbers
Adapty.getProfile { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val profile = result.value
            // check the access
            if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive == true) {
                // grant access to premium features
            }
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
```

</TabItem>

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

```java showLineNumbers
Adapty.getProfile(result -> {
    if (result instanceof AdaptyResult.Success) {
        AdaptyProfile profile = ((AdaptyResult.Success<AdaptyProfile>) result).getValue();
        // check the access
        if (profile.getAccessLevels().get("YOUR_ACCESS_LEVEL_ID") != null && profile.getAccessLevels().get("YOUR_ACCESS_LEVEL_ID").getIsActive()) {
            // grant access to premium features
        }

    } else if (result instanceof AdaptyResult.Error) {
        AdaptyError error = ((AdaptyResult.Error) result).getError();
        // handle the error
    }
});
```

</TabItem>

<TabItem value="react-native" label="React Native" default>

```typescript showLineNumbers
try {
    const profile = await adapty.getProfile();
    // check the access
    if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive) {
        // grant access to premium features
    }
} catch (error) {
  // handle the error
}
```

</TabItem>

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

```dart showLineNumbers
try {
  final profile = await Adapty().getProfile();
  // check the access
  if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false) {
      // grant access to premium features
  }
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}
```

</TabItem>

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

```csharp showLineNumbers
Adapty.GetProfile((profile, error) => {
  if (error != null) {
    // handle the error
    return;
  }

  // check the access
  if (profile.AccessLevels["YOUR_ACCESS_LEVEL_ID"]?.IsActive ?? false) {
      // grant access to premium features
  }
});
```

</TabItem>

<TabItem value="kmp" label="Kotlin Multiplatform" default>

```kotlin showLineNumbers
Adapty.getProfile()
    .onSuccess { profile ->
        // check the access
        if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive == true) {
            // grant access to premium features
        }
    }
    .onError { error ->
        // handle the error
    }
```

</TabItem>

<TabItem value="capacitor" label="Capacitor" default>

```typescript showLineNumbers
try {
  const profile = await adapty.getProfile();
  // check the access
  if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive) {
      // grant access to premium features
  }
} catch (error) {
  // handle the error
}
```

</TabItem>
</Tabs>