Smack 개발 총괄 (4) 메시지 관리

3719 단어
< Smack 개발 총화 (4) 메시지 관리 > 전재 바보 b이동 개발 (http://www.jianshu.com/users/d388bcf9c4d3) 좋아 하 는 것 은 나 를 주목 하고 비정 기적 으로 글 을 정리 할 수 있다!당신 의 지 지 는 나의 동력 입 니 다!
메시지 관리
우선 인 스 턴 트 메 신 저 에서 핵심 적 인 정보 관리 체제 가 빠 질 수 없다.smack 에서 정보 관리의 메커니즘 에 대한 기초 응용 은 상당히 간단 하 다.알 고 있 는 smack 의 프로그램 원숭이 들 은 samck 에서 XMPP 협 의 를 통 해 정 보 를 전달 한 다 는 것 을 잘 알 고 있다.(모 르 는 것 은 백과사전 XMPP 프로 토 콜 로 전환 하 십시오) 따라서 우 리 는 그 가 XML 데이터 로 포 장 된 메시지 유형 임 을 알 수 있 습 니 다. 그 중에서 smack 의 기본 정 보 는 org. jivesoftware. smack. packet. Message 로 구성 되 어 있 으 며 메시지 내용 은 body 태그 에 저 장 됩 니 다.
다음은 Smack 이 메시지 에 대한 관 리 를 직접 정리 하 겠 습 니 다.
온라인 뉴스
(1) 채 팅 관리자 가 져 오기
ChatManager mChatManager = ChatManager.getInstanceFor(mConnection);

(2) 채 팅 세 션 만 들 기
public Chat createChat(String userJid) {

    Chat curChat = null;
    curChat = mChatManager.createChat(userJid);
    return curChat;
}

(3) 메시지 발송
public void sendMessage(Chat chat, Message message) {
    try {
        chat.sendMessage(message);
    } catch (SmackException.NotConnectedException e) {
        e.printStackTrace();
    }
}

(4) 메시지 수신 에 대해 서 는 먼저 두 개의 리 셋 감청 Chat Manager Listener 와 ChatMessage Listener Chat Manager Listener 를 설명해 야 합 니 다.
/**
 * Event fired when a new chat is created.
 *
 * @param chat the chat that was created.
 * @param createdLocally true if the chat was created by the local user and false if it wasn't.
 */
void chatCreated(Chat chat, boolean createdLocally); //          

ChatMessageListener:
void processMessage(Chat chat, Message message); //       

실제 개발 에 서 는 메시지 세 션 chat 생 성 을 감청 할 때 메시지 감청 을 할 수 있 습 니 다.
public void chatCreated(Chat chat, boolean createdLocally) {
    chat.addMessageListener(this);
}

@Override
public void processMessage(Chat chat, Message message) {
    MessageModel msg = MessageDealUtil.dealMessage(message);

    if (msg.getBody() != null) {
        Intent intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putParcelable("message", msg);

        intent.putExtras(bundle);
        intent.setAction(MessageReceiver.SNAKE_MESSAGE_ACTION);
        SnakeUtilKit.getSnakeApp().sendBroadcast(intent);

        if (listener != null){
            listener.onRecevie(msg,message.getBody());
        }

    }
}

오프라인 소식
오프라인 메 시 지 는 상대방 이 온라인 상태 가 아 닌 경우 openfire 의 처리 전략 입 니 다. 상대방 이 온라인 상태 가 아 닌 경우 잠시 오프라인 표 에 메 시 지 를 저장 합 니 다.그래서 클 라 이언 트 에 게 로그 인 에 성 공 했 을 때 오프라인 메 시 지 를 읽 고 읽 기 에 성공 한 후에 openfire 에 오프라인 메시지 캐 시 를 삭제 하 라 고 요청 합 니 다.(1) 오프라인 메시지 관리자 가 져 오기
OfflineMessageManager mOfflineMessageManager = new OfflineMessageManager(mConnection);

(2) 오프라인 메시지 가 져 오기
public void getOfflineMessage(){

    LogTool.d("      ..");

    if (mOfflineMessageManager != null){
        try {
            if (mOfflineMessageManager.getMessageCount() >0){
              List messages = mOfflineMessageManager.getMessages();
                for (Message message : messages){
                    processMessage(null,message);
                }
            }
           mOfflineMessageManager.deleteMessages();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

기본 응용 은 어렵 지 않 습 니 다. 새로운 메시지 형식 을 확장 하려 면 message 의 유형 에 대해 메시지 형식 프로 토 콜 정 의 를 해 야 합 니 다.원 리 는 대략: 파일 - 업로드 서버 주소 - 응답 받 기 파일 주소 - > meesage 의 태그 body (예 를 들 어 json 형식 {"type": "img", "content": "주소"}) 를 조립 합 니 다.이렇게 하면 소식 을 받 을 때 소식 을 바 꾸 면 된다.
관심 있 으 면 같이 소통 할 수 있어 요.
바보 b mark 함께 노력 하 는 당신 에 게

좋은 웹페이지 즐겨찾기