Check Version Google Play & Application Store Apps in Xamarin Forms (Dependency Service)
Bugün kaleme alacağımız konu “Check Version Google Play & Application Store Apps in Xamarin Forms” olacak. Üzerinde duracağımız bu başlığın Türkçe açıklamasından daha açıklayıcı olduğunu düşündüğüm için Türkçe’ye çevirmiyorum.
Aslında Covid-19 oyunbozanlık yapmamış olsaydı. Yıl içerisinde Isparta’da düzenlenmesi planlanan ama pandemi nedeniyle iptal edilen Güney Kariyer Fuarı’nda Piksel Akademi bünyesinde ben de atolye çalışması şeklinde anlatmayı planlıyordum.
Mevcutta canlıda projelerden biri üzerinde çalışırken karşılaştığımız bir müşteri şikayeti ve dolayısıyla can sıkan bir problemden ve çözümünden bahsedeceğim.
Genel olarak problem mevcut uygulamanın belirli sürümüne sahip olan son kullanıcıların kendilerinden kaynaklı olmasa dahi bazı sorgular sonucu belirli hatalar ve ya istenilenin dışında sonuçlar aldıkları ve bundan pek te memnun olmadıkları şeklinde ifade edeyim.
Hak verirsiniz ki can sıkıcı bir durum söz konusu.
Bence bir önceki paragrafa çok takılmayın derim ve devam edelim.
Konuyu şöyle bir geri çekilip düşünelim ve daha genel bir çerçeveden bakalım.
İlk ve en temel haliyle uygulamanın belirli sürümlerini kullanan kullanıcılardan; problemi ortadan kaldıracak bir takım işlemleri yapmaya zorlamak olduğunu görebiliyoruz.
Bunlar;
1- Uygulamayı son sürüme güncellemeye zorlamak olabilir,
2- Kullanıcıyı yeniden login yaptırmak olabilir,
3- Bla bla bla gibi çoğaltabileceğimiz birçok komplo teorimiz söz konusu olabilir.
Bu son bahsettiklerimden de farkettiğiniz üzere özeldeki bir problemi çözmekten bahsetmiyorum. İhtiyaç duyduğumuz durumlarda daha genel müdahalelerde bulunabileceğimiz bir yapıdan bahsediyorum.
Çözüm noktasına gelince;
Tamamen hikaye anlatarak problemler çözülemiyor üzgünüm.
Bu yüzden Xamarin tarafında en güncel isimleriyle Xamarin.Android ve Xamarin.IOS platformlarındaki bir işlevselliğe erişmemiz ve bu işlevsellik üzerinden belirli belirli queryler ile bazı işlemler yapmamız gibi bir durum söz konusu.
Aslında öyle hiç te korkulacak bir cümle gibi de gelmedi.
Dolayısıyla bu kapsamda hayatımıza muhtemelen bu makaleyi okuyorsanız bir çoğumuzun bildiği ve ya daha önce bir şekilde duymuş olduğunu düşündüğüm bir kavram girmiş oluyor.
Hadi o zaman yazın üç sütun üstüne kapkara puntolarla DEPENDENCY SERVICE diye..
Gelin bakalım neymiş bu Dependency Service birlikte bakalım. Ufak birkaç araştırmadan sonra
Yararlı Dökümanlar :
Örnek : https://github.com/xamarin/xamarin-forms-samples/tree/master/DependencyService
MSDN dökümanlarında bu kavramı :
“Xamarin.Forms uygulamalarının paylaşılan koddan yerel platform işlevselliğini çağırmasını sağlayan bir hizmet bulucudur.”
gibi bir tanım karşılıyor bizi. Biraz kafamız karışmış olabilir ama yapacağımız işlemler teorisi kadar kafa karıştırıcı olmayacağının garantisini verebilirim.
Dependency Service kavramını en basit haliyle tanımlamak gerekirse Portable -Xamarin Forms- katman üzerinden Native -ki IOS ve Android katmanlar oluyor kendileri- katmanlardaki bir işlevselliğe (bilgiye, özelliğe adına ne demek isterseniz) erişmek istediğimiz zaman başvurduğumuz statik bir sınıf olarak bahsedebiliriz.
Birkaç örnek vermek gerekirse Kameraya ve ya Bluetooth’a erişmek ve ya bizim burada ihtiyacımız olduğu gibi telefonda yüklü olan bir uygulamanın hangi sürüme sahip olduğu öğrenmek gibi çoğaltabileceğimiz durumlar söz konusu olabiliyor.
Bu konuyla ilgili bol bol örnekler ile ele aldığım yine müsvetteler arasında bulunan birçok yazı da temize çekilmeyi bekliyor. Umarım en kısa zamanda onları da paylaşma fırsatı bulurum.
Gelelim benim ilk defa farkında olmadan Dependency Service nasıl ihtiyaç duyduğuma; Öyle matrak bir hikaye değil ama yine bir gün Native katmanda oluşturmuş olduğum bir class içerisindeki metotu portable katmandan nasıl tetikleyeceğimi düşünürken karşılaştığım ve bana dünyaları bağışlayan bir kavram oldu.
Konumuzu çok ta dağıtmadan gelelim mevcut senaryomuza;
Apple ve ya Google mağazalarında yayında olan bir mobil uygulamamız var (Tartışmakta olduğumuz yapının kurulu olduğu bir uygulama).
Bunun yanında önceki sürümlerde yaşanan ve acil müdahale edilmesi zorunlu bir bug -istenmeyen bir durum- söz konusu ve son olarak çözüme ulaştırılmış bir son sürüm ve ya çözüm için uygulanması gereken bir senaryomuz var.
Bu üç adımlık açıklamadan sonra sanırım biraz gevezelik eden ben daha bir anlaşıldığımı umuyorum.
Birinci çözümün kullanıcıyı, uygulamasını en son sürüme güncellemeye zorlamak.
İkinci çözümün ise kullanıcı eski bir sürüme sahip ise yeniden login işlemi yaptırmak olduğunu varsayalım.
Bu bilgiler ışığında ihtiyacımız olan bilgileri tuttuğumuz bir modelimiz olsun.
Servis üzerinden son kullanıcıyla iletişime geçmek gibi yapımızın olduğunu varsayıyorum. Çünkü burada bu konuya girmemiz konuyu iyice dallandıracağı için birkaç örnek dökümanı bırakıyorum ve en kısa zamanda bu konuyu da ele aldığım bir makale yazmanın da sözünü vererek yazıma devam ediyorum.
Tabi siz burada statik bir sınıftan da yardım alabilirsiniz aslında. :)
Kaynak : https://github.com/mustafadikyar/RestClient
Biraz bilgi sahibi olan arkadaşlar için yeterli bir kaynak olacaktır. Pek haşır neşir değilseniz de interneti biraz karıştırmanızı öneririm.
Haydi devam edelim;
Şimdi kullanıcının cihazında yüklü olan uygulamanın hangi sürüme sahip olduğunu öğrenelim.
Xamarin.Android katmanda yazacağımız kodlar işte burada;
Mevcuttaki kodları incelediğimiz zaman bize sonuç olarak ilgili uygulamanın VersionName ve VersionCode dönen iki adet metot görmekteyiz.
Xamarin.IOS katmanda yazacağımız kodlar işte burada;
Yine IOS katmandaki kodlarımızı incelediğimiz zaman android katmandaki ile aynı sonuçları aldığımızı görmekteyiz.
Xamarin.Forms katmanda yazacağımız kodlar işte burada;
Yukarıda bahsettiğimiz Dependency Service konusunu incelediyseniz eğer bu interface neden ihtiyaç duyduğumuzu anlamış olduğunuzu düşünüyorum.
Haydi son olarak ta portable katmanımızdan native katmanlarda yazmış olduğumuz metotları tetikleyelim.
İlgili kodumuz aşağıda :
Şimdide sonuçlara bir göz atalım.
Makalemizin sonuna gelirken yaptığımız işlemlerin sonuçlarını da görmüş olduk.
Böylelikle yapmamız gerekenlerin büyük bir çoğunluğunu bitirmiş, kontrollerimizi yapacağımız portable katmana ihtiyacımız olan bilgileri taşımış olduk.
Artık bu bilgiler ışığında daha önce de bahsettiğim benim de en sevdiğim kısım olan komplo teorilerimiz ve ihtiyacımız olan algoritmaları oluşturmak kaldı.
Bu son bölümde kurulacak yapılar tamamen değişiklik göstereceği için sizlerin geniş ufkuna bırakıyorum.
Ben bu konuyu ele alırken muazzam bir keyif aldım. Umarım sizler de aynı duyguları paylaşıyorsunuzdur.
Keyifli kodlamalar dilerim.
Demo uygulama : https://github.com/mustafadikyar/CheckVersionApp