Bir OpenFire sunucusuna bağlantı kurmaya çalışmak için GitHub'da bulduğum bu eğiticiyi takip ediyorum. Ben daha önce kıvılcım kullandım ve şimdi yolda kullanmak için basit bir android uygulaması oluşturmak için Smack api kullanmaya çalışıyorum. Birkaç öğreticiler takip ve sonunda Github bu tökezledi var: https://github.com/axcl/SMACK-API-Android-DemoSmack ve Openfire'da Giriş Yapamazsınız
Sorun giriş butonu tıklandığında ben OpenFire yönetici panelinde çevrimiçi varlığımı görmüyoruz. İşte
kodudur: ConnectXmpp.java 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("[email protected]");
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
}
});
}
}
}
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();
}
Ana Etkinlik
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();
}
}
}
Bunun çok fazla olduğunu biliyorum, ancak bu XMPP ile ilgili gerçekten kafam karıştı. Önceden kayıtlı bir kullanıcıyı nasıl bağlayacağınız konusunda herhangi bir yardım çok takdir edilecektir. Teşekkürler