Web uygulamalarında Mobile Cihaz Kontrolü

Geçtiğimiz günlerde jQuery ve Mobil Web Uygulamaları internet seminerinde, mobile web uygulamalarını nasıl geliştirebileceğimizi incelemeye çalışmıştık. Yapılan bu çalışmadan sonrasında Yazgelistir forumunda  Mobil telefon tespit ve yönlendirmebaşlığı altında, konu ile ilgili bir soru sorulmuştu. Bu yazımda söz konusu problemi nasıl çözebileceğimiz inceleyeceğiz.

Problem çözüm için yeni bir solution oluşturalım. Oluşturmuş olduğumuz solution ‘na ASP.Net WebForm(uygulamanın kolay anlaşılması açısından ASP.Net WebForm kullanacağız.) ve Class Library projeleri oluşturalım. Class Library projesi içerisine IsMobileWeb isimli bir sınıf ekleyelim. Eklemiş olduğumuz sınıfı, Web uygulamasından istem yapan cihazın Mobile olup/olmadığını kontrol edecektir.

 namespace IsMobileDevices.MobileWebLib
{
using System.Web;
    public class IsMobileWeb
{
public static bool IsMobileBrowser()
{
///Geçerli HttpContext nesnesini aldık.
HttpContext context = HttpContext.Current;///HttpContext nesnesi üzerinde bulunan fonksiyon kullanımı
///Bazen çalışmıyor.
if (context.Request.Browser.IsMobileDevice)
{
return true;
}

///Uygulamadan isteme yapaman cihazın HTTP_X_WAP_PROFILE
///Header bilgisini kontrolü yapılıyor.
if (context.Request.ServerVariables[“HTTP_X_WAP_PROFILE”] != null)
{
return true;
}

///Web isteminde HTTP_ACCEPT header var olup/olmadığı
///kontrol ediliyor.
///Eğer söz konusu header var ise wap olup/olmadığını
///kontrol ediyor.
if (context.Request.ServerVariables[“HTTP_ACCEPT”] != null &&
context.Request.ServerVariables[“HTTP_ACCEPT”]
.ToLower().Contains(“wap”))
{
return true;
}

///Son olarak HTTP_USER_AGENT header bilgisi kontrol ediliyor.
if (context.Request.ServerVariables[“HTTP_USER_AGENT”] != null)
{
///Piyasada bulunan bilinen ve kullanıcıların tükettiği
///tüm mobile cihazlar, dizi oluşturuyoruz.
string[] mobiles = new[]
{
“midp”, “j2me”, “avant”, “docomo”,
“novarra”, “palmos”, “palmsource”,
“240×320”, “opwv”, “chtml”,
“pda”, “windows ce”, “mmp/”,
“blackberry”, “mib/”, “symbian”,
“wireless”, “nokia”, “hand”, “mobi”,
“phone”, “cdm”, “up.b”, “audio”,
“SIE-“, “SEC-“, “samsung”, “HTC”,
“mot-“, “mitsu”, “sagem”, “sony”
, “alcatel”, “lg”, “eric”, “vx”,
“NEC”, “philips”, “mmm”, “xx”,
“panasonic”, “sharp”, “wap”, “sch”,
“rover”, “pocket”, “benq”, “java”,
“pt”, “pg”, “vox”, “amoi”,
“bird”, “compal”, “kg”, “voda”,
“sany”, “kdd”, “dbt”, “sendo”,
“sgh”, “gradi”, “jb”, “dddi”,
“moto”, “iphone”
};

foreach (string s in mobiles)
{
///Hazırladığımız dizi kullanarak HTTP_USER_AGENT
///header içerisinde bizim olabileceğini
///düşündüümüz mobile cihazları
///kontrol ediliyor.
if (context.Request.ServerVariables[“HTTP_USER_AGENT”]
.ToLower().Contains(s.ToLower()))
{
return true;
}
}
}

///Eğer bu noktaya kadar true dönemdi ise, Web istemi
///Mobile cihaz dışında istem yapılmıştır.
return false;
}
}
}

Web uygulamamıza mobile istemleri denetleyecek olan sınıfı oluşturduk. Hazırlamış olduğumuzu sınıfı, uygulama içerisine dahil ederek uygulamamız denetleyelim. Söz konusu denetim işlemini Web uygulamamızın “Session_Start”  olayında gerçekleştireceğiz.

global-mobile-web

Not: Söz konusu durumda ASP.Net MVC uygulamasında da kullanabilmektedir. Web uygulamaların “Session_Start”  olayı uygulamaya yapılan istemin başlangıcında kullanıcının uygulama oturum nesnesini oluşması aşamasıdır. Aynı şekilde ASP.Net MVC üzerinde de kullanıldığında routing değişiminde istediğiniz Web alanına yönlendirebilirsiniz.

Hazırlamış olduğumuzu uygulama örneği ve bundan sonra yayınlayacağım yazılarımda kullanacağım örnek uygulamaları sizlerin daha kolay ulaşmanız adına bitbucket üzerinde bir repository oluşturdum.

Bu yazımda ASP.Net ile geliştirdiğimiz uygulamalarda yapılan mobile istemleri nasıl anlayabileceğimiz incelemeye çalıştık. Konu ile ilgili sorularınızı info@ibrahimatay.org eposta adresine gönderebilirsiniz.

IBRAHIM ATAY

Teşekkürler

Kaynak

http://www.codeproject.com

Leave a Reply

Your email address will not be published. Required fields are marked *