Ana içeriğe geç
Version: 1.4.6

Teydex iOS Document

Bu doküman, Teydex kütüphanesinin iOS platformda güvenli ve sorunsuz bir şekilde entegre edilmesi için gerekli tüm adımları, kullanım örneklerini ve platforma özgü teknik detayları içerir.

Sürüm Gereksinimleri

Teydex iOS kütüphanesini sorunsuz bir şekilde kullanabilmek için sürümlerinizi kontrol etmeniz gerekir.

PlatformMin version
iOSiOS 15.0
Swift 5.5
Xcode 26.1

Swift Package Manager ile Kurulum

KYCFramework paketini projenize eklemek için Xcode'da File > Add Package Dependencies yolunu izleyin ve aşağıdaki paket URL'sini girin. Kütüphane gerekli tüm bağımlılıkları otomatik olarak indirecektir.

https://github.com/innovance-technologies/KYCFramework.git

Proje Yapılandırması

Background Modes Ayarları

Signing & Capabilities sekmesinde, Background Modes altında aşağıdaki seçeneklerin işaretli olduğundan emin olun:

  • Audio, AirPlay, and Picture in Picture
  • Voice over IP
  • Background fetch

Info.plist İzinleri

Uygulamanızın Info.plist dosyasına aşağıdaki açıklamaları eklemeniz gerekmektedir. Bu mesajlar, izin istenirken kullanıcılara gösterilecektir:

<key>NSCameraUsageDescription</key>
<string>Video görüşmeleri sırasında diğerlerinin sizi görebilmesi için erişim verin</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Konumunuzun doğrulanabilmesi için erişim verin</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Konumunuzun doğrulanabilmesi için erişim verin</string>
<key>NSMicrophoneUsageDescription</key>
<string>Video görüşmeleri sırasında diğerlerinin sizi duyabilmesi için erişim verin</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Fotoğraflarınızı fotoğraf galerinize kaydedebilmek için erişim verin</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Fotoğraf galerinize göz atabilmek için erişim verin</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>FullAccuracy</key>
<string>Konumunuzun doğrulanabilmesi için erişim verin</string>
</dict>
<key>NSSpeechRecognitionUsageDescription</key>
<string>Konuşmaları tanıyabilmek için erişim verin</string>

Info Ekranı

KYC uygulamanızdaki Info ekranı, adımlardan önce görüntülenen bilgi sayfalarını ifade eder. İsteğe bağlı olarak, her adım için aşağıdaki parametreler eklenebilir.

Info Ekranı Özellikleri

ParametreTipAçıklama
setTitleTextStringInfo ekranında görüntülenecek başlık bilgisini belirtir.
setDescriptionTextStringInfo ekranında görüntülenecek açıklama metnini belirtir.
setButtonTextStringInfo ekranında gösterilecek adımı başlatacak butonun metnini belirtir.
setAssetImageNameStringInfo ekranında gösterilecek görseli belirtir.
setLottieFileNameStringInfo ekranında gösterilecek lottie animasyonunu belirtir.
setBullets[String]Info ekranında sonraki adım hakkında madde madde bilgi vermek istediğinizde kullanılabilir.
bulletIconName@RawRes IntInfo ekranında gösterilecek madde öğelerinin simgesini değiştirmek için kullanılabilir.
setCancelButtonIsActiveBoolInfo ekranının sağ üst köşesindeki iptal butonunun gösterilmesini etkinleştirir veya devre dışı bırakır. Varsayılan olarak devre dışıdır.

Info Ekranı Kullanımı

let frontInfo = InfoPresentationModelBuilder()
.setTitleText("Kimlik Ön Yüz")
.setDescriptionText("Lütfen aşağıdaki adımları dikkatlice takip ediniz:")
.setButtonText("Devam")
.setLottieFileName("front")
.setBullets([
"Kimliğinizi Yerleştirin\n" +
"Kimliğinizin arka yüzünü, telefon ekranına paralel bir şekilde tutun. Kimlik, ekranda görünen şablonun içine tam olarak yerleşecek şekilde konumlandırılmalıdır.",
"Kimlik Bilgilerinin Görünürlüğü\n Kimlik üzerindeki tüm bilgilerin net bir şekilde göründüğünden emin olun. Kimlik bilgileri bulanık olmamalı ve kolayca okunabilir olmalıdır"
])
.build()

Glare Detection (Işık Yansıması Algılama)

v1.3.1 ile birlikte Front, Back, Liveness ve Passport adımlarında, kullanıcının belgeyi uygun ışık koşullarında göstermesi için ışık yansıması (glare) algılama özelliği eklenmiştir. Ortam çok aydınlıksa, çok karanlıksa veya belge üzerinde yansıma varsa ilgili ekranda kullanıcıya uyarı metni gösterilir.

Aşağıdaki parametreler Front, Back ve Passport adımlarında ortak olarak kullanılabilir:

ParametreTipAçıklama
isGlareDetectionEnableBoolİlgili adımda glare algılamayı etkinleştirir. Front ve Back için varsayılan true, Passport için false.
glareDetectedTextStringBelge üzerinde ışık yansıması algılandığında gösterilecek metin.
tooBrightTextStringOrtam çok aydınlık olduğunda gösterilecek uyarı metni.
tooDarkTextStringOrtam çok karanlık olduğunda gösterilecek uyarı metni.
multipleDocumentsDetectedTextStringKamerada birden fazla belge algılandığında gösterilecek uyarı metni.

Liveness adımında ise yalnızca ortam ışığına bağlı parametreler bulunur:

ParametreTipAçıklama
isGlareDetectionEnableBoolLiveness adımında ortam ışığı izlemeyi etkinleştirir. Varsayılan true.
tooBrightTextStringOrtam çok aydınlık olduğunda gösterilecek uyarı metni.
tooDarkTextStringOrtam çok karanlık olduğunda gösterilecek uyarı metni.
not

Bu parametrelerden herhangi biri verilmediğinde, SDK varsayılan Türkçe uyarı metinlerini kullanır.

Adımlar (Steps)

Tüm adımlarda kullanılacak özellikler bu alanda belirtilir. Bu özellikler her adımda mevcuttur(Front,Back,Hologram,NFC,Liveness,VideoCall).

Step Özellikleri

ParametreTipAçıklama
setInfoViewInfoİlgili adıma Bilgi ekranı eklemek için kullanılır. İsteğe bağlıdır.
setTitleStringİlgili adımda görüntülenecek Toolbar metnini temsil eder.
setStepTypeStepTypeAdımın tipini belirtir (.idcardFront, .idcardBack, vb.)
setStepInformationTextToSpeechStringAdım başlangıcında seslendirilecek metni temsil eder.
setIdentifyTimeoutTimeIntervalİlgili adım için timeout süresini belirler. Default değer 30 olarak belirlenmiştir.
setIsGlareDetectionEnableBool?Işık yansıması algılamayı etkinleştirir.
setGlareDetectedTextString?Işık yansıması algılandığında gösterilecek uyarı.
setTooBrightTextString?Ortam çok aydınlık olduğunda gösterilecek uyarı.
setTooDarkTextString?Ortam çok karanlık olduğunda gösterilecek uyarı.
setMultipleDocumentsDetectedTextString?Birden fazla belge algılandığında gösterilecek uyarı.

Liveness Step Özellikleri

ParametreTipAçıklama
setDirectionTextToSpeechString, String, String, String, Stringcenter, right, left, up, down yönleri için text-to-speech mesajını belirler

Kimlik Ön Yüz (Front) Adımı

let idFrontStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Ön Yüz")
.setInfoView(frontInfo)
.setStepType(.idcardFront)
.setStepInformationTextToSpeech("Kimliğinizin ön yüzünü telefon ekranına paralel tutun. Kimlik şablonun içine tam olarak yerleştirilmelidir.")
.setIsGlareDetectionEnable(true)
.setGlareDetectedText("Işık yansıması var. Lütfen belgeyi farklı bir açıyla tutun.")
.setTooBrightText("Ortam çok aydınlık. Lütfen ışığı azaltın.")
.setTooDarkText("Ortam çok karanlık. Lütfen aydınlık bir ortama geçin.")
.setMultipleDocumentsDetectedText("Sadece tek belge gösterin.")
.build()

Kimlik Arka Yüz (Back) Adımı

let idBackStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Arka Yüz")
.setInfoView(backInfo)
.setStepType(.idcardBack)
.setStepInformationTextToSpeech("Kimliğinizin arka yüzünü telefon ekranına paralel tutun. Tüm bilgilerin net görünmesini sağlayın.")
.setIsGlareDetectionEnable(true)
.setGlareDetectedText("Işık yansıması var. Lütfen belgeyi farklı bir açıyla tutun.")
.setTooBrightText("Ortam çok aydınlık. Lütfen ışığı azaltın.")
.setTooDarkText("Ortam çok karanlık. Lütfen aydınlık bir ortama geçin.")
.setMultipleDocumentsDetectedText("Sadece tek belge gösterin.")
.build()

NFC Adımı

let nfcStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("NFC")
.setInfoView(nfcInfo)
.setStepType(.nfc)
.setStepInformationTextToSpeech("Kimliğinizi telefonunuzun arkasına yaklaştırın. NFC özelliğinin açık olduğundan emin olun.")
.build()

Hologram Adımı

let hologramStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Hologram")
.setInfoView(hologramInfo)
.setStepType(.hologram)
.setStepInformationTextToSpeech("Kimliğinizin hologram etiketini tarayın. Hologram parlak bir şekilde görünmelidir.")
.build()

Canlılık Kontrolü (Liveness) Adımı

Liveness adımı için LivenessStepBuilder kullanılır. Bu builder, yön bazlı TTS mesajlarını ayarlamak için setDirectionTextToSpeech metodunu sağlar.

let faceStep = LivenessStepBuilder()
.setDirectionTextToSpeech(
center: "Yüzünüzü çerçevenin ortasına tutarak düz bakın.",
right: "Yüzünüzü sağa çevirin.",
left: "Yüzünüzü sola çevirin.",
up: "Yüzünüzü yukarı çevirin.",
down: "Yüzünüzü aşağı çevirin."
)
.setIdentifyTimeout(35)
.setTitle("Canlılık Kontrolü")
.setInfoView(faceInfo)
.setStepInformationTextToSpeech("Kameraya bakın ve yüzünüzü çerçeveye yerleştirin. Başınızı yönlendirmelere göre hareket ettirin.")
.setIsGlareDetectionEnable(true)
.setTooBrightText("Ortam çok aydınlık. Lütfen ışığı azaltın.")
.setTooDarkText("Ortam çok karanlık. Lütfen aydınlık bir ortama geçin.")
.build()

Not: Liveness adımında setGlareDetectedText ve setMultipleDocumentsDetectedText desteklenmez; yalnızca tooBrightText ve tooDarkText geçerlidir.

VideoCall Adımı

let videoCall = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Video Görüşme")
.setInfoView(videoCallInfo)
.setStepType(.videoCall)
.setStepInformationTextToSpeech("Video görüşme başlatılıyor. Yeterli ışık olduğundan emin olun.")
.build()

LivenessConfig

Canlılık adımındaki UI metinlerini ve görsel stilini özelleştirmek için kullanılır.

LivenessConfig Özellikleri

ParametreTipAçıklama
dotRadiusCGFloat?Canlılık kontrolü sırasında ekranda görüntülenen noktaların yarıçapını belirtir.
dotColorUIColor?Canlılık göstergeleri için kullanılan noktaların varsayılan rengini tanımlar.
activeDotColorUIColor?Canlılık kontrolü sırasında aktif olan noktanın rengini ayarlar.
titleTextString?Canlılık kontrolü sırasında görüntülenen ana başlık metni.
upTextString?Kullanıcının başını yukarı hareket ettirmesi gerektiğinde görüntülenen talimat metni.
downTextString?Kullanıcının başını aşağı hareket ettirmesi gerektiğinde görüntülenen talimat metni.
leftTextString?Kullanıcının başını sola çevirmesi gerektiğinde görüntülenen talimat metni.
rightTextString?Kullanıcının başını sağa çevirmesi gerektiğinde görüntülenen talimat metni.
centerYourFaceTextString?Kullanıcının yüzünü çerçeveye ortalamsını isteyen talimat metni.
faceNotDetectedTextString?Canlılık kontrolü sırasında kullanıcının yüzü algılanmadığında görüntülenen mesaj.
overlayTextString?Yüz algılama çemberi görünmeden önce overlay üzerinde gösterilen metin.

LivenessConfig Kullanımı

let livenessConfig = LivenessConfig(
dotRadius: 10.0,
dotColor: .gray,
activeDotColor: .green,
titleText: "Yüz Doğrulama",
upText: "Lütfen başınızı yukarı kaldırın",
downText: "Lütfen başınızı aşağı indirin",
leftText: "Lütfen başınızı sola çevirin",
rightText: "Lütfen başınızı sağa çevirin",
centerYourFaceText: "Lütfen yüzünüzü ortalayın",
faceNotDetectedText: "Yüz algılanamadı"
)

UIConfig

Info ekranları ve bottom sheet'lerde kullanılan görsel stilleri yapılandırmak için kullanılır.

UIConfig, renk, tipografi, şekil ve madde işareti ikon ayarlarını tek bir yapı altında toplar.

UIConfig Özellikleri

