簡體   English   中英

無法在 Smack 和 Openfire 中進行登錄

[英]Cannot Make Login Work in Smack and Openfire

我一直在關注我在 GitHub 上找到的本教程,以嘗試連接到 OpenFire 服務器。 我以前使用過 spark,現在正在嘗試使用 Smack api 創建一個簡單的 android 應用程序,以便在旅途中使用。 我遵循了一些教程,最終從 Github 偶然發現了這個: https : //github.com/axcl/SMACK-API-Android-Demo

問題是當我單擊登錄按鈕時,我在 OpenFire 管理員面板中看不到我的在線狀態。

這是代碼: Myxmpp.java

public class Myxmpp {
private static final String DOMAIN = "192.168.2.14";
private static final String HOST = "192.168.2.14";
private static final int PORT = 5222;
private String userName ="";
private String passWord = "";
AbstractXMPPConnection connection ;
ChatManager chatmanager ;
Chat newChat;
XMPPConnectionListener connectionListener = new XMPPConnectionListener();
private boolean connected;
private boolean isToasted;
private boolean chat_created;
private boolean loggedin;


//Initialize
public void init(String userId,String pwd ) {
    Log.i("XMPP", "Initializing!");
    this.userName = userId;
    this.passWord = pwd;
    XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
    configBuilder.setUsernameAndPassword(userName, passWord);
    configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    configBuilder.setResource("Android");
    configBuilder.setServiceName(DOMAIN);
    configBuilder.setHost(HOST);
    configBuilder.setPort(PORT);
    //configBuilder.setDebuggerEnabled(true);
    connection = new XMPPTCPConnection(configBuilder.build());
    connection.addConnectionListener(connectionListener);

}

// Disconnect Function
public void disconnectConnection(){

    new Thread(new Runnable() {
        @Override
        public void run() {
            connection.disconnect();
        }
    }).start();
}

public void connectConnection()
{
    AsyncTask<Void, Void, Boolean> connectionThread = new AsyncTask<Void, Void, Boolean>() {

        @Override
        protected Boolean doInBackground(Void... arg0) {

            // Create a connection
            try {
                connection.connect();
                login();
                connected = true;

            } catch (IOException e) {
            } catch (SmackException e) {

            } catch (XMPPException e) {
            }

            return null;
        }
    };
    connectionThread.execute();
}


public void sendMsg() {
    if (connection.isConnected()== true) {
        // Assume we've created an XMPPConnection name "connection"._
        chatmanager = ChatManager.getInstanceFor(connection);
        newChat = chatmanager.createChat("concurer@nimbuzz.com");

        try {
            newChat.sendMessage("Howdy!");
        } catch (SmackException.NotConnectedException e) {
            e.printStackTrace();
        }
    }
}

public void login() {

    try {
        connection.login(userName, passWord);
        //Log.i("LOGIN", "Yey! We're connected to the Xmpp server!");

    } catch (XMPPException | SmackException | IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
    }

}



//Connection Listener to check connection state
public class XMPPConnectionListener implements ConnectionListener {
    @Override
    public void connected(final XMPPConnection connection) {

        Log.d("xmpp", "Connected!");
        connected = true;
        if (!connection.isAuthenticated()) {
            login();
        }
    }

    @Override
    public void connectionClosed() {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub


                }
            });
        Log.d("xmpp", "ConnectionCLosed!");
        connected = false;
        chat_created = false;
        loggedin = false;
    }

    @Override
    public void connectionClosedOnError(Exception arg0) {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {

                }
            });
        Log.d("xmpp", "ConnectionClosedOn Error!");
        connected = false;

        chat_created = false;
        loggedin = false;
    }

    @Override
    public void reconnectingIn(int arg0) {

        Log.d("xmpp", "Reconnectingin " + arg0);

        loggedin = false;
    }

    @Override
    public void reconnectionFailed(Exception arg0) {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {



                }
            });
        Log.d("xmpp", "ReconnectionFailed!");
        connected = false;

        chat_created = false;
        loggedin = false;
    }

    @Override
    public void reconnectionSuccessful() {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub



                }
            });
        Log.d("xmpp", "ReconnectionSuccessful");
        connected = true;

        chat_created = false;
        loggedin = false;
    }

    @Override
    public void authenticated(XMPPConnection arg0, boolean arg1) {
        Log.d("xmpp", "Authenticated!");
        loggedin = true;

        chat_created = false;
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }).start();
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub



                }
            });
    }
}

}

連接Xmpp.java

public class ConnectXmpp extends Service {

    private String userName;
    private String passWord;
    private Myxmpp xmpp = new Myxmpp();

    public ConnectXmpp() {
    }

    @Override
    public void onCreate() {
        super.onCreate();

    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        return new Localbinder<ConnectXmpp>(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        if(intent != null){
            userName = intent.getStringExtra("user");
            passWord = intent.getStringExtra("pwd");
            xmpp.init(userName, passWord);
            xmpp.connectConnection();
        }

        return 0;
    }

    @Override
    public void onDestroy() {
        xmpp.disconnectConnection();
        super.onDestroy();
    }

主要活動

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";
    private ConnectXmpp mService;
    private View view;
    private boolean mBounded;
    private final ServiceConnection mConnection = new ServiceConnection() {

        @SuppressWarnings("unchecked")
        @Override
        public void onServiceConnected(final ComponentName name,
                                       final IBinder service) {
            mService = ((Localbinder<ConnectXmpp>) service).getService();
            mBounded = true;
            Log.d(TAG, "onServiceConnected");
        }

        @Override
        public void onServiceDisconnected(final ComponentName name) {
            mService = null;
            mBounded = false;
            Log.d(TAG, "onServiceDisconnected");
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    //Click Handler for Login Button
    public void onClickLoginBtn(View view)
    {
        try {
            EditText userId = (EditText) findViewById(R.id.username);
            EditText userPwd = (EditText) findViewById(R.id.password);
            String userName = userId.getText().toString();
            String passWord = userPwd.getText().toString();
            Intent intent = new Intent(getBaseContext(),ConnectXmpp.class );
            intent.putExtra("user",userName);
            intent.putExtra("pwd",passWord);
            startService(intent);



            //mService.connectConnection(intent);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }




}

我知道這很多,但我真的對整個 XMPP 的東西感到困惑。 任何有關如何連接已注冊用戶的幫助將不勝感激。 謝謝

您好,我已經檢查了您的代碼,您確定您的域名和主機名相同嗎? 根據您的問題,您無法使用應用程序使用 xmpp 登錄。

試試這個 github 示例。這讓我很受用。所以如果你有任何問題,我可以幫助你。

https://github.com/saveendhiman/XMPPSample_Studio

謝謝你希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM