我正在尝试通过XMPP服务器使用SMACK API连接到gmail。但得到了
错误:使用PLAIN机制
时SASL身份验证失败
您可以查看代码的一瞥。我是从网上得到的
ConnectionConfiguration connConfig = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com");
connection = new XMPPConnection(connConfig);
connection.connect();
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
我检查了smack调试窗口。它用XML表示:
< invalid-authzid />
我已经在gmail上有帐户了,我的gtalk也在运行。
答案 0 :(得分:9)
您需要在连接viz之前设置身份验证
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
必须出现在connection.connect()
之前。
查看我的blog。
答案 1 :(得分:1)
ConnectionConfiguration cc = new ConnectionConfiguration(
"vietnam.agilemobile.com", 5222, vietnam.agilemobile.com");
XMPPConnection connection = new XMPPConnection(cc);
try {
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
connection.connect();
Log.e("LOGIN", "" + 111);
// You have to put this code before you login
Log.e("LOGIN", "" + 222);
// You have to specify your gmail addres WITH @gmail.com at the end
connection.login("nemodo", "123456", "resource");
Log.e("LOGIN", "" + 333);
// See if you are authenticated
System.out.println(connection.isAuthenticated());
} catch (XMPPException e1) {
e1.printStackTrace();
}
我也犯了这个错误,但我无法工作。
答案 2 :(得分:0)
对于最初寻求并回答了这么多年的人来说,最近我可以通过在authzid
上显式设置XMPPTCPConnectionConfiguration
值来克服此身份验证错误。 / p>
我遇到了一个问题,即使某些客户端XMPP服务器都使用SASL PLAIN身份验证,我的连接配置也可以正常工作。经过一些故障排除后,我了解到那些失败的期望值是authzid
。调整好代码以进行设置后,它既可以在以前的环境中工作,也可以在失败的环境中工作。
这是我建立连接配置的方式:
XMPPTCPConnectionConfiguration.builder()
.setHost(XMPP_DOMAIN)
.setXmppDomain(XMPP_DOMAIN)
.setPort(XMPP_PORT)
.setCompressionEnabled(true) // optional, not all servers will support this
.setUsernameAndPassword(XMPP_USER, XMPP_PASSWORD)
.setResource(XMPP_RESOURCE)
.setAuthzid(JidCreate.entityBareFrom(String.format("%s@%s", XMPP_USER, XMPP_DOMAIN))) // <-- this was the change I needed
.build();
特别是我需要添加以下行:
.setAuthzid(JidCreate.entityBareFrom(String.format("%s@%s", XMPP_USER, XMPP_DOMAIN)))