Openfire Smack 기반 인스턴트 메시징 어플리케이션 개발, 오프라인 메시지 얻기, 메시지 보내기, 연락처 목록, 친구 추가(3)
1: 앞의 두 편에서 Openfire 서버의 구축과 등록 로그인을 말했는데 다음은 중점이다. 친구와 채팅을 실현하는 것이다.
2: 사용자의 모든 친구 얻기
XMPPTCPConnection connection
/** * */
public Roster getContact() {
Roster roster = Roster.getInstanceFor(connection);
//
Collection<RosterGroup> groups = roster.getGroups();
for (RosterGroup group : groups) {
//
List<RosterEntry> entries = group.getEntries();
for (RosterEntry entry : entries) {
//
entry.getUser();
entry.getName();
entry.getType();
entry.getStatus();
}
}
return roster;
}
3: Smack은 역사적인 채팅 기록을 얻는api(본인은 줄곧 찾지 못했기 때문에) 채팅 기록, 채팅 목록 부분에 대해 자신이 데이터베이스를 설계하여 채팅 정보를 저장해야 한다.여기서 중점적인 Api 방법을 정리할게요.
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
//....
//
.setSendPresence(false)
//....
XMPPTCPConnection connection = new XMPPTCPConnection(config);
/** * * */
private void getOfflineMessage() {
OfflineMessageManager offlineManager = new OfflineMessageManager(connection);
try {
List<Message> list = offlineManager.getMessages();
//
offlineManager.deleteMessages();
//
Presence presence = new Presence(Presence.Type.available);
connection.sendStanza(presence);
} catch (Exception e) {
e.printStackTrace();
}
}
4: 이전에 설치한 스파크를 사용하여 테스트를 할 수 있다는 메시지를 보냅니다.
try {
ChatManager manager = ChatManager.getInstanceFor(connection);
Chat chat = manager.createChat("[email protected]",null);
chat.sendMessage("HelloWord");
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
manager.createChat(userJID, null); userJID는 사용자 이름 @ 서버 IP 주소여야 합니다. 그렇지 않으면 메시지를 보낼 수 없습니다.
5:기왕 메시지를 보낼 수 있다면 당연히 상대방이 당신에게 보낸 메시지를 얻을 수 있습니다.
/** * */
public void initListener() {
ChatManager manager = ChatManager.getInstanceFor(connection);
//
final ChatMessageListener messageListener = new ChatMessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
// ,
if (!TextUtils.isEmpty(message.getBody())) {
//message
}
}
};
ChatManagerListener chatManagerListener = new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean arg1) {
chat.addMessageListener(messageListener);
}
};
manager.addChatListener(chatManagerListener);
}
6: 친구와 친구 추가 감청 요청
/** * * * @param user * @param nickName * @param groupName */
Roster.getInstanceFor(connection).createEntry("[email protected]", "", null);
/** * */
public void addFriendListener() {
//
StanzaFilter filter = new AndFilter();
StanzaListener listener = new StanzaListener() {
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
DiscoverInfo p = (DiscoverInfo) packet;
//p
if (p.getType().toString().equals("subscrib")) {
//
} else if (p.getType().toString().equals("subscribed")) {
//
} else if (p.getType().toString().equals("unsubscribe")) {
//
}
}
};
connection.addAsyncStanzaListener(listener, filter);
}
다음은 본인이 실현한 대략적인 채팅 인터페이스로 겨우 하나의 채팅 기능을 실현했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.