Chat Application Using Xmpp Smack API Android Tutorial

May 22, 2018 | Author: Ashish John | Category: Internet Protocols, Cyberspace, Application Layer Protocols, Technology, Communication


Comments



Description

3/9/2017 Chat Application Using Xmpp Smack Api Android TutorialWhat is XMPP? Extensible Messaging and Presence Protocol (XMPP) is an open XML technology for real­time communication as explained in the official site info section. Main Benefits of using it is its feature such as Presence to notify user state as well as being extensible therefore allowing you to extend its capibility to send Images and Video too. Other solutions do not provide such advance features and to add user states such as typing/away is very hard to implement yet core to a chat app. Therefore, XMPP is a good choice for chat apps. Roadmap of Tutorial Before we move on to explaining things and to code, a little review of what this tutorial will cover will be good. 1) How To Run A Ejabberd Server On Your Mac/Localhost We will be running a ejabberd xmpp server for our chat app. Steps to install and configure it will be given. 2) Registering A User Through Terminal It’s good to get familiar with the working of server using terminal for future use. You can read and explore more on ejabberd site. 3) Using/Registering Account On Adium (A Jabber Client) To be able to chat between two user, we need to have our app (first client) and another client for user2. Adium will act as the second user 4) Log In The User On The Server With The Android App Connecting and Login with the server plus handling errors will be explained. 5) Sending To/Fro Message To The Other User Through Android App. This part will have us code for messages coming from other user as well as sending message from the app. http://shubhank101.github.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 1/15 Go ahead and download the ejabbered community server installer from here.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial Step 1. • For the server name ­ you can use localhost http://shubhank101. • Run the Setup • Install it to the Default Path which will be something like  Applications/ejabbered/  on the Mac OS X. Openfire being a popular alternative. There are several xmpp servers available out there.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 2/15 .github. Downloading ejabbered We will be using ejabbered server for our app. 3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • Use Admin as the admin name and 12345 for the password for now http://shubhank101.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 3/15 .github. github.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 4/15 .3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial http://shubhank101.  Click done at the final screen.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 5/15 .github.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • ejabbered will install now. http://shubhank101. For version 16.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial Step 2. Registering A User Through Terminal Steps are also explained here for your reference https://docs.im/developer/install­osx/.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 6/15 . The command will be  cd /Applications/ejabberd‐16. • Open a Terminal folder and cd into the ejabberd path.06 http://shubhank101.github.06 in Mac OS X.ejabberd. github.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • To run the server use the command.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 7/15 .  sbin/ejabberdctl live http://shubhank101. im/.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 8/15 . we will be using a jabber client to connect to our server and check out how it performs. Install it and launch it. close any account assitant setup if it comes. The one i have used  bin/ejabberdctl register user1 localhost pass Step 3. Go ahead and download Adium from https://adium. Using/Registering Account On Adium (A Jabber Client) Since our server is setup using a XMPP based protocol.github.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • To register the user ­> use the syntax register username servername pass. Now you will see a screen something like this : http://shubhank101. http://shubhank101.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 9/15 .github.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • Now open Adium preferences from the top menu. github.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 10/15 .3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • In Account click the add button at the bottom left and select xmpp jabber account http://shubhank101. 3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial • Enter the username@host and then a pass ­ i kept 123 • A alert will come with the text “Requested URL was not found on this server”: Click ok.e localhost in our case http://shubhank101.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 11/15 . Now in the server ­ enter the host name i.github. github. time to move to Android Studio to build the chat app. Open up Studio and create a new basic activity template project named XMPP.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 12/15 .3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial Clicking request new account will now register this and you will have the adium client setup for this. Below is the gradle dependecies we will be using: http://shubhank101. Step 4. It is a open source. Log In The User On The Server With The Android App Now with our server setup and adium running with the second user. well documented client API for xmpp. Setup Gradle for Smack We will be using SMACK for connecting to the server.                   }  http://shubhank101..              AbstractXMPPConnection conn1 = new XMPPTCPConnection(config).      }      private class MyLoginTask extends AsyncTask<String.jar'])      testCompile 'junit:junit:4.              try {                  conn1.execute("").          setContentView(R.setPort(5222)                      .12'      compile 'com.setServiceName("localhost")                     .setSecurityMode(ConnectionConfiguration.github.          task.setDebuggerEnabled(true) // to view what's happening in detail                      .3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial dependencies {      compile fileTree(dir: 'libs'. params) {              // Create a connection to the jabber.3.2")                      .activity_main).w("app".SecurityMode.                  if(conn1.org server. String> {          @Override          protected String doInBackground(String.isConnected()) {                      Log. include: ['*.1.2.0.igniterealtime.setUsernameAndPassword("user1".build(). MainActivity Code       public class MainActivity extends AppCompatActivity {      @Override      protected void onCreate(Bundle savedInstanceState) {          super.          MyLoginTask task = new MyLoginTask()..layout.              XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration. "conn done").builder                     .onCreate(savedInstanceState).disabled)                      .igniterealtime.android.0'      compile "org.support:appcompat‐v7:23. "123")                      .1.smack:smack‐android‐extensions:4.0"      // Optional for XMPPTCPConnection      compile "org. String.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 13/15 .setHost("10.0"  } Sync your project.connect().smack:smack‐tcp:4. Run the app and if everything has been followed correctly.2.              }              return "". Next we set the default xmpp port of 5222 and  setDebuggerEnabled(true)  so that we receive proper logs of any connection failure/success. Add the following code in the  isAuthenticated  condition of the asynctask.2 instead of localhost since android emulator refers localhost to itself so we need to use 10. The host set is 10.0.github. fields we set are usernameAndPassword of user1 we created using terminal. With this config we create our connection object and try to connect to our server and subsequently login. Step 5. e. you will see the auth Done log in the console. Recieve Message From The Other User Through Android App. Security is disabled and the service name for our connection purpose we specify as localhost.3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial                 conn1.2. Calling  conn1.io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 14/15 . "Auth done").toString()).                  }              }              catch (Exception e) {                  Log.                                    if(conn1. In the  doInBackground  we create our config object.          }          @Override          protected void onPostExecute(String result) {          }      }  } We create a AsyncTask class  MyLoginTask  to do the network request and authentication in background thread and call it from our  onCreate()  method. All of the connection and auth call are wrapped in a try catch so that we can catch any failure and take proper action.login().w("app".2 for our emulator to connect to Mac’s localhost.0. http://shubhank101.isAuthenticated()  will return us whether the user has been authenticated with the server.isAuthenticated()) {                      Log.w("app".  Message message) {                            System. boolean createdLocally)                {                    chat.addChatListener(            new ChatManagerListener() {                @Override                public void chatCreated(Chat chat.github.                }            }). http://shubhank101. Conclusion Thank you for reading this far. Now run the app and send message to user1 from Adium client. "Auth done").out.                        }                    }).w("app". chat.toString()).3/9/2017 Chat Application Using Xmpp Smack Api Android Tutorial if(conn1.        chatManager.  } Here we add a  chatListener  to our ChatManager class provided by Smack for the current xmpp connection.w("app".getBody() : "NULL")).io/iOSAndroidChaosOverFlow/2016/10/Chat­Application­Using­XMPP­Smack­API­Android­Tutorial 15/15 . time stamp etc. We override the chat created method which will be called for each conversation with different users. In the  chatCreated  method we add a  ChatMessageListener which provides us with the message body of the chat and many other attributes such as user name.                    Log.        ChatManager chatManager = ChatManager. You shall see in the logs proper message being received.addMessageListener(new ChatMessageListener()                   {                        @Override                        public void processMessage(Chat chat.println("Received message: "                                    + (message != null ? message. For any questions you are welcome to ask in our chat room.getInstanceFor(conn1).isAuthenticated())    {        Log.
Copyright © 2024 DOKUMEN.SITE Inc.