저는 asmack과 openfire를 처음 접했고 이에 대한 답변을 많이 보았지만 어디서나 찾을 수 없었습니다. asmack에서 내 계정에 로그인 할 때 오프라인 메시지를 검색하려면 어떻게합니까? 연결이 설정되면 내가 읽은 바로는asmack을 사용하여 오프라인 메시지 가져 오기
configure(ProviderManager.getInstance()); //configuring providers before creating a connection
ConnectionConfiguration connConfig = new ConnectionConfiguration(HOST, PORT);
connConfig.setSendPresence(false);
connection = new XMPPConnection (connConfig);
try {
connection.connect();
} catch (XMPPException ex) {
setConnection(null);
}
try {
connection.login(username, password);
try {
OfflineMessageManager offlineManager = new OfflineMessageManager(
connection);
Iterator<org.jivesoftware.smack.packet.Message> it = offlineManager
.getMessages();
System.out.println(offlineManager.supportsFlexibleRetrieval());
System.out.println("Number of offline messages:: " + offlineManager.getMessageCount());
Map<String,ArrayList<Message>> offlineMsgs = new HashMap<String,ArrayList<Message>>();
while (it.hasNext()) {
org.jivesoftware.smack.packet.Message message = it.next();
System.out
.println("receive offline messages, the Received from [" + message.getFrom()
+ "] the message:" + message.getBody());
String fromUser = message.getFrom().split("/")[0];
if(offlineMsgs.containsKey(fromUser))
{
offlineMsgs.get(fromUser).add(message);
}else{
ArrayList<Message> temp = new ArrayList<Message>();
temp.add(message);
offlineMsgs.put(fromUser, temp);
}
}
// Deal with a collection of offline messages ...
offlineManager.deleteMessages();
} catch (Exception e) {
Log.e("CATCH","OFFLINE");
e.printStackTrace();
}
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
setConnection(connection);//Packet Listener
// Set the status to available
} catch (XMPPException ex) {
setConnection(null);
}
는,의 Openfire는 자동으로 사용자에게 오프라인 메시지를 보냅니다 :
나는 다음과 같은 코드를 사용했습니다. (있는 경우) 즉, 로그인 한 후 패킷 수신기를 설정하면 메시지를 검색 할 수 있습니다. 그러나, 이것은 나를 위해 작동하지 않았다. 그래서 OfflineMessageManager를 사용해 보았습니다. 그것은 항상 메시지를 0으로 표시합니다. 나는 심지어 서버가 사용하는 mysql db에 로그인하고 오프라인 메시지 폴더를 확인했다. 메시지는 사용자가 로그인 할 때까지 존재합니다. 즉, 메시지가 전송되었지만 앱에서 검색하지 않는 것을 의미합니다. 나는 이것을 구현하는 방법을 찾을 수없는 것 같습니다. 누구든지 작동하는 솔루션이 있다면 크게 감사하겠습니다.
내 로그인 활동에 처음 로그인 한 다음 사용자 이름과 비밀번호를 기본 채팅 활동으로 보내고 다시 로그인했습니다. 메시지는 로그인하기 전에 설정된 패킷 수신기가없는 첫 번째 활동으로 전송되었습니다. 내가 거기에 로그인하기 전에 패킷 수신기를 설정하고 나는 모든 오프라인 메시지를 잘 볼 수 있습니다. – user3498348
감사합니다. 어리석은 해결책 인 것처럼 보이지만, 완벽하게 작동합니다. – OAEI
@ user3498348 오프라인 메시지를 검색 할 수 있습니까? 나는 당신이 당신의 질문에 대해했던 것과 똑같은 일을하곤했지만 데이터베이스에서 오프라인 메시지를 찾을 수는 없습니다. 당신이 나를 도울 수 –