Android’de XMPP Client Geliştirme

Oct 23 2011 Published by under mobile

Android’de bir chat uygulaması yazmak isterseniz bu yazı tam da sizin için diyebilirim. Öncelikle bir chat sunucusuna ihtiyaç var. Bunun için OpenFire biçilmiş kaftan zira açık kaynak kodlu (GPL ile lisanslı), yönetimi kolay ve güvenli. Üstelik GTalk ve Facebook dahil piyasadaki chat uygulamalarının bir çoğu bu sunucuyu kullanıyor.

XMPP client geliştirmek için İlk olarak OpenFire sunucusunu bilgisayarımıza kuruyoruz.  (http://www.igniterealtime.org/projects/openfire/) Sunucuyu kurduktan sonra başlatıyoruz:

Sunucu kısmını hallettikten sonra client tarafına geçebiliriz.  XMPP client için en uygun kütüphane SMACK API. (http://www.igniterealtime.org/projects/smack/) SMACK jar’larını aldıysak Android uygulamamızı geliştirmeye başlayabiliriz.

Chat sunucusuna bağlanmak için:

Chat uygulaması icin bir login ekranına ihtiyacımız var. Android’de ekrana bileşenler ekleyip onlardan değerleri almayı bildiğinizi varsayarak bu kısmı atlıyorum. (http://developer.android.com/guide/index.html)

Login ekranından aldığımız kullanıcı ismi ve şifreyle Openfire sunucusuna bağlanmak için (login başarısız olduğunda XMPPException atar.):

Login olduktan sonra ulaşılabilir (available) olduğumuzu da sunucuya göndermemiz gerekiyor:

Eğer giriş yapan kullanıcı OpenFire sunucusunda herhangi bir gruba üye değil ise default grup yaratıyoruz:

Giriş yaptıktan sonra arkadaşlarımızı görmek için önce chat gruplarına ulaşıyoruz. (Grupları listelemek için String RosterGroup.getName() metodunu kullanabiliriz.

Grup üyesi olan kullanıcıları listelemek için:

Listelenen kullanıcıları da hallettik. Artık chat yapabilmek için yeterli altyapıya sahibiz. Chat yapmak için ChatManager sınıfına ihtiyacımız var:

Kullanıcının üzerine tıklandığında yeni bir chat başlatmamız gerekiyor. İlk parametre chat’in ismi. Yani chat yaptığınız kullanıcının ismi. İkinci parametre şimdilik önemsiz.

Chat yarattıktan sonra gelen mesajların ekranımızda görünmesi için bir Listener’a ihtiyacımız var:

Send tuşuna basıldığında yazılan mesajı göndermek için:

Chat için ihtiyacımız olan metodlar bunlar. Ancak tabii bir chat uygulamasının login olan kullanıcının bir dahaki girişinde isterse kullanıcı ismi ve/veya şifresini hatırlatma ve gönderilen mesajların history’sini kaydetme gibi özelliklerinin olması gerekmektedir. Android’de DB işlemleri için SQLite kullanıyoruz. DB yaratmak için SQLiteOpenHelper sınıfından extend eden bir sınıf yazabilir ve SQLiteDatabase sınıfıyla da scriptlerinizi çalıştırabilirsiniz. Ayrıca kullanıcının kendisinin sisteme kaydolması için de gerekli metodlar Smack API’de mevcut.

Yukarıdaki işleyişin doğru çalışması için OpenFire chat sunucusundan grup yaratmanız ve kullanıcı eklemeniz gerekmektedir. Bu işemlerin ekran çıktıları aşağıdadır:

Kullanıcı listesi: (OpenFire sunucusu admin ekranı)

Bu API ve yukarıdakilerle aşağıda ekran çıktılarını bulabileceğiniz türden bir uygulamayı çok rahat yazabilirsiniz:

Login ekranı:

Arkadaş listesi ekranı:

Konuşma penceresi:

3 responses so far

  • Ahmet Burak Demirkoparan says:

    Hocam merhabalar.Bu configurationmanagerde kullandığınız serverin içinde neler var acaba.
    Ben ip’ye 127.0.0.1 porta 5222 yazdığım halde bir türlü emülatörden localdeki openfire servere bağlanamadım.

    Klasik java ile bağlanıyorum fakat androide entegre edemiyorum.

    • yalcin says:

      Burak merhaba,

      Bağlanamıyorsan Android uygulamana verdiğin izinleri AndroidManifest dosyasından kontrol et. Aşağıdaki izinlerin verilmiş olması gerekiyor:

      uses-permission android:name=”android.permission.INTERNET”
      uses-permission android:name=”android.permission.VIBRATE”

      Bir de IP’ni 127.0.0.1 yerine 192.168.1.1 şeklinde yazmayı dene.

  • Emre Celebi says:

    Bizim üniversite proje ödevim tam olarak bu yani chat olayı ama bir türlü sağlam bi kaynak bulamadık türk olarak bi burayı bulduk ancak ayrıntılı bilgilmiz olmadığı için pek bişey anlayamadık bize mail vs verip bi şekilde yardımcı olabilir misiniz ?