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:
1 2 3 |
ConnectionConfiguration config = new ConnectionConfiguration(server.getAddress(),server.getPort()); XMPPConnection connection = new XMPPConnection(config); connection.connect(); |
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.):
1 |
connection.login(userName, password); |
Login olduktan sonra ulaşılabilir (available) olduğumuzu da sunucuya göndermemiz gerekiyor:
1 2 3 4 |
Presence p = new Presence(Presence.Type.available); p.setFrom(connection.getUser()); p.setMode(Presence.Mode.available); connection.sendPacket(p); |
Eğer giriş yapan kullanıcı OpenFire sunucusunda herhangi bir gruba üye değil ise default grup yaratıyoruz:
1 2 3 |
if(connection.getRoster().getGroups().size() == 0){ account.getRoster().createGroup("Friends"); } |
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.
1 |
Collection rosterGroups = connection.getRoster().getGroups(); |
Grup üyesi olan kullanıcıları listelemek için:
1 |
Collection allEntriesOfRosterGroup = rosterGroup.getEntries(); |
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:
1 |
ChatManager chatManager = connection.getChatManager(); |
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.
1 |
Chat newChat = chatManager.createChat(rosterEntry.getName(), null); |
Chat yarattıktan sonra gelen mesajların ekranımızda görünmesi için bir Listener’a ihtiyacımız var:
1 2 3 4 5 6 7 |
newChat.addMessageListener(new MessageListener() { public void processMessage(Chat chat, Message message) { String messageBody = message.getBody(); displayMessage(messageBody); } }); |
Send tuşuna basıldığında yazılan mesajı göndermek için:
1 |
newChat.sendMessage("merhaba, ben dostum. "); |
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: