23 Şubat 2012 Perşembe

Windows Phone WebBrowser Caching ve Facebook login/logout

Sosyal medya entegrasyonu yapacağınız yeni Windows Phone uygulamanızı geliştirmeye başlayacaksınız ve Facebook C# SDK’sını kullanmayı planlıyorsunuz.

image

Ama farkedeceksiniz ki authentication / authorization / delegation işlemleri, tamamen bir WebBrowser bileşeni içerisinde gerçekleştiriliyor ve uygulama geliştirici sadece bu bileşenin Navigated olayını (event) ele alarak sunucudan gelen cevapları (server responses) ve erişim dizgesini (Access Tokens) yakalıyor.

Başka bir kullanıcı ile login olmak için logout yapmak istediğinizde işler biraz daha karmaşık bir hal alıyor. Aşağıda verilen bilgiler bu karmaşık duruma çözüm olacaktır.

Logout işlemini uygulamak istediğimizde browser üzerinde logout URL’ini ziyaret ediyoruz.

wb.Navigate(new Uri(http://m.facebook.com/logout.php?confirm=1));

Ardından,WebBrowser bileşeninin Navigated olayında logout butonunu arıyoruz, logout işlemi için gerekli Url’i tespit edip ve bu gerçek logout Url’i ziyaret ediyoruz.

private void wb_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    string fbLogoutDoc = wb.SaveToString();
    Regex regex = new Regex("\\<A href=\\\"(.*)\\\".*data-sigil=\\\"logout\\\"");
    MatchCollection matches = regex.Matches(fbLogoutDoc);

    if (matches.Count > 0)
    {
        string finalLogout = string.Format("http://m.facebook.com{0}", matches[0].Groups[1].ToString().Replace("amp;", ""));
        wb.Navigate(new Uri(finalLogout));
    }
}

Bu sayede tarayıcı (browser), Facebook login çerezlerini (cookies) cache’lemeyecek ve bir sonraki ziyarette yeni bir kullanıcı authenticate edilmek istendiğinde login ekranı uygun bir şekilde görüntülenecek. Ayrıca, logout işlemini login yapılan ekrandan farklı bir yerde yapsak bile, WebBrowser bileşeni “invisible” olarak ayarlanabilir.

Temiz bir Windows Phone Facebook logout işlemi için bu basit çözüm kullanılabilir.

Hiç yorum yok:

Yorum Gönder