iOS - Utility Modülü¶
Utility Modülü, kimlik doğrulama akışlarını destekleyen yardımcı servisleri sunar. Randevu yönetimi, doküman imzalama, adres doğrulama ve kurumsal müşteri doğrulama (KYB) işlemleri bu modül üzerinden gerçekleştirilir.
Utility Modülü'nü kullanmadan önce Core Modülü projeye eklenmiş ve yapılandırılmış olmalıdır. Detaylar için Core Modülü sayfasına bakınız.
Utility Modülü diğer modüllerden farklı olarak delegate yerine @escaping closure pattern'i kullanır. initialize() ve delegate implementasyonu gerekmez.
Kurulum¶
Podfile'a aşağıdaki bağımlılığı ekleyin:
wide760pod 'OpenSSL-Universal', '3.3.2000'
XCFramework olarak eklenecekse: UtilityModule.xcframework ve CoreModule.xcframework dosyalarını Embed and Sign olarak projeye dahil edin.
post_install build ayarları ve kurulum yöntemleri tüm modüller için ortaktır. Detaylar için Başlarken → SDK Kurulumu sayfasına bakınız.
Genel Kullanım Yapısı¶
Utility Modülü'ndeki tüm servisler aynı çağrı yapısını izler:
wide760EnQualifyUtility.servisAdi( baseModel: baseModel, // BaseModelUtility sessionModel: sessionModel, // SessionModelUtility — bazı servislerde gerekmez // ... servis parametreleri ) { result in switch result { case .success(let response): // İşlem başarılı case .failure(let error): // Hata } }
BaseModelUtility ve SessionModelUtility tanımları için Core Modülü → BaseModel ve Core Modülü → SessionModel sayfalarına bakınız.
Servisler¶
Çağrı Tiplerinin Alınması¶
Backoffice'te tanımlı çağrı tiplerini getirir. SessionModel'deki callType alanında kullanılacak değerler buradan alınmalıdır.
wide760EnQualifyUtility.getCallTypes( baseModel: baseModel ) { result in switch result { case .success(let callTypes): // callTypes: [CallType] // callTypes[0].name → çağrı tipi adı (örn. "NewCustomer") case .failure(let error): print(error.localizedDescription) } }
Bu servis sessionModel gerektirmez; yalnızca baseModel ile çağrılır.
Randevu Servisleri¶
Randevu Slot'larının Alınması¶
Belirli bir tarih aralığı için uygun randevu saatlerini getirir.
wide760EnQualifyUtility.getAppointmentSlots( baseModel: baseModel, sessionModel: sessionModel, startDate: "2026-01-01", // YYYY-MM-DD endDate: "2026-01-07" ) { result in switch result { case .success(let slots): // slots: [AppointmentSlot] // slots[0].date, slots[0].time case .failure(let error): print(error.localizedDescription) } }
Randevu Oluşturma¶
wide760EnQualifyUtility.createAppointment( baseModel: baseModel, sessionModel: sessionModel, slotId: "SLOT_ID", // getAppointmentSlots'tan alınan slot ID'si note: "Opsiyonel not" ) { result in switch result { case .success(let appointment): // appointment.id → oluşturulan randevu ID'si // appointment.date, appointment.time case .failure(let error): print(error.localizedDescription) } }
Randevu Güncelleme¶
wide760EnQualifyUtility.updateAppointment( baseModel: baseModel, sessionModel: sessionModel, appointmentId: "APPOINTMENT_ID", slotId: "NEW_SLOT_ID", note: "Güncellenmiş not" ) { result in switch result { case .success: // Güncelleme başarılı case .failure(let error): print(error.localizedDescription) } }
Randevu İptali¶
wide760EnQualifyUtility.cancelAppointment( baseModel: baseModel, sessionModel: sessionModel, appointmentId: "APPOINTMENT_ID" ) { result in switch result { case .success: // İptal başarılı case .failure(let error): print(error.localizedDescription) } }
Mevcut Randevunun Alınması¶
Kullanıcının aktif randevusunu getirir.
wide760EnQualifyUtility.getAppointment( baseModel: baseModel, sessionModel: sessionModel ) { result in switch result { case .success(let appointment): // appointment nil ise aktif randevu yok case .failure(let error): print(error.localizedDescription) } }
Doküman İmzalama¶
Kullanıcıya imzalatılacak dokümanları listeler ve imza akışını başlatır.
İmzalanacak Dokümanların Alınması¶
wide760EnQualifyUtility.getDocumentsToSign( baseModel: baseModel, sessionModel: sessionModel ) { result in switch result { case .success(let documents): // documents: [SignDocument] // documents[0].id, documents[0].name, documents[0].url case .failure(let error): print(error.localizedDescription) } }
Doküman İmzalama¶
wide760EnQualifyUtility.signDocument( baseModel: baseModel, sessionModel: sessionModel, documentId: "DOCUMENT_ID", in: self // İmza ekranının sunulacağı UIViewController ) { result in switch result { case .success: // İmzalama tamamlandı case .failure(let error): print(error.localizedDescription) } }
İmza akışı SDK tarafından yönetilen bir ekran üzerinden gerçekleşir. in parametresine geçilen view controller üzerine imza ekranı modal olarak sunulur.
Adres Doğrulama¶
Kullanıcının adres bilgisini doğrular. Adres verisi OCR'dan veya manuel giriş yoluyla sağlanabilir.
wide760EnQualifyUtility.verifyAddress( baseModel: baseModel, sessionModel: sessionModel, address: AddressModel( street: "Atatürk Caddesi", buildingNo: "42", apartmentNo: "5", district: "Çankaya", city: "Ankara", postalCode: "06550", country: "TUR" ) ) { result in switch result { case .success(let verificationResult): // verificationResult.isVerified → Bool // verificationResult.matchScore → güven skoru case .failure(let error): print(error.localizedDescription) } }
AddressModel alanları:
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
street | String | ✅ | Sokak / cadde adı |
buildingNo | String | ✅ | Bina numarası |
apartmentNo | String? | — | Daire numarası |
district | String | ✅ | İlçe |
city | String | ✅ | Şehir |
postalCode | String? | — | Posta kodu |
country | String | ✅ | Ülke kodu (örn. "TUR") |
KYB — Kurumsal Kimlik Doğrulama¶
Kurumsal müşteri doğrulama akışları için kullanılır. Şirket bilgisi sorgulanır ve yetkili kişi doğrulaması yapılır.
Şirket Sorgulama¶
wide760EnQualifyUtility.queryBusiness( baseModel: baseModel, sessionModel: sessionModel, taxNumber: "1234567890" ) { result in switch result { case .success(let business): // business.name → şirket adı // business.taxNumber // business.authorizedPersons → [AuthorizedPerson] case .failure(let error): print(error.localizedDescription) } }
Yetkili Kişi Doğrulaması Başlatma¶
wide760EnQualifyUtility.startBusinessVerification( baseModel: baseModel, sessionModel: sessionModel, businessId: "BUSINESS_ID", // queryBusiness'tan alınan ID authorizedPersonId: "PERSON_ID" // Doğrulanacak yetkili kişi ID'si ) { result in switch result { case .success(let verificationSession): // verificationSession.sessionId → doğrulama oturumu başlatıldı // Bu session ile OCR / Face / VideoCall akışları başlatılabilir case .failure(let error): print(error.localizedDescription) } }
KYB doğrulama oturumu başlatıldıktan sonra standart OCR, NFC ve Face akışları bu oturum üzerinden yürütülür. SessionModel'deki businessReference alanına verificationSession.sessionId değerini geçin.
Diğer Yardımcı Servisler¶
OTP Doğrulama¶
SMS ile gönderilen OTP kodunu doğrular.
wide760EnQualifyUtility.verifyOTP( baseModel: baseModel, sessionModel: sessionModel, otpCode: "123456" ) { result in switch result { case .success: // OTP doğrulandı case .failure(let error): print(error.localizedDescription) } }
OTP Yeniden Gönderme¶
wide760EnQualifyUtility.resendOTP( baseModel: baseModel, sessionModel: sessionModel ) { result in switch result { case .success: // OTP yeniden gönderildi case .failure(let error): print(error.localizedDescription) } }
Oturum Durumu Sorgulama¶
Mevcut oturumun backoffice tarafındaki durumunu sorgular.
wide760EnQualifyUtility.getSessionStatus( baseModel: baseModel, sessionModel: sessionModel ) { result in switch result { case .success(let status): // status.state → oturum durumu (örn. "Pending", "Completed") // status.message → açıklama case .failure(let error): print(error.localizedDescription) } }
Hata Yönetimi¶
Tüm Utility servisleri aynı hata yapısını kullanır:
wide760case .failure(let error): switch error { case .networkError(let message): // Ağ bağlantısı hatası case .serverError(let code, let message): // Sunucu taraflı hata — code: HTTP status kodu case .validationError(let message): // Parametre doğrulama hatası — eksik veya hatalı alan case .unauthorized: // Token geçersiz veya süresi dolmuş }
| Hata | Açıklama |
|---|---|
.networkError(String) | Sunucuya ulaşılamadı |
.serverError(Int, String) | Sunucu hata döndürdü |
.validationError(String) | Zorunlu parametre eksik veya hatalı |
.unauthorized | Yetkilendirme hatası — token yenilenmesi gerekebilir |
Sonraki adım: UI Özelleştirme