# Uygulama Kanalları

React Native uygulaması için kanal kurulumu
Kaynak: https://selwise.com/docs/channels/app-channels

Uygulama kanalı, iOS veya Android uygulamanızı temsil eder. Arama, öneriler, kampanyalar ve olay izleme web kanalıyla aynı hesapta, aynı raporlarda çalışır; fark kurulumun ve kimlik doğrulamanın nasıl yapıldığındadır. Geliştirici tarafı için: [Mobil SDK](/docs/mobile/overview).

## Panelde nerede

Sol menüde **Kanallar** (Channels) grubunda **Channels** satırını açın, **Add Channel**'a basın ve **What are you adding?** sorusunda **Mobile App**'ı seçin. Kanalın günlük ekranı **Channel Overview** satırıdır.

## Kanalı ekleme

| Alan | Ne yazılır |
|---|---|
| **Application Identifier** | iOS'ta bundle identifier, Android'de paket adı, ters DNS biçiminde: `com.magaza.app`. Bir bağlantı değildir; kanalı adlandırmak ve ayırt etmek için kullanılır. Küçük harfe çevrilir, başındaki `https://` ve sondaki yol atılır. `www.` ile başlayan değer reddedilir; bir alan adına benzeyen değer için panel uyarır |
| **Name** | İsteğe bağlı; kanal değiştiricide görünür |
| **Platforms** | **iOS** ve **Android** işaretleri; yalnızca görüntü içindir, davranışı değiştirmez |
| **Currency** | 3 harfli ISO 4217 kodu (`TRY`, `EUR`). Boş bırakılırsa `EUR` kaydedilir |

Kanal türü eklenirken seçilir ve sonradan değiştirilemez. Uygulama kanalı **doğrulanmış** olarak oluşur: doğrulanacak alan adı yoktur, dolayısıyla **Verify Now** adımı ve **Pending Verification** durumu bu kanalda hiç görünmez.

## Doğrulama yerine API anahtarı

Web kanalında her public istek, tarayıcının `Origin` başlığı doğrulanmış alan adıyla karşılaştırılarak yetkilendirilir. Uygulama kanalında karşılaştırılacak alan adı yoktur ve native istek `Origin` göndermez; bu yüzden uygulama kanalı **her zaman** `x-selwise-api-key` başlığıyla kimlik doğrular. Başlık gönderilse bile `Origin` uygulama kanalında kanıt sayılmaz; WebView içindeki istek de aynı yoldan geçer.

### API anahtarı oluşturma

**Channels** satırında kanalın **⋮** menüsünden **API keys**'i ya da **Channel Overview** ekranındaki **Channel Key** kartından **Manage**'i açın. **Create a key** altında bir ad yazın, **Purpose** olarak seçin ve **Create key**'e basın:

| Amaç | Scope | Kullanım |
|---|---|---|
| **Mobile app** (Mobil uygulama) | `mobile_read` ve `mobile_write` | Mobil SDK |
| **Server-side rendering** (Sunucu taraflı render) | `ssr_read` | Kendi sunucunuzdan zenginleştirme çizimi; uygulama için değil |
| **Consent sync** (İzin senkronizasyonu) | `newsletter_subscribe` | Kendi arka ucunuzdan pazarlama izni yazmak; yalnızca yazar |

