SDK Kurulumu

Paket kurulumu ve başlatma

SDK'yı kurmak, API anahtarını oluşturmak ve başlatmak. Bu sayfayı bitirdiğinizde uygulamanız panelde Data flow kartında olay göndermeye başlamış olmalıdır.

Gereksinimler

Paket@selwise/react-native (güncel sürüm 0.12.0)
React Native / ExpoSürüm kısıtı koyulmamıştır; paket saf JavaScript'tir ve Hermes'te çalışır. Native modül olmadığı için Expo'da özel dev client gerekmez.
Reactreact 17 veya üstü, isteğe bağlı eş bağımlılık; yalnızca @selwise/react-native/react altındaki hook'lar için
Kalıcı depoUygulamanızın kendi @react-native-async-storage/async-storage paketi (önerilir, zorunlu değil)
WebViewreact-native-webview; yalnızca WebView köprüsü ve özel widget için, uygulamanızın kendi bağımlılığı olarak
KanalPanelde oluşturulmuş bir Mobil Uygulama kanalı
npm install @selwise/react-native
npm install @react-native-async-storage/async-storage

Yarn kullanıyorsanız yarn add aynı paketleri ekler. Paket hem ESM hem CommonJS yayımlanır ve sideEffects: false işaretlidir. iOS ve Android'e özel bir kurulum adımı yoktur.

Panelde hazırlık

  1. Sol menüde Kanallar (Channels) grubundaki Channels satırında Add Channel'a basın, What are you adding? sorusunda Mobile App'ı seçin ve Application Identifier alanına bundle id'nizi (iOS) ya da paket adınızı (Android) ters DNS biçiminde yazın. Ayrıntı: Uygulama Kanalları.
  2. Kanal ekranında Channel Overview satırını açın. Channel Key kartı kanal anahtarınızı (sk_ ile başlar) verir.
  3. Aynı ekranda Setup kartı iki adım gösterir: Create an API key ve Install @selwise/react-native. İkinci adımın kod bloğu kanal anahtarınız yazılmış hâlde gelir.

API anahtarını oluşturma

Channels listesinde kanalın satırındaki ⋮ menüsünden API keys'i açın (Channel Overview'daki Channel Key kartından Manage de aynı pencereyi açar). Create a key altında bir ad verin, Purpose olarak Mobile app seçin ve Create key'e basın.

  • Mobile app amacı anahtara mobile_read ve mobile_write scope'larını birlikte verir. Başka amaçlar (Server-side rendering, Consent sync) uygulama için uygun değildir.
  • Anahtar swpk_live_ ile başlar ve 64 onaltılık karakter taşır. Copy this key now penceresinde yalnızca bir kez görünür; Selwise yalnızca özetini saklar. Kaybederseniz Rotate ile yenileyin: eski anahtar anında iptal olur.
  • 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 Rotate ya da Revoke.

Anahtar iki scope da taşımalı

Sunucu gerekli scope'u HTTP metodundan türetir: GET için mobile_read, diğer her şey için mobile_write. Öneri ürünleri uç noktası ziyaretçi bağlamını gövdede taşıyan bir POST olduğundan yalnızca mobile_read taşıyan bir anahtar öneri ürünlerinde, segment üyeliği sorgusunda, sipariş gönderiminde, kimliklendirmede ve bülten kaydında 403 alır. Olay gönderimi anahtarsız çalıştığı, konfigürasyon ve arama da GET olduğu için hata geç fark edilir; en sinsi sonucu segment hedefli kampanyaların sessizce gizlenmesidir.

Başlatma

Paket bir sınıf verir, hazır nesne vermez. Uygulama başına tek örnek oluşturun ve açılışta bir kez başlatın:

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

export const selwise = new Selwise();

export async function initSelwise(): Promise<void> {
  await selwise.init({
    channelKey: 'sk_...',            // Channel Overview > Channel Key
    apiKey: 'swpk_live_...',         // mobile_read + mobile_write
    storage: AsyncStorage,
    debug: __DEV__,
  });
}

init() kimliği çözer ve önceki açılıştan kalan kuyruğu yeniden göndermeyi başlatır. Ağ cevabını beklemez; ilk ekranı bloklamaz. Panelin Takip Ayarları ve kanal yapılandırması arkadan yüklenir.

  • init() ikinci kez çağrılırsa yok sayılır. channelKey (ya da siteKey) veya apiKey eksikse Error fırlatır.
  • init() bitmeden olay üreten track() çağrıları sessizce atılır (kuyruğa alınmaz); trackScreenView, identify, getSurfaces, trackOrder gibi diğer metotlar [Selwise] call init() before using the SDK hatası fırlatır. setCart, getCart ve onCartChange istisnadır ve init()'ten önce de çalışır. Tam liste: API Referansı.
  • Uygulama arka plana gittiğinde kuyruğu gönderin:
import { AppState } from 'react-native';

AppState.addEventListener('change', (state) => {
  if (state !== 'active') void selwise.flush();
});

Seçenekler

SeçenekTürVarsayılanNot
channelKeystringyokPanelde Channel Key. siteKey ile aynı değerdir; ikisinden biri zorunlu, ikisi de verilirse channelKey kazanır.
siteKeystringyokYayımlanmış adı; sonsuza dek desteklenir.
apiKeystringyokZorunlu. x-selwise-api-key başlığında gider.
apiUrlstringhttps://api.selwise.com/api/v1Sürüm önekini (/api/v1) içerir; sondaki / atılır.
storageSelwiseStoragebellekgetItem, setItem, removeItem sözü veren herhangi bir nesne.
consentConsentSnapshotgranted: true, yalnızca necessaryBkz. Kimlik, Onay ve Kuyruk.
siteUserIdstringyokAçılışta biliniyorsa giriş yapmış kullanıcı kimliği.
batchSizenumber20İstek başına olay; 1 ile 200 arasına sıkıştırılır.
flushIntervalMsnumber50000 zamanlayıcıyı kapatır; elle flush() çağırın.
timeoutMsnumber10000İstek başına zaman aşımı.
maxQueueSizenumber500Çevrimdışıyken tutulan olay sayısı; dolunca en eski silinir.
debugbooleanfalseTanılama çıktısı console.log'a gider.
testModebooleanfalseYalnızca test modundaki kampanya ve widget'ları gösterir; bkz. Kampanya ve Widget.
clientPlatformstringreact-nativex-selwise-client-platform başlığı.
clientVersionstringSDK sürümüx-selwise-client-version başlığı.

Tablodaki varsayılanlar yalnızca ilk saniyeler içindir

batchSize, flushIntervalMs, maxQueueSize ve debug için açıkça verdiğiniz değer her zaman önceliklidir. Vermediğiniz her biri kanalın /config cevabından alınır ve cevap gelince tablodaki varsayılanın yerine geçer. Kanalda hiç ayar yapılmamışsa sunucu varsayılanları gelir: batchSize 50, gönderim aralığı 30 sn, maxQueueSize 100, yeniden deneme 3, çevrimdışı kalıcılık açık. Yani hiçbir şey vermeyen bir uygulama pratikte 50 olaylık partiler ve 30 saniyelik aralıkla çalışır. Paneldeki bu ayarlar (Data Layer ekranı) uygulama kanalında sol menüde görünmediği için uygulama kanalı için değerleri init() seçenekleriyle sabitleyin. Yeniden deneme sayısı ve çevrimdışı kalıcılık için init() seçeneği yoktur; yalnızca sunucu değerini alırlar. Uzaktan gelen hata ayıklama yalnızca açabilir, log isteyen uygulamayı susturmaz.

Hook'lar için sağlayıcı

import { SelwiseProvider } from '@selwise/react-native/react';

export function Root({ children }: { children: React.ReactNode }) {
  return <SelwiseProvider client={selwise}>{children}</SelwiseProvider>;
}

SelwiseProvider içinde useSelwise() başlatılmış istemciyi verir; dışında çağrılırsa hata fırlatır.

Yerel sunucuya bağlanma

apiUrl sürüm önekini içerir: http://localhost:3001/api/v1. Öneki atlarsanız her çağrı 404 döner ve boş katalog gibi görünür. Android emülatöründe makinenizin localhost'una 10.0.2.2 ile ulaşılır; düz http için iOS'ta App Transport Security ve Android'de cleartext izni, uygulamanızın kendi ayarlarıdır.

Doğrulama

  1. Uygulamayı açın, birkaç ekran gezin ve debug: true ile Metro konsolunda Initialised ile Sent N event(s) satırlarını görün.
  2. Panelde Kanallar → Kanal Özeti (Channels → Channel Overview) ekranında Channel activity altındaki Data flow kartında olay sayısının arttığını görün. Son olay eskiyse kart kurulumun durmuş olabileceğini söyler.
  3. Bir test siparişi gönderin (trackOrder) ve aynı ekranda Orders kartından kontrol edin.

Olay gelmiyorsa Sorun Giderme'ye bakın.

Sırada ne var

Son güncelleme: 22 Ekim 2026