XMPP SSO(Single Sign-On)
3178 단어 iosSSOXMPPxmppframework단일 접속
XMPP를 단일 로그인으로 만들려면 jid의 리소스가 일치해야 합니다. 예를 들어[email protected]/boris .XMPP 서버는 리소스가 일치하는 경우 두 가지 처리 가능성이 있습니다.
인용하다
If there is already an active resource of the same name, the server MUST either (1) terminate the active resource and allow the newly-requested session, or (2) disallow the newly-requested session and maintain the active resource. Which of these the server does is up to the implementation, although it is RECOMMENDED to implement case #1. In case #1, the server SHOULD send a
간단하게 말하면 만약에 리소스가 일치한다면 첫 번째 방법은 활동하고 있는 리소스를 끝내고 최신 요청한 세션을 남기는 것이다. 즉, A가 먼저 로그인하고 B가 다시 로그인하면 A가 오프라인 된다.두 번째 방법은 최신 요청 세션을 거절하고 첫 번째를 유지하는 것이다. 즉, A가 먼저 로그인하고 B가 다시 로그인하면 B가 올라가지 않는다.
내 실례 중의 서버는 첫 번째 방법을 사용한다. 어떤 방법이든 오프라인 클라이언트는 서버가 보내는 error를 받는다.
<stream:error xmlns:stream="http://etherx.jabber.org/streams">
<conflict xmlns="urn:ietf:params:xml:ns:xmpp-streams"></conflict>
</stream:error>
conflict는 로그인 충돌을 대표하기 때문에 이 메시지를 받으면 다른 클라이언트가 같은jid에 로그인했는지 확인할 수 있습니다. 따라서 이 error만 처리하면 됩니다.
OC 의 XMPPFramework 에서 다음을 수행할 수 있습니다.
- (void)xmppStream:(XMPPStream *)sender didReceiveError:(id)error
{
HWLOGI(@"didReceiveError:%@",error);
DDXMLNode *errorNode = (DDXMLNode *)error;
//
for(DDXMLNode *node in [errorNode children])
{
// 【 】
if([[node name] isEqualToString:@"conflict"])
{
//
[_timer invalidate];
NSString *message = [NSString stringWithFormat:@"%@さんが の でログインしたため、 にログアウトしました。",[[[SharedAppDelegate myInfo] myCardDetial]fullNameWithSpace]];
// , OK logout
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
alert.tag = 9999;
alert.delegate = SharedAppDelegate;
[alert show];
[alert release];
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.