Mobili yakalamak / IsMobileDevice / 51 Degrees

Daha önce bahsettiğim mobil uygulama çilesini bilenler bilir (bilmeyenler için; Android Üzerine). Bu uygulama tabii ki her ne kadar küfretmek istesem de edemediğim bir sorunla karşı karşıya kaldı geçenlerde. Güvenli kontrol ve download istatistiği sağladığımız için belirli bir download sayfasından verilen izinli dosyaların, mobil cihazlarda indirilememesi. Ben de yeter artık diyerek, mobil gelen cihazlara direk dosyayı link olarak atamaya karar verdim ve bu sorunun daha üstesinden gelecektim ki – ayrıca bu karara 6 saatlik iş gücü sonrasında ulaştım – bir sorunla karşılaştım. .Net Bowser Request.Browser.IsMobileDevice özelliği, tabletleri yakalamıyor!!!

Sorun

Sorun belli, sisteme talepte bulunan bir cihazın mobil olup olmadığını anlamak için eklenen eklenti tabletleri yakalamıyor. Ayrıca bunun güncel olduğunu da pek sanmıyorum. Cihazın tabletde olsa neden mobil olarak algılanmasını istememin sebebi de, üzerinde o harika Android işletim sisteminin olması. Bu arada belirtmem gerekir ki; iOS aletlere hiç bir sorun yok, Android’in en güncel sürümlerinde de hiç bir sorun yok yani download yönlendirme sayfamızdan indirme yapabiliyorlar. Fakat Andorid’in eski sürümünü kullanan %35’lik bir kesim olunca ve bu arkadaşlar sürekli Play Store’a “dosyalar açılmıyor, ne kötü program” diye yazınca insan görmezden gelemiyor işte.

Çözüm 1