- Uygulama için **Mobile app** seçin ve anahtarın **iki scope'u da** taşıdığından emin olun: öneri ürünleri, sipariş, kimliklendirme, bülten ve segment sorgusu birer `POST` isteğidir ve `mobile_write` ister. Yalnızca okuma yetkisi olan anahtar bu isteklerde `403` alır; ekranda hiçbir açıklama görünmez.
- Anahtar `swpk_live_` ile başlar ve **Copy this key now** penceresinde yalnızca bir kez gösterilir; Selwise yalnızca özetini saklar. Kaybederseniz **Rotate** ile yenileyin: eski anahtar anında iptal olur ve onu kullanan uygulama sürümleri `403` almaya başlar. **Revoke** anahtarı kalıcı olarak kapatır. Listede her anahtarın son kullanım zamanı (**Last used**, hiç kullanılmadıysa **Never used**) görünür.
- Anahtar uygulama paketinin içinde taşınır ve çıkarılabilir; scope'ları yalnızca public okuma ile olay ve sipariş yazmayı kapsar, panel erişimi vermez. Sızarsa yenileyin.
- Anahtarları yönetmek kanal güncelleme yetkisi ister; salt okunur kullanıcı listeyi görür ama oluşturamaz.

## Kurulum kodu

**Channel Overview** ekranındaki **Setup** kartı iki adım gösterir: **Create an API key** ve **Install @selwise/react-native**. İkinci adım, kanal anahtarınız yazılmış hazır başlatma kodunu verir; `apiKey` yer tutucudur çünkü anahtar yalnızca oluşturulduğu anda görünür. Olay gelmeye başlayınca adım kendiliğinden tamamlanır; **Channel activity** altındaki **Data flow** kartı olay sayısını ve son olay zamanını söyler.

```js
import AsyncStorage from '@react-native-async-storage/async-storage';
import { Selwise } from '@selwise/react-native';

export const selwise = new Selwise();

export async function initSelwise() {
  await selwise.init({
    channelKey: 'sk_...',
    apiKey: 'swpk_live_...',
    storage: AsyncStorage,
  });
}
```

`storage` zorunlu değildir ama olmadan ziyaretçi kimliği, oturum ve çevrimdışı kuyruk yalnızca o uygulama açılışı boyunca yaşar. Seçenekler adlarını korur: kanal anahtarı `siteKey` ya da `channelKey` olarak verilir (aynı değer), çünkü bu isim yayınlanmış bir npm paketinin public API'sindedir. Tam kurulum: [Kurulum](/docs/mobile/setup).

## Uygulama widget çizmez

SDK'nın arayüzü yoktur. Hangi kampanya ve widget'ın hangi ekranda görünmesi gerektiğine karar verir ve kararı uygulamanıza verir; çizimi uygulamanızın kendi bileşenleri yapar. Akinon App Maker eklentisi bu çizimi sizin yerinize yapar ([Eklenti](/docs/mobile/app-maker)). Panelde bu yüzden:

- Sayfa hedeflemeyi URL yerine **sentetik ekran adlarına** (`app://product`) göre yazarsınız: [Event Takibi](/docs/mobile/tracking#ekran-adları).
- Uygulama sepeti bildirmedikçe hedef çubuğu ve sepet değeri çizilmez: **Cart value** kartı ölçülüp ölçülmediğini söyler ([Hedef Çubuğu](/docs/widgets/goal-bar)).
- **Custom CSS** ve **Custom JS** alanları yalnızca `custom` türünde, uygulamada WebView içinde çalışır.

## Bu kanalda görünmeyen ekranlar

Uygulama kanalı seçiliyken sol menüde **Custom Scripts** ve **Data Layer** görünmez; sayfa deneyleri (DOM'u değiştiren) ve sekme mesajı yoktur; zenginleştirmede seçici yerine **Uygulama yuvası** sorulur ve sunucu taraflı render alanları gösterilmez. Bir bağlantıyı elle açarsanız panel "This is only available on website channels" (Bu yalnızca web sitesi kanallarında kullanılabilir) der. Tam tablo: [Kanal Türleri](/docs/channels/channel-types).

## Sırada ne var

- [Kanal Anahtarı](/docs/channels/channel-key)
- [Kanal Türleri](/docs/channels/channel-types)
- [Paylaşılan Katalog](/docs/channels/shared-catalog): uygulama kanalı kataloğu web kanalından ödünç alabilir
- [Mobil SDK Kurulumu](/docs/mobile/setup)
