我可以通过Smack API获取我朋友列表中的在线用户吗?可能吗?
我正在开发用户之间聊天的应用程序.我已经成功创建了聊天应用程序示例,只需输入朋友的名字并发送聊天,但现在我想要在线好友列表.
请先在这里发帖,请保持温柔.我正在使用Smack库构建一个Facebook聊天客户端.我正在使用X-FACEBOOK-PLATFORM方法,以免保存任何密码.我使用oauth 1.0正常工作,并希望将其更改为2.0,导致10月1日截止日期; p.根据我的理解,为了迁移到2.0,我必须做的唯一事情是删除"sig"和"session_key"参数并添加"access_token"参数,但我得到的是"SASL身份验证X-FACEBOOK- PLATFORM失败:未经授权:".我正在使用这个自定义SASLMechanism类:
package smackresearching;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import javax.security.sasl.Sasl;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.sasl.SASLMechanism;
import org.jivesoftware.smack.util.Base64;
public class SASLXFacebookPlatformMechanism extends SASLMechanism {
public static final String NAME = "X-FACEBOOK-PLATFORM";
private String apiKey = "";
private String accessToken = "";
/**
* Constructor.
*/
public SASLXFacebookPlatformMechanism(SASLAuthentication saslAuthentication) {
super(saslAuthentication);
}
@Override
protected void authenticate() throws IOException, XMPPException {
// Send the authentication to the server
getSASLAuthentication().send(new AuthMechanism(getName(), ""));
}
@Override
public …
Run Code Online (Sandbox Code Playgroud) 我正在开发基于asmack lib的Android上的聊天应用程序.我在ListView上显示所有用户,但我使用图像显示在线/离线用户.但它只返回离线图像,即使用户在线,这里是我的代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.buddies);
Controller.getInstance().roster = Controller.getInstance().connection.getRoster();
// ArrayList<Buddy> buddies = new ArrayList<Buddy>();
Collection<RosterEntry> entries = Controller.getInstance().roster.getEntries();
Controller.getInstance().buddyList = new Buddy[entries.size()];
int i = 0;
for (RosterEntry r : entries) {
Buddy bud = new Buddy();
VCard card = new VCard();
try {
ProviderManager.getInstance().addIQProvider("vCard",
"vcard-temp", new VCardProvider());
card.load(Controller.getInstance().connection, r.getUser());
} catch (XMPPException e) {
Log.e("ChatOnAndroid", e.getMessage() + " " + r.getUser() + " "
+ e.getLocalizedMessage());
}
bud.jid …
Run Code Online (Sandbox Code Playgroud) 我已经在本地计算机上设置了我的开火(jabber服务器),其中包含两个用户testuser1和testuser2.使用Spark客户端,两个用户都可以毫无问题地进行聊天,这很不错.
openfire IP -192.168.1.65
我想使用smack API(3.3.0)发送和接收消息.我已经写了发送方端代码来发送消息(使用testuser1)并在testuser2端接收到Spark客户端(带有testuser2)消息进行测试,但是当我尝试使用java代码接收发送方消息时,我无法接收这些发布消息.
Sender.java
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.MessageListener;
public class Sender
{
public static void main(String a[]) throws XMPPException, InterruptedException
{
XMPPConnection connection = new XMPPConnection("192.168.1.65");
System.out.println(connection);
connection.connect();
connection.login("testuser1", "test123");
Chat chat = connection.getChatManager().createChat("testuser2@sameek", new MessageListener() {
public void processMessage(Chat chat, Message message) {
// Print out any messages we get back to standard out.
System.out.println("Received message: " + message);
}
});
chat.sendMessage("Howdy test1!");
while (true) {
Thread.sleep(50);
}
}
} …
Run Code Online (Sandbox Code Playgroud) 嗨,我是新手:我已经设置了一个Openfire服务器并使用Spark IM来测试它.但对于Android应用程序代码,会话中用户的JID应该是什么:
我尝试过用户名@ ip_address,用户名@ ip_address/Smack,用户名@ ip_address/Spark.请参阅下面的图片并提供帮助:
什么是这个.please帮助的解决方案.
我正在尝试设置XMPP聊天应用程序.现在我可以在gmail和gmail之间发送消息.我想要键入通知,例如用户键入的内容或用户正在键入,,,就像那样.我正在使用主类和Message侦听器类.
主类
public class XMPPChatDemoActivity extends Activity {
//Object of Custom class
MessageListener messageListener = new MessageListenerImpl();
private void setConnection(XMPPConnection connection) {
this.connection = connection;
ChatManager chatmanager = connection.getChatManager();
Chat newChat = chatmanager.createChat("user@gmail.com", messageListener);
try {
newChat.sendMessage("Howdy!");
}
catch (XMPPException e) {
System.out.println("Error Delivering block");
}
Run Code Online (Sandbox Code Playgroud)
消息监听器类
public class MessageListenerImpl implements MessageListener , ChatStateListener{
@Override
public void stateChanged(Chat arg0, ChatState arg1) {
// TODO Auto-generated method stub
}
@Override
public void processMessage(Chat arg0, Message arg1) { …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,聊天是一个模块,聊天我正在使用xmpp.当我发送消息时,我使用DeliveryReceiptManager获取该消息传递状态.
DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();
DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener()
{
@Override
public void onReceiptReceived(String arg0, String arg1, String arg2)
{
Log.v("app", arg0 + ", " + arg1 + ", " + arg2);
}
});
Run Code Online (Sandbox Code Playgroud)
但我需要证明该消息是用户READ或不像whatsApp蓝色tickmark,任何人都可以帮助我,我在这里被击中.如何实现此消息读取概念.
提前致谢.
有必要将0313 XEP(0.2)http://xmpp.org/extensions/attic/xep-0313-0.2.html#sect-idp616432附加 到SMACK/ASMACK中.我为此创建了PacketExtension.
public class Archive313 implements PacketExtension {
static final public String NAMESPACE = "urn:xmpp:mam:tmp";
static final public String ELEMENT = "result";
private String Id;
private String Queryid;
private String Stamp;
private String To;
private String From;
private String Type;
private String Body;
public Archive313(String id, String queryid, String stamp, String to, String from, String type, String body) {
Id = id;
Queryid = queryid;
Stamp = stamp;
To = to;
From = from;
Type = type; …
Run Code Online (Sandbox Code Playgroud) 我启动openFire并用spark测试它一切正常但是当我尝试在android studio中连接smack 4.2.0时出现此错误:
Ljavax /命名/目录/ InitialDirContext;
我的依赖是这样的:
编译"org.igniterealtime.smack:smack-java7:4.2.0"compile"org.igniterealtime.smack:smack -tcp:4.2.0"compile"org.igniterealtime.smack:smack-im:4.2.0"compile" org.igniterealtime.smack:smack-extensions:4.2.0"compile"org.igniterealtime.smack:smack-android-extensions:4.2.0"compile"org.igniterealtime.smack:smack-bosh:4.2.0"
当从依赖项中删除这个:"编译org.igniterealtime.smack:smack-java7:4.2.0"并添加它:compile"org.igniterealtime.smack:smack-android:4.2.0"我的依赖项变成这样:
编译'com.android.support:appcompat-v7:24.0.0'compile"org.igniterealtime.smack:smack-android:4.2.0"compile"org.igniterealtime.smack:smack -tcp:4.2.0"compile" org.igniterealtime.smack:smack-im:4.2.0"compile"org.igniterealtime.smack:smack-extensions:4.2.0"compile"org.igniterealtime.smack:smack-android-extensions:4.2.0"compile" org.igniterealtime.smack:咂嘴波什:4.2.0"
我收到此错误:
org.jivesoftware.smack.SmackException $ ConnectionException:以下地址失败:'192.168.209.2:5222'失败,原因是:de.measite.minidns.hla.ResolutionUnsuccessfulException:要求192.168.209.2.IN A产生错误响应NX_DOMAIN,'192.168.209.2:5222'失败,原因是:de.measite.minidns.hla.ResolutionUnsuccessfulException:要求192.168.209.2.在AAAA中产生了错误响应NX_DOMAIN
当我尝试conn.connect()时出现错误的代码部分是这样的:
XMPPTCPConnectionConfiguration config = null;
try {
config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword("admin", "thepass")
.setXmppDomain("192.168.1.3")
.setHost("192.168.209.2")
.setPort(5222)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
} catch (Exception e) {
e.printStackTrace();
}
AbstractXMPPConnection conn1 = new XMPPTCPConnection(config);
conn1.setReplyTimeout(60000);
conn1.setPacketReplyTimeout(60000);
conn1.connect();
Run Code Online (Sandbox Code Playgroud) 我将smack升级到4.2.0后,我遇到了连接问题.
The following addresses failed: 'xxxx:5222' failed because:
de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for xxxx. IN A yielded an error response NX_DOMAIN, '52.90.233.38:5222' failed because: de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for xxxx. IN AAAA yielded an error response NX_DOMAIN
Run Code Online (Sandbox Code Playgroud)
在连接配置构建器中设置主机时会发生此问题.
例如:
.setHost(ServiceConstants.CHAT_SERVER)
Run Code Online (Sandbox Code Playgroud)
请参阅https://github.com/igniterealtime/Smack/wiki/Smack-4.2-Readme-and-Upgrade-Guide
这是我的最终配置,它在Davood Falahati帮助之后起作用!
InetAddress inetAddress = InetAddress.getByName(ServiceConstants.CHAT_SERVER);
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder()
.setXmppDomain(JidCreate.from(ServiceConstants.CHAT_SERVER).asDomainBareJid())
.setPort(5222)
.setHostAddress(inetAddress)
.setDebuggerEnabled(true)
.setSendPresence(true)
Run Code Online (Sandbox Code Playgroud)