XMPP 프로토콜 기반 채팅 상세 정보

8312 단어

1, 서버와의 채널 - XMPPStream


채널 설정

if (_currentXMPPStream == nil) { _currentXMPPStream = [[XMPPStream alloc]init]; [_currentXMPPStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; [_currentXMPPStream setHostName:kXmppHost]; } [self.currentXMPPStream setMyJID:myjid]; [self.currentXMPPStream connectWithTimeout:XMPPStreamTimeoutNone error:nil]; 서버 연결이 성공하면 리셋이 실행됩니다.- (void)xmppStreamDidConnect:(XMPPStream *)sender; 서버 연결이 실패하면 리셋이 실행됩니다.- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError*)eror 연결 시간이 초과되면 호출됩니다.- (void)xmppStreamConnectDidTimeout:(XMPPStream *)sender

분리

- (void)disconnect;

현재 채널의 연결 상태

- (BOOL)isDisconnected;// - (BOOL)isConnecting;// - (BOOL)isConnected;//

2, 로그인, 등록, 비밀번호 수정


xmppStreamDidConnect 메서드에서 실행되지만 호출된 메서드는 다릅니다.

로그인

[self.currentXMPPStream authenticateWithPassword:self.password error:&error]; 관련 리셋 방법- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender 비밀번호 확인 통과 후 자신을 오프라인 상태로 설정해야 합니다
xmppStreamDidAuthenticate에서 실행[self.currentXMPPStream sendElement:[XMPPPresence presenceWithType:@"available"]];

등록

[self.currentXMPPStream registerWithPassword:self.password error:&error] 관련 리셋 방법- (void)xmppStreamDidRegister:(XMPPStream *)sender; - (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error

암호 수정

NSXMLElement *queryxml = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"]; NSXMLElement *usernamexml = [NSXMLElement elementWithName:@"username" stringValue:username]; NSXMLElement *passwordxml = [NSXMLElement elementWithName:@"password" stringValue:newpwd]; [queryxml addChild:usernamexml]; [queryxml addChild:passwordxml];**** XMPPIQ *iq = [[XMPPIQ alloc]initWithType:@"set" to:self.currentXMPPStream.myJID.domainJID elementID:@"change1" child:queryxml]; [self.currentXMPPStream sendElement:iq];

3, 사적인 대화(메시지 발송 및 수락)


일대일 채팅--메시지 보내기, type ='chat'XMPPJID *tojid = [XMPPJID jidWithString:userjid]; XMPPMessage *message = [XMPPMessage messageWithType:@"chat" to:tojid]; [message addBody:text]; [self.currentXMPPStream sendElement:message]; 메시지를 받은 후 조정 방법을 실행하다- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

4, 친구 관련 작업(Roster)


xmpp에서 친구 작업에 관심을 갖는 것은 일종의 구독 메커니즘에 해당한다. 상대방이 구독 요청에 동의하면 사용자는 상대방과 관련된 상하선 상태 정보를 받을 수 있다.type = "subscribe"// -- type = "subscribed"// -- type = "unsubscribed"// -- 상대방 정보 구독 요청XMPPJID *jid=[XMPPJID jidWithUser:username domain:kXmppLogo resource:nil]; [self.currentXMPPRoster subscribePresenceToUser:jid]; 구독 받기[self.currentXMPPRoster acceptPresenceSubscriptionRequestFrom:jid andAddToRoster:YES]; 구독 거부[self.currentXMPPRoster rejectPresenceSubscriptionRequestFrom:jid]; 구독하는 과정에서subscribe 속성은 순서대로 4가지 상태가 있다none contact ( server buddy list ); to contact presence, contact Presence; from to , contact presence, contact ; both presence。

5, 그룹 관련 작업(XEP--0045 참조)


그룹 세션 초기화, type = "conference.jabber.org"더 많은 프레임 내용은 XEP-0045를 볼 수 있습니다.if (_currentXMPPRoom == nil) { XMPPJID *myroomjid = [XMPPJID jidWithUser:self.roomName domain:kXmppLogo_Group resource:nil]; _currentXMPPRoom = [[XMPPRoom alloc]initWithRoomStorage:[XMPPRoomCoreDataStorage sharedInstance] jid:myroomjid]; // [_currentXMPPRoom activate:_currentXMPPStream]; // // NSXMLElement *history=[NSXMLElement elementWithName:@"history"]; [history addAttributeWithName:@"maxstanzas" stringValue:[NSString stringWithFormat:@"%i",0]]; [_currentXMPPRoom joinRoomUsingNickname:stream.myJID.user history:history]; // [_currentXMPPRoom configureRoomUsingOptions:nil]; [_currentXMPPRoom addDelegate:self delegateQueue:dispatch_get_main_queue()]; } 그룹 초대 작업 - 메시지 보내기 [_currentXMPPRoom inviteUser:[XMPPJID jidWithUser:@"test" domain:@"jabber.org" resource:nil] withMessage:@" "]; 사회자 그룹 아웃 작업 제거XMPPJID *jid = [XMPPJID jidWithUser:_exitNumberField.text domain:kXmppLogo resource:nil]; NSXMLElement *item = [XMPPRoom itemWithAffiliation:@"none" jid:jid]; [_currentXMPPRoom editRoomPrivileges:@[item]]; 그룹 정보 보내기[_currentXMPPRoom sendMessageWithBody:@" "]; 스스로 무리를 이탈하여 조작하다.[_currentXMPPRoom leaveRoom]; @protrol XMPROomDelegate는 주로 그룹 세션 생성, 메시지 수신, 그룹 이탈 알림 등을 포함합니다.
/ * Invoked when a message is received. * The occupant parameter may be nil if the message came directly from the room, or from a non-occupant. / - (void)xmppRoom:(XMPPRoom *)sender didReceiveMessage:(XMPPMessage *)message fromOccupant:(XMPPJID *)occupantJID; - (void)xmppRoomDidJoin:(XMPPRoom *)sender; - (void)xmppRoomDidLeave:(XMPPRoom *)sender;

6, 사용자 이미지 작업(XMPPvCardAvatarModule)


7, 파일 전송


파일 전송의 주요 두 가지 방식1, base64 2, XEP-0065 ( XMPP , ), 3,XEP-0047,In-Band Bytestreams(ibb) XEP-0047( )

8, XMPPFrameWork 일반 클래스 설명


XMPPStream은 서버 측과 긴 연결을 위해 모든 작업을 수행하는 전제 조건입니다.
XMPREconnect 자동 재연습
XMPROSTER 구독 또는 대상 사용자 상태 취소(친구 클래스 추가 또는 삭제)
XMPROOM은 다중 세션(회의 또는 단체 대화)을 제공합니다.
XMPPvCardTemp 엽서
XMPPvCardAvatarModule 구성 사용자 이미지

9. 학습 자료


xmpp 프로토콜 기반 채팅http://www.csdn123.com/html/itweb/****20130809/51042_51053_51054.htm 우리가 자주 사용하는 몇 가지 확장은 모두 주석으로 상응하는 협의이다
이,http://wiki.jabbercn.org/XEP-0065xmpp 중국어 번역 계획, 위의 문장 학습과 결합하여 번역의 매우 전면적이고 기본적으로 우리가 필요로 하는 기능을 실현하였다

좋은 웹페이지 즐겨찾기