我想在java中创建一个简单的XMPP客户端,与其他客户端共享他的位置(XEP-0080).我已经知道我可以将smack库用于XMPP并且它支持PEP,这是XEP-0080所需要的.有没有人有一个例子如何实现这个或任何指针,我没有找到任何使用谷歌.
提前致谢.
您可以使用RosterEntry
获取联系人的姓名.但是我如何更改自己的名字,当他们这样做时,我的联系人会看到它
RosterEntry entry = roster.getEntries("myuser");
entry.getName(); // It needs to show my updated name
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我正在使用asmack作为库和Android平台上的聊天应用程序.是否有任何方法,在添加名册中的朋友之前,我可以检查服务器上是否存在该朋友?
我正在使用Xabber开源项目,并且能够创建一个新组,但它总是说:这个房间从入口锁定,直到配置得到确认.我试图设置默认配置,但它抛出异常:401未经授权.究竟是什么问题.
final MultiUserChat multiUserChat;
try {
multiUserChat = new MultiUserChat(xmppConnection, room);
// CHANAKYA: set default config for the MUC
// Send an empty room configuration form which indicates that we want
// an instant room
try {
multiUserChat.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
} catch (XMPPException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 因此,我使用Smack运行我的聊天机器人来进行传说联盟,但是我甚至无法让机器人显示,因为缺少类似错误,我似乎无法弄明白.下面的代码和错误,感谢您的帮助,-Nick
另外:是的,这段代码来自一个例子,因为当我自己尝试时,我仍然遇到了同样的错误.
package com.nickparks.bot;
import java.util.*;
import java.io.*;
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
public class JabberSmackAPI implements MessageListener{
XMPPConnection connection;
public void login(String userName, String password) throws XMPPException
{
ConnectionConfiguration config = new ConnectionConfiguration("chat.na1.lol.riotgames.com",5223);
connection = new XMPPTCPConnection(config);
try {
connection.connect();
connection.login(userName, password, "xiff");
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void displayBuddyList()
{
Roster roster = connection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
System.out.println("\n\n" + entries.size() + " buddy(ies):");
for(RosterEntry r:entries)
{ …
Run Code Online (Sandbox Code Playgroud) 我正在使用asmack库开发Android中的聊天应用程序.我正在使用EJABBERD XMPP服务器.我已经完成了一些功能,包括登录,注册和名册条目等,
现在我想从XMPP服务器搜索注册用户发送好友请求.我用Google搜索并尝试了一些代码,但仍未获得成功.
我正在使用以下代码从XMPP服务器搜索用户.
UserSearchManager userSearchManager = new UserSearchManager(connection);
Form searchForm = userSearchManager.getSearchForm("search." + connection.getServiceName());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Name", true);
answerForm.setAnswer("search", "test"); // here i'm passsing the Text value to search
ReportedData resultData;
resultData = userSearchManager.getSearchResults(answerForm, "search."+ connection.getServiceName());
Iterator<Row> it = resultData.getRows();
Row row = null;
while (it.hasNext()) {
String value = it.next().toString();
Log.i("Iteartor values......", " " + value);
System.out.println("Jabber_id :" + row.getValues("jid").next().toString());
System.out.println("Name :" + row.getValues("Name").next().toString());
row = it.next();
}
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码.我在LogCat中收到以下错误.
service-unavailable(503)
at org.jivesoftware.smackx.search.UserSearch.getSearchForm(UserSearch.java:84)
at org.jivesoftware.smackx.search.UserSearchManager.getSearchForm(UserSearchManager.java:73)
Run Code Online (Sandbox Code Playgroud)
要获得搜索结果需要进行哪些更改?
ejabberd.cfg …
我正在使用Smack和Openfire服务器作为聊天客户端,所有工作都很好,比如聊天,发送新用户的邀请,获取可用用户列表等等.我不知道如果连接是什么怎么办在粘性服务中我添加了一个连接监听器连接和连接断开连接,让我们说"Internet连接"
我正在使用以下代码作为connectionlistener.
connection.addConnectionListener(new ConnectionListener() {
@Override
public void reconnectionSuccessful() {
Log.i("","Successfully reconnected to the XMPP server.");
}
@Override
public void reconnectionFailed(Exception arg0) {
Log.i("","Failed to reconnect to the XMPP server.");
}
@Override
public void reconnectingIn(int seconds) {
Log.i("","Reconnecting in " + seconds + " seconds.");
}
@Override
public void connectionClosedOnError(Exception arg0) {
Log.i("","Connection to XMPP server was lost.");
Log.v("ONMESSAGE", "Error was " + arg0.toString() + "and Now connecting");
}
@Override
public void connectionClosed() {
Log.i("","XMPP connection was closed.");
}
}); …
Run Code Online (Sandbox Code Playgroud) 我一直试图在Android中使用smack 4.1 beta 2来获取名单条目.
https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-UpgradeGuide 来自以上链接的报价..
"Roster现在遵循Manager模式(使用Roster.instanceFor获取实例,不再使用XMPPConnection.getRoster)"
首先,我无法获得"名册"对象,我导入的库可能没有该包,或者我在这里想念任何库?
我使用上面链接中提到的所有库.
任何人都可以帮助我使用smack 4.1获取名册条目吗?
谢谢
我有一个Android应用程序,它有一个聊天客户端作为其功能之一.聊天客户端使用基于Android 的Smack库的XMPP,并在后台运行Openfire作为XMPP服务器.使用BOSH建立连接整个XMPP连接处理实现为一种服务,即使应用程序的活动不在前台,也可以在后台运行和监听传入消息.到目前为止,一切都很好.
唯一的问题似乎是睡眠模式.在模拟器中(设置为"保持唤醒"时)或使用手机时,XMPP连接正在保持,应用程序可以发送和接收消息.但是,一旦手机进入睡眠模式,XMPP连接就会中断 - 我可以在Openfire服务器的管理控制台中看到用户离线.直观地说,我想一直接收消息,例如WhatsApp.
当然,我在网上搜索过Stackoverflow,但我无法得到明确的答案.用例通常似乎是必须定期执行任务,例如每小时一次.但在聊天客户端的情况下,这似乎并不强烈.因为我认为这是一个常见的用例 - 毕竟,有很多聊天应用程序或带有聊天功能的应用程序 - 这些是我的问题:
如何在手机休眠时更改/扩展我可以收到聊天消息的应用程序?
我偶然发现了WakeLock
.这是要走的路还是这些不适合我的用例?
自从Lollipop以来,还有JobScheduler
自己使用的API WakeLock
.好点?
例如,WhatsApp如何处理这种情况?
另请注意:我使用模拟器进行调试时出现睡眠模式问题.当我在模拟器中关闭"保持唤醒"时,屏幕在1+分钟后变黑并且XMPP连接中断.但我不知道如何在模拟器变黑后重新唤醒/切换模拟器.Android Studio实际上告诉我,设备或其他东西已经消失,我必须重新启动模拟器.
我正在尝试使用getMembers()获取成员列表但我得到'错误代码:403,forbidden-auth'试图获取成员列表的用户是一个组的成员但是如果我做的话所有者的相同操作,他可以成功获得一个列表.
这是我获取成员列表的配置 'muc#roomconfig_getmemberlist' : [moderator, participants, visitor]
并且在xep-045中也非常清楚地提到"服务应该也应该将成员列表返回给仅限成员的房间中的任何占用者;即,当房间中的成员请求成员列表时,它不应该产生错误."
那我在这里缺少什么?
这些是捕获数据包
SENT(0):
<iq to='membersonlygroup@muc.domain' from='92123456@domain/Resource' id='1BO5n-74' type='get'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member'></item></query></iq>
Run Code Online (Sandbox Code Playgroud)
SMACK:RECV(0):
`<iq from='membersonlygroup@muc.domain' to='92123456@domain/Resource' id='1BO5n-74' type='error'><query xmlns='http://jabber.org/protocol/muc#admin'><item affiliation='member'/></query><error code='403' type='auth'><forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Administrator privileges required</text></error></iq><r xmlns='urn:xmpp:sm:3'/>`
Run Code Online (Sandbox Code Playgroud)
编辑:还有 一件事是成员有参与者的角色,但我注意到在这种情况下角色值为空.