Ionic / Cordova Http Get Problem

Kategori: Ionic / Cordova
Tarih: 16th Ekim 2018


Merhabalar. İki gündür çok basit bir problemin etrafında dolaşıp duruyorum. Basit bir proje için Ionic ile uygulama geliştiriyoruz. Uygulama sunucudan bazı dataları Json olarak okuyup uygun formatta kullanıcıya gösteriyor. Geliştirmeyi tamamladık. Emulatör ve gerçek cihazlarda testlerini yaptık. Ardından marketlere yüklemeye kalktık; o da ne? Uygulama bir ekranda takılıp kalıyor. Hata da vermiyor.

Uygulama geliştiriciler için en büyük problem. Hata vermeyen/İstisna fırlatmayan kütüphaneler. Bazen bir anda eliniz kolunuz bağlanıyor. Bizim de başımızdaki durum bu mihvalde.

Ionic frameworkün en temel kütüphanelerinden HTTP kütüphane ile json datayı get olarak istiyoruz. Orada kalıyor. Hata vermiyor. Uygulama debug olarak derlenince sorun yok ama release yaptığımızda çalışmıyor. Alternatif kütüphaneleri denedik durum aynı. Bu bize şu fikri verdi: Tüm http kütüphaneleri bu noktada kaldığına göre sorun bir alt katmandan kaynaklanıyor olabilir. Handikap ise debug olarak derlenince sorun olmaması.

Kendimizi internette bu yazının başlığını ararken bulduk. Çeşitli cevaplar var ama çoğunluğu http kütüphanesinin ayarları üzerine. Daha sonra android ve ios için native dosyaları inceleyerek birşeyler yapmamız gerektiğine ikna olduk. Son olarak şuradaki soru karşımıza çıktı. Testlerde sorun olmamasına hatta Chrome tarayıcının bile sorun göstermemesine rağmen sunucunun ssl ‘i ile ilgili bir sorun olabileceği yazılmış cevap olarak da. Kontrol ettik ki bizim de sorunumuz aynı. Özellikle 10$ a alınan ssl sertifikalarında bu tür sorunlar çıkabiliyor. Çıkmayadabiliyor. Aynı ailenin ürünü farklı bir sertifika ile test etiğimizde ise onda da sorun olmadığını gördük. Http kütüphanesinin ssl sertifika kontrolü yapma diye bir ayarı var aslında ama uygulama daha öncelikli bir katmanda hataya düştüğü için o da işe yaramıyor bu durumda. O zaman çözüm olarak Ios ve Android ‘in native dosyaları değiştirilmeli. İlgili cevapta bu iş için de bir link verilmiş ama linkin uçma ihtimaline karşı buraya da yapılması gerekenleri yazıyorum.

 

Önce Android için;

Bu “project/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java”, yada bu “project/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java” dizindeki dosyayı (cordova sürümünüze göre değişebilir) açıp “onReceivedSslError” medhodunu bulun. Bu method ‘un içeriği de sürüme göre farklılık gösterebiliyor. Sadece şunu yapmalıyız. “if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0)” şartı ile kontrol yaptıktan sonra bu bloğun “else” kısmında “super.onReceivedSslError(view, handler, error);” buna benzer bir şekilde hata methodu çağırılıyor. Bunu by-pass edip çalışmaya devam etmesini sağlamalıyız. Bunun için bu satırı yoruma alıp altına çalışmaya devam et satırlarını eklemeliyiz (bu çalışmaya devam et komutu demin bahsi geçen if bloğunun true kısmından alınmıştır):

else{
//super.onReceivedSslError(view, handler, error);
handler.proceed();
<span class="keyword">    return</span>;
}

Sonda IOS için;

Buradaki “project/platforms/ios/Project/Classes/AppDelegate.m” dosyasını açıp altına aşağıdaki kodu ekliyoruz. Bu kod ssl sertifikası geçersiz olduğunda “sorun yok devam et” diyecek.

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}
@end



Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Comment

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Optimization WordPress Plugins & Solutions by W3 EDGE