繁体   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