ParametreTipAçıklama
colorsColorsConfig?Info ekranları ve bottom sheet'lerde kullanılacak renk ayarlarını yapılandırmak için kullanılır.
typographyTypographyConfig?SDK genelinde kullanılacak font ailesi, font boyutları ve font kalınlıklarını yapılandırmak için kullanılır.
shapesShapesConfig?Info ekranları ve bottom sheet'lerde kullanılacak şekil ayarlarını yapılandırmak için kullanılır.
bulletIconNameString?Info ekranları ve bottom sheet'lerde madde işaretleri için kullanılan simgenin adını belirtir.
textConfigTextConfig?Fotoğraf onay ekranındaki buton metinlerini özelleştirmek için kullanılır.

ColorsConfig Özellikleri

ParametreTipAçıklama
buttonColorUIColor?Info ekranları ve bottom sheet'lerde görüntülenen butonların arka plan rengini belirtir.
buttonTextColorUIColor?Info ekranları ve bottom sheet'lerde görüntülenen butonların metin rengini ayarlar.
bulletTextColorUIColor?Info ekranları ve bottom sheet'lerdeki madde işaretli metinlerin rengini tanımlar.
titleColorUIColor?Info ekranlarındaki başlık metninin rengini tanımlar.
descriptionColorUIColor?Info ekranlarındaki açıklama metninin rengini tanımlar.

ShapesConfig Özellikleri

ParametreTipAçıklama
buttonCornerRadiusInt?Stil amacıyla butonların köşe yarıçapını belirler.

TextConfig Özellikleri

ParametreTipAçıklama
approveButtonTextString?Fotoğraf çekildikten sonra gösterilen onay butonunun metni.
retakeButtonTextString?Fotoğraf çekildikten sonra gösterilen yeniden çekme butonunun metni.

TypographyConfig Özellikleri

ParametreTipAçıklama
fontFamilyString?SDK genelinde kullanılacak font family adını belirtir. Örnek: "Inter", "Inter-Regular", "Roboto".
titleFontSizeCGFloatBaşlık metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 28.
bodyFontSizeCGFloatGövde metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 16.
buttonFontSizeCGFloatButon metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 16.
labelFontSizeCGFloatKüçük yardımcı label metinlerinde ve ışık denetimi uyarılarında kullanılacak font boyutunu belirtir. Varsayılan değer: 14.
timerFontSizeCGFloatSayaç metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 32.
titleFontWeightIntBaşlık metinlerinde kullanılacak font kalınlığını belirtir. Desteklenen değerler: 100, 400, 500, 700, 900. Varsayılan değer: 700.
bodyFontWeightIntGövde, label ve buton metinlerinde kullanılacak font kalınlığını belirtir. Desteklenen değerler: 100, 400, 500, 700, 900. Varsayılan değer: 400.

UIConfig Kullanım Örneği

let colorsConfig = ColorsConfig(buttonColor: UIColor(named: "purple_700"),
buttonTextColor: .white,
bulletTextColor: UIColor(named: "teal_700")
)

let shapesConfig = ShapesConfig(buttonCornerRadius: 30)

let typographyConfig = TypographyConfig(fontFamily: "Inter",
titleFontSize: 28,
bodyFontSize: 16,
buttonFontSize: 16,
labelFontSize: 14,
timerFontSize: 32,
titleFontWeight: 700,
bodyFontWeight: 400
)

let uiConfig = UIConfig(colors: colorsConfig,
typography: typographyConfig,
shapes: shapesConfig,
bulletIconName: "bullet_icon"
)

KYCManagerConfigBuilder ile Kullanımı

    static let configuration = KYCManagerConfigBuilder()
.setCameraErrorMessage([
.cameraPermissionDenied: "Kamera izni verilmedi. lütfen Kamera izni verin"
])
.setShowCompletedScreen(true)
.setVideoCallSplashScreenAssetName("IdCard")
.setVideoCallExternalLogoImage(UIImage(named: "IdCard"))
.setTTSConfig(defaultTTSConfig)
.setUIConfig(UIConfig(colors: ColorsConfig(buttonColor: .systemPink,
buttonTextColor: .white,
bulletTextColor: .black),
typography: TypographyConfig(fontFamily: "Luculine",
titleFontSize: 28,
bodyFontSize: 27,
buttonFontSize: 16,
labelFontSize: 14,
timerFontSize: 32,
titleFontWeight: 700,
bodyFontWeight: 400),
shapes: ShapesConfig(buttonCornerRadius: 24),
textConfig: TextConfig(approveButtonText: "Onayla",
retakeButtonText: "Yeniden Çek")))
.build()

KYCManagerConfig

KYC akışının genel davranışını, hata mesajlarını ve UI yapılandırmasını belirler.

KYCManagerConfig Parametreleri

ParametreTipAçıklama
showCompletedScreenBoolİşlemin başarıyla tamamlanması durumunda gösterilecek ekranın etkin veya devre dışı olup olmadığı parametresini kontrol eder. Varsayılan olarak false'tur.
cameraErrorMessage[String]Kamera hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
nfcErrorMessage[String]NFC hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
videoCallErrorMessage[String]Video görüşme hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
timeOutErrorMessage[String]Zaman aşımı hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
serverErrorMessage[String]Sunucu hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
rejectedErrorMessage[String]Reddedilme hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
identityReadFailedError[String]Kimlik okuma hataları için kullanılan mesajların özelleştirilmesine olanak tanır.
videoCallSplashScreenAssetNameStringVideo görüşme ekranı açıldığında görüntülenen tam ekran görüntüyü özelleştirmek için kullanılır.
closeIconAssetNameStringInfo ekranlarında kapatma butonu için kullanılan görüntüyü özelleştirmek için kullanılır.
livenessConfigLivenessConfigCanlılık adımındaki talimatları özelleştirmek için kullanılır.
uiConfigUIConfig?Info ekranı ve bottomsheet'teki talimatları özelleştirmek için kullanılır.
ttsConfigTTSConfigText-to-speech özelliğinin özelleştirilmesi için kullanılır.
videoCallExternalLogoImageUIImageVideo görüşme ekranı açıldığında görüntülenen logoyu özelleştirmek için kullanılır.
documentAutoDetectError[TeydexError.DocumentAutoDetectError: String]?Belge otomatik algılama hataları için özel mesaj sözlüğü.

KYCManagerConfig Kullanımı

let configuration = KYCManagerConfigBuilder()
.setCameraErrorMessage([.cameraPermissionDenied: "Kamera izni reddedildi"])
.setNFCErrorMessage([.deviceNotHaveNFC: "Cihazınızda NFC bulunmuyor"])
.setShowCompletedScreen(true)
.setVideoCallSplashScreenAssetName("splash_background")
.setCloseIconAssetName("close_icon")
.setLivenessConfig(livenessConfig)
.setUIConfig(uiConfig)
.setTTSConfig(TTSConfig(isEnabled: true, speechRate: 0.5, language: "tr-TR"))
.setVideoCallExternalLogoImage(UIImage(named: "your_logo") ?? UIImage())
.setUIConfig(UIConfig(colors: ColorsConfig(buttonColor: .systemPink,
buttonTextColor: .white,
bulletTextColor: .black),
typography: TypographyConfig(fontFamily: "Luculine",
titleFontSize: 28,
bodyFontSize: 27,
buttonFontSize: 16,
labelFontSize: 14,
timerFontSize: 32,
titleFontWeight: 700,
bodyFontWeight: 400),
shapes: ShapesConfig(buttonCornerRadius: 24),
textConfig: TextConfig(approveButtonText: "Onayla",
retakeButtonText: "Yeniden Çek")))
.build()

KYCManagerDelegate

KYC sürecindeki olayları ve hataları yönetmek için kullanılan delegate protokolü.

import KYCFramework

class ViewController: UIViewController, KYCManagerDelegate {

func onProcessFinished(_ result: KYCProcessResult) {
// KYC akışı herhangi bir sebeple sona erdiğinde bir kez çağrılır.
switch result {
case .successful:
print("KYC süreci başarıyla tamamlandı")
case .failed(let step, let reason):
print("KYC başarısız — adım: \(String(describing: step)), sebep: \(reason)")
case .cancelled(let step, let reason):
print("KYC iptal edildi — adım: \(String(describing: step)), sebep: \(reason)")
}
}

func onCompletion(_ isSuccess: Bool) {
// Kimlik doğrulama adımının başarılı olup olmadığını bu fonksiyon aracılığıyla dinleyebilirsiniz.
if isSuccess {
print("KYC süreci başarıyla tamamlandı")
} else {
print("KYC süreci başarısız oldu")
}
}

// onEvent ve onError fonksiyonları, kimlik doğrulama sürecinde hangi adımların açıldığını,
// hangi işlemlerin gerçekleştirildiğini ve oluşan hata durumlarını ele almanıza olanak tanır.
// Bu fonksiyonlar, Countly ve Firebase gibi platformlara loglama için gerekli bilgileri sağlar.

func onEvent(_ event: LogState) {
print("KYC Event: \(event)")
}

func onError(_ error: TeydexError) {
print("KYC Error: \(error)")
}

override func viewDidLoad() {
super.viewDidLoad()
TeydexSDK.shared.kycManager.delegate = self
}
}

