Android 通过XMPP向gmail帐户发送即时消息
我最近阅读了有关XMPP的文章,我想制作一个可以发送和接收IM消息的应用程序,这样我就可以获得一些使用XMPP的经验。问题是我几乎不知道如何使用XMPP或如何将其与Android一起使用。我想知道是否有人能为我指出如何在Android上使用XMPP的正确方向Android 通过XMPP向gmail帐户发送即时消息,android,xmpp,Android,Xmpp,我最近阅读了有关XMPP的文章,我想制作一个可以发送和接收IM消息的应用程序,这样我就可以获得一些使用XMPP的经验。问题是我几乎不知道如何使用XMPP或如何将其与Android一起使用。我想知道是否有人能为我指出如何在Android上使用XMPP的正确方向 谢谢 从XMPP开始,您必须 安装(聊天服务器) 将XMPP客户端jar添加到Android应用程序中 像这样实现PacketListener } 4.接下来,您需要实现以优雅地处理连接失败 公共类XMPPConnectionFailedE
谢谢 从XMPP开始,您必须
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String toString() {
return "The Chat server or the Connection to the chat server failed";
}
}
5.接下来,您需要实际连接到XMPP服务器的类,下面是一个实现
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.PrivateDataManager;
import com.test.chat.MyPacketListener;
import com.testchat.exception.XMPPConnectionFailedException;
public class ChatUtil {
public final static String SERVER_HOST = "serverip";
public final static int SERVER_PORT = 5222;
public final static String SERVICE_NAME = "p2547738.pubip.serverbeach.com";
private static XMPPConnection xmppConnection;
public static String CURRENT_RECIPIENT_CHAT_ID;
public static String CURRENT_RECIPIENT_NAME;
public static final String IN = "IN";
public static final String OUT = "OUT";
public static String CURRENT_RECIPIENT_FB_IMAGE;
public static boolean STARTED = false;
public static XMPPConnection getXmppConnection(String username) throws XMPPConnectionFailedException {
try {
if (xmppConnection == null) {
ConnectionConfiguration config = new ConnectionConfiguration(SERVER_HOST, SERVER_PORT, SERVICE_NAME);
xmppConnection = new XMPPConnection(config);
}
if (!xmppConnection.isConnected()) {
xmppConnection.connect();
}
if (!xmppConnection.isAuthenticated()) {
xmppConnection.login(username, "123");
ProviderManager pm = ProviderManager.getInstance();
pm.addIQProvider("query", "jabber:iq:private",new PrivateDataManager.PrivateDataIQProvider());
PacketFilter packetFilter = new MessageTypeFilter(Message.Type.chat);
xmppConnection.addConnectionListener(new ConnectionListener() {
@Override
public void reconnectionSuccessful() {
System.out.println("reconnectionSuccessful");
}
@Override
public void reconnectionFailed(Exception arg0) {
System.out.println("reconnectionFailed");
}
@Override
public void reconnectingIn(int arg0) {
System.out.println("reconnectingIn");
}
@Override
public void connectionClosedOnError(Exception arg0) {
System.out.println("connectionClosedOnError");
}
@Override
public void connectionClosed() {
System.out.println("connectionClosed");
}
});
MyPacketListener listener = new MyPacketListener();
xmppConnection.addPacketListener(shareFareChatListener,packetFilter);
}
Presence presence = new Presence(Presence.Type.available);
xmppConnection.sendPacket(presence);
ChatUtil.STARTED = true;
} catch (Exception e) {
throw new XMPPConnectionFailedException();
}
return xmppConnection;
}
}
6.最后,您尝试使用用于注册用户的凭据将您的连接到XMPP服务器
私有void connectToChat(最终字符串昵称){
System.out.println(“连接到聊天室…”);
类ConnectToChatAsync扩展了AsyncTask{
@Override
protected Integer doInBackground(Context... params) {
try {
Listener.currentActivity = context;
ChatUtil.getXmppConnection(nickname);
return SERVER_SUCCESS_RESPONSE;
}
catch ( XMPPConnectionFailedException e) {
System.err.println("XMPPConnectionFailedException : " + e);
}
return CONNECTIVITY_PROBLEM;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(result == CONNECTIVITY_PROBLEM){
// ApplicationDialog.showFeedBackDialog(ProjectConstants.XMPP_CHAT_FAILED, context);
}
}
}
new ConnectToChatAsync().execute();
}
这应该在编程上解决,您所要做的就是设置Openfire环境
这些链接应该可以帮助您了解该部门
非常感谢您的实施!不过我不太了解openfire的用法。我能不能只使用google XMPP服务器和端口建立连接,然后发送消息?另外,我已经读到,我们需要使用aSmack而不是Android的Smack。Smack jar可以用吗?您是否浏览了最后两个链接并尝试了t我想Google已经从XMPP服务器转向它的聊天引擎,所以我建议你最好花点时间来了解你正在做的事情的基本知识,这样在任何情况下,如果你陷入一些陈规陋习,你都不会被卡住。我使用了smack.jar,它对我来说很好,但Asmack应该尽可能做到这一点
@Override
protected Integer doInBackground(Context... params) {
try {
Listener.currentActivity = context;
ChatUtil.getXmppConnection(nickname);
return SERVER_SUCCESS_RESPONSE;
}
catch ( XMPPConnectionFailedException e) {
System.err.println("XMPPConnectionFailedException : " + e);
}
return CONNECTIVITY_PROBLEM;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(result == CONNECTIVITY_PROBLEM){
// ApplicationDialog.showFeedBackDialog(ProjectConstants.XMPP_CHAT_FAILED, context);
}
}
}
new ConnectToChatAsync().execute();
}