Baştan diyeyim bu sorunu çözmedi :D. (http://detectmobilebrowsers.com)’a girip oradan browser agent ile yakalarım ben ne olacak ki yaa dedim ben de. Demez olaydım, sonuçta Chrome tarayıcısı tablet ve desktop arayüzünde benzer agent info bilgisini kullandığı için bu ihtimal de bir çırpıda son buldu. Dedim ki media query koysam falan, gizlesem göstersem linkleri. O kadar da düşmedin sen dedim kendi kendime. Bunun üzerine araştırma yapınca bu tip dataların en güncel halinin (WURFL)[http://wurfl.sourceforge.net] denen açık kaynaklı bir DB’den geldiğini öğrendim. Fakat bunu nasıl implemente edebilirdim ki, ayrıca tek istediğim sadece IsMobileDevice yazıp, if koyup link göstermek yani gerek var mı bu karada eziyete? (YAGNI) 1

Esas Çözüm

İşte tam bu düşüncelerin arasında bir çözüm buldum 51degrees (http://51degrees.codeplex.com). Başta open source yazılan ve daha sonra paralı versiyonu da çıkan bir library. Ayrıca sadece .net için değil diğer diller için de çözümleri bulunmakta. Kurulumunu da NuGet üzerinden yapabildiğimiz için direk atladım diyebilirim. Bu arada yükleyeceğim sistem de kıçıkırık bir sistem değil, anlık responce timeların istatistiğini tuttuğumuz büyük bir ERP çözümü. Yine de seçenekleri bitince insan her yolu denemeye başlıyor.

NuGet üzerinden yükledikten sonra kendi configurasyon ayarı ve dll dosyası ile sisteme dahil olan bu çözüm üzerinde bir ayar yapmadım. Açıkcası Login yönlendirmesi ve gereksiz iki üç dosya vardı, bunları kaldırmaya ayar denemez bile. Sonuçta sistemi çalıştırdığımda her şey istediğim gibiydi. Tablette test edince yine Mobile olarak algılıyor ve her şey mükemmel çalışıyordu. Size tavsiyem bu ürünü eğer sitenizin mobil kısmını yapacaksanız kullanmanız. Zira açık lisanslı hali ile gayet güzel kullanılabiliyor.

Sadece bu özelliğe yaramayan 51degrees’in diğer özelliklerini ele alırsak;

  • ScreenWidth ve ScreenHeight değerlerini alabilmek.
  • Request.Browser.IsMobileDevice özelliğini genişlettiği için ekstra bir kod yazmamak.
  • Paralı versiyonunda IsTablet gibi bir değişkene sahip olmak,
  • Free hali ile haftada bir güncelleme geçirdiği ve bu da standart mobil cihazlar için yeterli bir güncelleme olduğundan pek de bir sorun teşkil etmemek,
  • Paralı versiyonu ile tarayıcınızın bir çok özelliğine erişmek; renkler, falan filan,
  • Paralı versiyonunda gelen kullanıcının Celluar mı yoksa Wi-Fi üzerinden geldiğini bulmak.

Açıkcası bana free versiyonu yettiği için pek de diğer özelliklerini araştırmadım. Eğer gerçekten hızlı ve sürekli güncellenen – bu arada WURFL DB’sine bağlayabiliyor ve oradan güncellenmesi sağlanabiliyor – bir sistem istiyorsanız ve Request.Browser.IsMobileDevice kodu sizi deli ediyorsa, bu tam da sizin aradığınız çözüm.

Size kafayı sıyırmadan iyi mobil kodlamalar…


  1. You aren’t gonna need it! prensibi. 

15 comments

  1. Merhaba yazınız için teşekkürler. Bu apiyi indirip projeme ekledim kendisi mobile/default.aspx vs gibi dosyalrı yükledi. webde çalıstırdığımda mobile/default.aspx sayfasına da gidiyor ama standart sarı hata ekranı çıkıyor mobile sayfada. Örnek bir projeniz var mıdır? ya da hatanın nerden kaynaklandığı hakkında bilginiz var mıdır belki siz de bu sorunla karşılaşmıssınızdır ilk yüklemede.

    1. Merhaba, ben teşekkür ederim makalemi okuduğunuz için. Ayar olarak orada detaylıca yazmadım ama şöyle diyeyim, kendi configuration dosyalarını kaldırısanız (51degrees’in) otomatik yönlendirme de kalkacaktır. İkinci bir yöntem ise 51degrees’in configurasyon dosyasını açıp yönlendirme kodlarını kaldırmak (redirect tagını kaldırsanız yeterli).

      Bu kodları, her girilen cihazda farklı bir giriş oluşturmak isteyenler için koymuşlar ama responsive sayfanız varsa gerekli değil o kadar.

      1. Ama ben zaten otomatik yönlenme yapmasını istiyorum, mobile/default.aspx sayfası yok gibi davranıyor. responsive sayfadan kastettiğiniz sayfa nedir? Yönlenmesi için ben ekstra bi sayfa yapmadım.

        1. Tamam o zaman varsayılan ayarlar yeterli olacaktır. Çıkan sarı sayfanın ekran görüntüsünü paylaşabilir misiniz?

          Responsive sayfa olarak, tek bir default.aspx yaratıp, girilen cihazın ekran görüntüsüne göre tasarımının değişmesini (CSS ile) kastetmekteydim ama siz zaten yeni bir sayfaya yönlendirmek istiyorsunuz. Elinizde hazır bir mobil giriş sayfası (default.aspx) var ise 51degrees’in config dosyasından “mobile/default.aspx” yerine elinizde olan sayfanın adresini yazabilirsiniz.

          Hatayı görebilirsem daha net konuşabileceğim.

          1. standart sarı hata ekranı , aşağıdaki hatay veren. Ama mobile/default.aspx sayfası localde çalısıyor. Server a atınca böyle oldu.
            Server Error in ‘/’ Application.

            Runtime Error

            Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

            Details: To enable the details of this specific error message to be viewable on remote machines, please create a tag within a “web.config” configuration file located in the root directory of the current web application. This tag should then have its “mode” attribute set to “Off”.

            Notes: The current error page you are seeing can be replaced by a custom error page by modifying the “defaultRedirect” attribute of the application’s configuration tag to point to a custom error page URL.

  2. MErhaba tekrar. 51degrees’ in kendi hazırladığı sayfayı göremiyor. Benim hazırladığım sayfaya yönlendirdiğimde mobilde çalıstı. Teşekkürler.

      1. Merhaba, bu apinin benim benim indirdiğim versiyonda kendisi sayfa da oluşturmustu. Nette baktım her versiyonda sayfa yoktu. Zaten benim localde o sayfayı da açabilyordum. Neyse sorunu girişte request browser kontrolü yaparak çözdüm. Teşekkürler.

  3. Ama şöyle bi sorun var. Iphone’dan girince mobile yönlendirme yapmıyor. Normal default.aspx sayfaya gidiyor. Bu api iphone u tanımıyor mu?

  4. Aslında sadece iphone da değil diğer telefonlarda da browsera direk site adı yazınca mobil için isteiğim sayfaya yönleniyor ama atıyorum facebook taki paylaştığım bir mesajdan (sitenin linki yazılı) linkle gidince yine mobil sayfaya gitmiyor ana sayfaya gidiyor

    1. Merhaba, eğer sayfayı facebook app gibi applikasyonların içerisinden açıyorsanız, aracın tipinin belirlendiği tarayıcı bilgileri, facebook tarafından değiştirildiğinden, 51degrees cihaz tipini anlayamıyor olabilir. Fakat sadece linke tıkladığınızda yine IE, Chrome, Safari gibi tarayıcılarda link olarak açıyorsa ve yine de mobile yönlenme olmuyorsa, 51degrees ‘in config dosyasındaki yönlendirme ayarlarını gözden geçirebilirsiniz. Ya da kendiniz kod kısmından “Request.Browser.IsMobileDevice” kullanarak bir yönlendirme yapabilirsiniz.

  5. Yorumu sona yazmadı. Bu sorunla uğraşacak arkadaşlar için yazayım tekrar son çözümü:

    Bu apinin benim benim indirdiğim versiyonda kendisi sayfa da oluşturmustu. Nette baktım her versiyonda sayfa yoktu. Zaten benim localde o sayfayı da açabilyordum. Neyse sorunu girişte request browser kontrolü yaparak çözdüm. Teşekkürler.

Comments are closed.