dismissKYC

KYC akışını SDK dışından programatik olarak kapatmak için kullanılır. Çağrıldığında onProcessFinished delegate metodu .cancelled(reason: .programmatic) ile tetiklenir.

onProcessFinished

KYC akışının sonucunu üç case ile raporlar:

CaseAçıklama
.successfulTüm adımlar başarıyla tamamlandı.
.failed(step:reason:)Belirtilen adımda hata nedeniyle akış sonlandı.
.cancelled(step:reason:)Akış iptal edildi. KYCCancelReason ile sebebi öğrenebilirsiniz.
kycManager.dismissKYC()

KYC Akışını Başlatma

enterKYC Fonksiyonu

TeydexSDK.shared.kycManager.enterKYC(
from: viewController, // UIViewController veya UINavigationController
clientToken: token, // Kimlik doğrulama için benzersiz token
applicationId: applicationId, // Kimlik doğrulama için uygulama ID'si
stepList: stepList, // Adım listesi
configuration: configuration, // KYCManagerConfig (opsiyonel)
initializeUrl: "https://your.api.domain.com/api/v1", // API base URL
useLocation: false // Konum bilgisi kaydedilsin mi? Varsayılan: false
)

Eğer video call akışı kullanılacaksa "videoCallUrl: " parametresi de eklenir.

Önemli: from parametresine bir UINavigationController veya navigationController'ı olan bir UIViewController verilmelidir.

Tam Konfigürasyon Örneği

