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.
| Platform | Min version |
|---|---|
| iOS | iOS 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
| Parametre | Tip | Açıklama |
|---|---|---|
| setTitleText | String | Info ekranında görüntülenecek başlık bilgisini belirtir. |
| setDescriptionText | String | Info ekranında görüntülenecek açıklama metnini belirtir. |
| setButtonText | String | Info ekranında gösterilecek adımı başlatacak butonun metnini belirtir. |
| setAssetImageName | String | Info ekranında gösterilecek görseli belirtir. |
| setLottieFileName | String | Info 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 Int | Info ekranında gösterilecek madde öğelerinin simgesini değiştirmek için kullanılabilir. |
| setCancelButtonIsActive | Bool | Info 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:
| Parametre | Tip | Açıklama |
|---|---|---|
| isGlareDetectionEnable | Bool | İlgili adımda glare algılamayı etkinleştirir. Front ve Back için varsayılan true, Passport için false. |
| glareDetectedText | String | Belge üzerinde ışık yansıması algılandığında gösterilecek metin. |
| tooBrightText | String | Ortam çok aydınlık olduğunda gösterilecek uyarı metni. |
| tooDarkText | String | Ortam çok karanlık olduğunda gösterilecek uyarı metni. |
| multipleDocumentsDetectedText | String | Kamerada birden fazla belge algılandığında gösterilecek uyarı metni. |
Liveness adımında ise yalnızca ortam ışığına bağlı parametreler bulunur:
| Parametre | Tip | Açıklama |
|---|---|---|
| isGlareDetectionEnable | Bool | Liveness adımında ortam ışığı izlemeyi etkinleştirir. Varsayılan true. |
| tooBrightText | String | Ortam çok aydınlık olduğunda gösterilecek uyarı metni. |
| tooDarkText | String | Ortam çok karanlık olduğunda gösterilecek uyarı metni. |
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
| Parametre | Tip | Açıklama |
|---|---|---|
| setInfoView | Info | İlgili adıma Bilgi ekranı eklemek için kullanılır. İsteğe bağlıdır. |
| setTitle | String | İlgili adımda görüntülenecek Toolbar metnini temsil eder. |
| setStepType | StepType | Adımın tipini belirtir (.idcardFront, .idcardBack, vb.) |
| setStepInformationTextToSpeech | String | Adım başlangıcında seslendirilecek metni temsil eder. |
| setIdentifyTimeout | TimeInterval | İlgili adım için timeout süresini belirler. Default değer 30 olarak belirlenmiştir. |
setIsGlareDetectionEnable | Bool? | Işık yansıması algılamayı etkinleştirir. |
setGlareDetectedText | String? | Işık yansıması algılandığında gösterilecek uyarı. |
setTooBrightText | String? | Ortam çok aydınlık olduğunda gösterilecek uyarı. |
setTooDarkText | String? | Ortam çok karanlık olduğunda gösterilecek uyarı. |
setMultipleDocumentsDetectedText | String? | Birden fazla belge algılandığında gösterilecek uyarı. |
Liveness Step Özellikleri
| Parametre | Tip | Açıklama |
|---|---|---|
| setDirectionTextToSpeech | String, String, String, String, String | center, 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
setGlareDetectedTextvesetMultipleDocumentsDetectedTextdesteklenmez; yalnızcatooBrightTextvetooDarkTextgeç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
| Parametre | Tip | Açıklama |
|---|---|---|
| dotRadius | CGFloat? | Canlılık kontrolü sırasında ekranda görüntülenen noktaların yarıçapını belirtir. |
| dotColor | UIColor? | Canlılık göstergeleri için kullanılan noktaların varsayılan rengini tanımlar. |
| activeDotColor | UIColor? | Canlılık kontrolü sırasında aktif olan noktanın rengini ayarlar. |
| titleText | String? | Canlılık kontrolü sırasında görüntülenen ana başlık metni. |
| upText | String? | Kullanıcının başını yukarı hareket ettirmesi gerektiğinde görüntülenen talimat metni. |
| downText | String? | Kullanıcının başını aşağı hareket ettirmesi gerektiğinde görüntülenen talimat metni. |
| leftText | String? | Kullanıcının başını sola çevirmesi gerektiğinde görüntülenen talimat metni. |
| rightText | String? | Kullanıcının başını sağa çevirmesi gerektiğinde görüntülenen talimat metni. |
| centerYourFaceText | String? | Kullanıcının yüzünü çerçeveye ortalamsını isteyen talimat metni. |
| faceNotDetectedText | String? | Canlılık kontrolü sırasında kullanıcının yüzü algılanmadığında görüntülenen mesaj. |
| overlayText | String? | 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
| Parametre | Tip | Açıklama |
|---|---|---|
| colors | ColorsConfig? | Info ekranları ve bottom sheet'lerde kullanılacak renk ayarlarını yapılandırmak için kullanılır. |
| typography | TypographyConfig? | SDK genelinde kullanılacak font ailesi, font boyutları ve font kalınlıklarını yapılandırmak için kullanılır. |
| shapes | ShapesConfig? | Info ekranları ve bottom sheet'lerde kullanılacak şekil ayarlarını yapılandırmak için kullanılır. |
| bulletIconName | String? | Info ekranları ve bottom sheet'lerde madde işaretleri için kullanılan simgenin adını belirtir. |
| textConfig | TextConfig? | Fotoğraf onay ekranındaki buton metinlerini özelleştirmek için kullanılır. |
ColorsConfig Özellikleri
| Parametre | Tip | Açıklama |
|---|---|---|
| buttonColor | UIColor? | Info ekranları ve bottom sheet'lerde görüntülenen butonların arka plan rengini belirtir. |
| buttonTextColor | UIColor? | Info ekranları ve bottom sheet'lerde görüntülenen butonların metin rengini ayarlar. |
| bulletTextColor | UIColor? | Info ekranları ve bottom sheet'lerdeki madde işaretli metinlerin rengini tanımlar. |
| titleColor | UIColor? | Info ekranlarındaki başlık metninin rengini tanımlar. |
| descriptionColor | UIColor? | Info ekranlarındaki açıklama metninin rengini tanımlar. |
ShapesConfig Özellikleri
| Parametre | Tip | Açıklama |
|---|---|---|
| buttonCornerRadius | Int? | Stil amacıyla butonların köşe yarıçapını belirler. |
TextConfig Özellikleri
| Parametre | Tip | Açıklama |
|---|---|---|
| approveButtonText | String? | Fotoğraf çekildikten sonra gösterilen onay butonunun metni. |
| retakeButtonText | String? | Fotoğraf çekildikten sonra gösterilen yeniden çekme butonunun metni. |
TypographyConfig Özellikleri
| Parametre | Tip | Açıklama |
|---|---|---|
| fontFamily | String? | SDK genelinde kullanılacak font family adını belirtir. Örnek: "Inter", "Inter-Regular", "Roboto". |
| titleFontSize | CGFloat | Başlık metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 28. |
| bodyFontSize | CGFloat | Gövde metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 16. |
| buttonFontSize | CGFloat | Buton metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 16. |
| labelFontSize | CGFloat | Küçük yardımcı label metinlerinde ve ışık denetimi uyarılarında kullanılacak font boyutunu belirtir. Varsayılan değer: 14. |
| timerFontSize | CGFloat | Sayaç metinlerinde kullanılacak font boyutunu belirtir. Varsayılan değer: 32. |
| titleFontWeight | Int | Başlık metinlerinde kullanılacak font kalınlığını belirtir. Desteklenen değerler: 100, 400, 500, 700, 900. Varsayılan değer: 700. |
| bodyFontWeight | Int | Gö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
| Parametre | Tip | Açıklama |
|---|---|---|
| showCompletedScreen | Bool | İş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. |
| videoCallSplashScreenAssetName | String | Video görüşme ekranı açıldığında görüntülenen tam ekran görüntüyü özelleştirmek için kullanılır. |
| closeIconAssetName | String | Info ekranlarında kapatma butonu için kullanılan görüntüyü özelleştirmek için kullanılır. |
| livenessConfig | LivenessConfig | Canlılık adımındaki talimatları özelleştirmek için kullanılır. |
| uiConfig | UIConfig? | Info ekranı ve bottomsheet'teki talimatları özelleştirmek için kullanılır. |
| ttsConfig | TTSConfig | Text-to-speech özelliğinin özelleştirilmesi için kullanılır. |
| videoCallExternalLogoImage | UIImage | Video 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:
| Case | Açıklama |
|---|---|
.successful | Tü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:
fromparametresine birUINavigationControllerveyanavigationController'ı olan birUIViewControllerverilmelidir.
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)
| Case | Açıklama |
|---|---|
cameraPermissionDenied | Kamera izni reddedildi. |
cameraPermissionPermenantlyDenied | Kamera izni kalıcı olarak reddedildi. |
deviceNotHaveCameraFeature | Cihazda kamera bulunamadı. |
deviceInitFailed | Kamera başlatılamadı. |
flashMode | Flash açma/kapama hatası. |
capturePhotoFailed | Fotoğraf çekilirken hata oluştu. |
videoRecordingFaild | Video kaydedilirken hata oluştu. |
vidoConfigurationFaild | Kamera ön izlemesi oluşturulamadı. |
videoDeleteFaild | Geçici video silinemedi. |
unknown | Bilinmeyen kamera hatası. |
NFC Hataları (TeydexError.NFCError)
| Case | Açıklama |
|---|---|
deviceNotHaveNfc | Cihazda NFC modülü yok. |
nfcDisabled | NFC kapalı. |
nfcReadFailed | Kimlik bilgisi okunamadı. |
nfcTagLost | Okuma sırasında kimlik bağlantısı kesildi. |
nfcTagNotSupported | Kimlik kartı desteklenmiyor. |
nfcTagNotSupportIsoDep | NFC çipi desteklenmiyor. |
cantConnectNfcTag | NFC etiketine bağlanılamadı. |
wrongMrzString | MRZ bilgisi doğrulanamadı. |
externalAuthFailed | Harici kimlik doğrulama başarısız. |
passiveAuthFailed | Pasif kimlik doğrulama başarısız. |
moreThanOneTagFound | Birden fazla NFC çipi bulundu. |
idCardCanNotIdentify | Kimlik kartı tanımlanamadı. |
nfcTagNotValid | NFC etiketi geçerli değil. |
imageDataNotFound | Resim verisi alınamadı. |
userCanceled | Kullanıcı okuma işlemini iptal etti. |
unknown | Bilinmeyen NFC hatası. |
Video Görüşme Hataları (TeydexError.VideoCallError)
| Case | Açıklama |
|---|---|
closed | Kullanıcı görüşmeyi kapattı. |
fail | Video görüşme başarısız sonuçlandı. |
Timeout Hataları (TeydexError.TimeOutError)
| Case | Açıklama |
|---|---|
timeOut | İşlem zaman aşımına uğradı. |
Sunucu Hataları (TeydexError.ServerError)
| Case | Açıklama |
|---|---|
unknown | Sunucu ile iletişimde bilinmeyen hata. |
unexpected | Beklenmeyen sunucu hatası. |
Red Hataları (TeydexError.RejectedError)
| Case | Açıklama |
|---|---|
rejected | İşlem reddedildi. |
maxRetryCountExceeded | Maksimum deneme sayısı aşıldı. |
Kimlik Okuma Hataları (TeydexError.IdentityReadFailedError)
| Case | Açıklama |
|---|---|
identityReadFailed | Kimlik okunamadı. |