class KYCConfig {

// Front Info
static let frontInfo = InfoPresentationModelBuilder()
.setButtonText("Devam")
.setDescriptionText("Lütfen aşağıdaki adımları dikkatlice takip ediniz")
.setTitleText("Ön Yüz")
.setBullets(["Kimliğinizin ön yüzünü, telefon ekranına paralel bir şekilde tutun. Kimlik, ekranda görünen şablonun içine tam olarak yerleşecek şekilde konumlandırılmalıdır.",
"Kimlik üzerindeki tüm bilgilerin net bir şekilde göründüğünden emin olun. Kimlik bilgileri bulanık olmamalı ve kolayca okunabilir olmalıdır."])
.setCancelButtonIsActive(true)
.build()

// Back Info
static let backInfo = InfoPresentationModelBuilder()
.setButtonText("Devam")
.setDescriptionText("Lütfen aşağıdaki adımları dikkatlice takip ediniz")
.setTitleText("Arka Yüz")
.setBullets(["Kimliğinizin arka yüzünü, telefon ekranına paralel bir şekilde tutun. Kimlik, ekranda görünen şablonun içine tam olarak yerleşecek şekilde konumlandırılmalıdır.",
"Kimlik üzerindeki tüm bilgilerin net bir şekilde göründüğünden emin olun. Kimlik bilgileri bulanık olmamalı ve kolayca okunabilir olmalıdır."])
.setCancelButtonIsActive(true)
.build()

// NFC Info
static let nfcInfo = InfoPresentationModelBuilder()
.setButtonText("Devam")
.setDescriptionText("Lütfen aşağıdaki adımları dikkatlice takip ediniz")
.setTitleText("NFC")
.setBullets(["Telefonunuzda NFC özelliğinin açık olduğundan emin olun. NFC, telefonunuzun ayarlar kısmından etkinleştirilebilir.",
"Kimliğinizin NFC uyumlu alanını telefonunuzun arkasına temas ettirin. Kimlik ve telefon arasındaki mesafe mümkün olduğunca kısa olmalıdır.",
"Kimlik verilerinin telefonunuza başarılı bir şekilde aktarılmasını bekleyin. Telefonunuz NFC sinyalini aldığında, ekranınızda kimlik doğrulama işlemi başladığına dair bir bildirim görünmelidir."])
.setCancelButtonIsActive(true)
.build()

// Liveness Info
static let faceInfo = InfoPresentationModelBuilder()
.setButtonText("Devam")
.setDescriptionText("Lütfen aşağıdaki adımları dikkatlice takip ediniz")
.setTitleText("Canlılık")
.setBullets(["Cihazınızın kamerasına doğru bakın ve yüzünüzün ekranda net bir şekilde görünmesini sağlayın. Cihazınızın ekranındaki talimatlara uyarak, başınızı belirli bir şekilde hareket ettirmeniz gerekebilir.",
"Ekranda beliren yönergeler doğrultusunda, başınızı sağa, sola, yukarı ve aşağı çevirebilir. Yüzünüzün doğal ve canlı görünmesi gerektiğini unutmayın."])
.setCancelButtonIsActive(true)
.build()

// Hologram Info
static let hologramInfo = InfoPresentationModelBuilder()
.setButtonText("Devam")
.setDescriptionText("Lütfen aşağıdaki adımları dikkatlice takip ediniz")
.setTitleText("Hologram")
.setBullets(["Kimliğinizin ön yüzünü, ekranda verilen süre içinde net bir şekilde yerleştirin. Kimliğinizin üzerinde bulunan hologram etiketinin parlak yansımasını düzgün bir şekilde kaydetmeniz gerekmektedir.",
"Kimlik bilgilerinizi net bir şekilde görebileceğinizden emin olun. Kimlik üzerindeki tüm bilgilerin kayda alınabilmesi için yeterince aydınlık ve belirgin olmasına dikkat edin."])
.setCancelButtonIsActive(true)
.build()

// VideoCall Info
static let videoCallInfo = InfoPresentationModelBuilder()
.setButtonText("Devam")
.setDescriptionText("Yüzünü taramak için hazır olun ve ışığı yüksek bir alana geçin.")
.setTitleText("Görüntülü Görüşme")
.setBullets(["Cihazınızın kamera ve mikrofonunun çalıştığından emin olun.",
"Yüzünüzün net görünmesi için yeterli ışık sağladığınızdan emin olun."])
.setCancelButtonIsActive(true)
.build()


// Steps
static let idFrontStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Kimlik Ön Yüz")
.setInfoView(frontInfo)
.setStepType(.idcardFront)
.setStepInformationTextToSpeech("Kimliğinizin ön yüzünü telefon ekranına paralel tutun. Kimlik şablonun içine tam olarak yerleştirilmelidir.")
.setIsGlareDetectionEnable(true)
.setGlareDetectedText("Işık yansıması var. Lütfen belgeyi farklı bir açıyla tutun.")
.setTooBrightText("Ortam çok aydınlık. Lütfen ışığı azaltın.")
.setTooDarkText("Ortam çok karanlık. Lütfen aydınlık bir ortama geçin.")
.setMultipleDocumentsDetectedText("Sadece tek belge gösterin.")
.build()

static let idBackStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Arka Yüz")
.setInfoView(backInfo)
.setStepType(.idcardBack)
.setStepInformationTextToSpeech("Kimliğinizin arka yüzünü telefon ekranına paralel tutun. Tüm bilgilerin net görünmesini sağlayın.")
.setIsGlareDetectionEnable(true)
.setGlareDetectedText("Işık yansıması var. Lütfen belgeyi farklı bir açıyla tutun.")
.setTooBrightText("Ortam çok aydınlık. Lütfen ışığı azaltın.")
.setTooDarkText("Ortam çok karanlık. Lütfen aydınlık bir ortama geçin.")
.setMultipleDocumentsDetectedText("Sadece tek belge gösterin.")
.build()

static let nfcStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("NFC")
.setInfoView(nfcInfo)
.setStepType(.nfc)
.setStepInformationTextToSpeech("Kimliğinizi telefonunuzun arkasına yaklaştırın. NFC özelliğinin açık olduğundan emin olun.")
.build()

static let faceStep = LivenessStepBuilder()
.setDirectionTextToSpeech(
center: "Yüzünüzü çerçevenin ortasına tutarak düz bakın.",
right: "Yüzünüzü sağa çevirin.",
left: "Yüzünüzü sola çevirin.",
up: "Yüzünüzü yukarı çevirin.",
down: "Yüzünüzü aşağı çevirin."
)
.setIdentifyTimeout(35)
.setTitle("Canlılık Kontrolü")
.setInfoView(faceInfo)
.setStepInformationTextToSpeech("Kameraya bakın ve yüzünüzü çerçeveye yerleştirin. Başınızı yönlendirmelere göre hareket ettirin.")
.setIsGlareDetectionEnable(true)
.setTooBrightText("Ortam çok aydınlık. Lütfen ışığı azaltın.")
.setTooDarkText("Ortam çok karanlık. Lütfen aydınlık bir ortama geçin.")
.build()

static let hologramStep = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Hologram")
.setInfoView(hologramInfo)
.setStepType(.hologram)
.setStepInformationTextToSpeech("Kimliğinizin hologram etiketini tarayın. Hologram parlak bir şekilde görünmelidir.")
.build()

static let videoCall = StepBuilder()
.setIdentifyTimeout(35)
.setTitle("Video Görüşme")
.setInfoView(videoCallInfo)
.setStepType(.videoCall)
.setStepInformationTextToSpeech("Video görüşme başlatılıyor. Yeterli ışık olduğundan emin olun.")
.build()


// Text to Speech Configuration
static let defaultTTSConfig = TTSConfig(
isEnabled: true,
language: "tr-TR",
speechRate: 0.5,
volume: 1.0,
pitchMultiplier: 1.0,
preUtteranceDelay: 0.0,
postUtteranceDelay: 0.0
)

// Configuration
static let configuration = KYCManagerConfigBuilder()
.setCameraErrorMessage([
.cameraPermissionDenied: "Kamera izni verilmedi. lütfen Kamera izni verin"
])
.setShowCompletedScreen(true)
.setVideoCallSplashScreenAssetName("IdCard")
.setVideoCallExternalLogoImage(UIImage(named: "IdCard"))
.setTTSConfig(defaultTTSConfig)
.setUIConfig(UIConfig(colors: ColorsConfig(buttonColor: .systemPink,
buttonTextColor: .white,
bulletTextColor: .black),
typography: TypographyConfig(fontFamily: "Luculine",
titleFontSize: 28,
bodyFontSize: 27,
buttonFontSize: 16,
labelFontSize: 14,
timerFontSize: 32,
titleFontWeight: 700,
bodyFontWeight: 400),
shapes: ShapesConfig(buttonCornerRadius: 24),
textConfig: TextConfig(approveButtonText: "Onayla",
retakeButtonText: "Yeniden Çek")))
.build()

// Helper functions
static func getStepList() -> [Step] {
return [idFrontStep, idBackStep, hologramStep, nfcStep, faceStep, videoCall]
}

static func getManagerConfig() -> KYCManagerConfig {
return configuration
}
}

Hata Yönetimi

SDK'dan gelebilecek hata tipleri aşağıda listelenmiştir. Tüm hatalar KYCManagerDelegate'in onError(_ error: TeydexError) metodu ile iletilir. Hata mesajları KYCManagerConfigBuilder üzerinden özelleştirilebilir.

Kamera Hataları (TeydexError.CameraSourceError)

CaseAçıklama
cameraPermissionDeniedKamera izni reddedildi.
cameraPermissionPermenantlyDeniedKamera izni kalıcı olarak reddedildi.
deviceNotHaveCameraFeatureCihazda kamera bulunamadı.
deviceInitFailedKamera başlatılamadı.
flashModeFlash açma/kapama hatası.
capturePhotoFailedFotoğraf çekilirken hata oluştu.
videoRecordingFaildVideo kaydedilirken hata oluştu.
vidoConfigurationFaildKamera ön izlemesi oluşturulamadı.
videoDeleteFaildGeçici video silinemedi.
unknownBilinmeyen kamera hatası.

NFC Hataları (TeydexError.NFCError)

CaseAçıklama
deviceNotHaveNfcCihazda NFC modülü yok.
nfcDisabledNFC kapalı.
nfcReadFailedKimlik bilgisi okunamadı.
nfcTagLostOkuma sırasında kimlik bağlantısı kesildi.
nfcTagNotSupportedKimlik kartı desteklenmiyor.
nfcTagNotSupportIsoDepNFC çipi desteklenmiyor.
cantConnectNfcTagNFC etiketine bağlanılamadı.
wrongMrzStringMRZ bilgisi doğrulanamadı.
externalAuthFailedHarici kimlik doğrulama başarısız.
passiveAuthFailedPasif kimlik doğrulama başarısız.
moreThanOneTagFoundBirden fazla NFC çipi bulundu.
idCardCanNotIdentifyKimlik kartı tanımlanamadı.
nfcTagNotValidNFC etiketi geçerli değil.
imageDataNotFoundResim verisi alınamadı.
userCanceledKullanıcı okuma işlemini iptal etti.
unknownBilinmeyen NFC hatası.

Video Görüşme Hataları (TeydexError.VideoCallError)

CaseAçıklama
closedKullanıcı görüşmeyi kapattı.
failVideo görüşme başarısız sonuçlandı.

Timeout Hataları (TeydexError.TimeOutError)

CaseAçıklama
timeOutİşlem zaman aşımına uğradı.

Sunucu Hataları (TeydexError.ServerError)

CaseAçıklama
unknownSunucu ile iletişimde bilinmeyen hata.
unexpectedBeklenmeyen sunucu hatası.

Red Hataları (TeydexError.RejectedError)

CaseAçıklama
rejectedİşlem reddedildi.
maxRetryCountExceededMaksimum deneme sayısı aşıldı.

Kimlik Okuma Hataları (TeydexError.IdentityReadFailedError)

CaseAçıklama
identityReadFailedKimlik okunamadı.