iosxmpp 개발 응용 프로그램 백그라운드 모드로 채팅 메시지 수신

2707 단어
최근에 xmppframwork를 사용하여 채팅 응용 프로그램을 실현하는데 문제가 하나 생겼습니다. 응용 프로그램이 백그라운드에 들어간 후에 메시지를 받지 못합니다.
어떻게 해야만 응용 프로그램이 백그라운드로 잘릴 때 응용 프로그램의 네트워크 연결이 여전히 데이터를 수신하고 생존을 유지할 수 있는지 (QQ 아이폰처럼) 다음 단계에서 분석할 수 있다.
iOS 응용 프로그램의 상태에는 다음과 같은 세 가지 상황이 있습니다.
1) iOS가 활성 상태로 적용되면 서버와 긴 연결을 유지하고 클라이언트와 서버는 이 연결을 통해 메시지를 수신합니다.2) iOS가 종료 상태로 적용되면 긴 연결이 끊어지고 서버가 클라이언트에게 메시지를 보내면 APNS를 통해 메시지를 전송합니다.3) iOS 앱이 백그라운드로 자르기 전에 닫히지 않았는데 긴 연결이 끊어지지 않은 것을 발견하면 서버가 긴 연결을 통해 클라이언트에게 메시지를 보낼 수 있지만 iOS 앱은 다시 프론트 데스크톱으로 자르기만 메시지를 받을 수 있다.
세 번째 상황에 대해 다음과 같은 의문이 있습니다.
iOS 응용 프로그램이 백그라운드로 썰렸을 때 연결이 유지되고 있습니다. 이 때 클라이언트가 백그라운드에서 서버의 메시지를 받고 로컬 알림으로 사용자에게 알릴 수 있습니까?가능하다면 어떻게 해야 합니까?아니면 백그라운드로 자르면 APNS를 통해 사용자에게 알려야 합니까?
애플 공식 문서인 App Programming Guide에서 Background Execution and Multitasking에 관한 장과 satckoverflow가 xmpp 지원 백엔드 socket 문제에 대한 해답을 결합하여 다음과 같은 해결 방법을 얻는다.
1. 애플은 소수의 몇몇 유형의 응용 코드만 백그라운드에서 실행할 수 있기 때문에 (예를 들어audio,location,voip 등) 응용 프로그램(appname)-info가 필요하다.plist 파일에 "Required background modes"키를 추가합니다. 값은voip로 설정되어 형식을 지정합니다.
2.iosxmppframwork에는 이미 이 방면의 지원이 있습니다. xmppstream을 초기화할 때 다음 설정을 하면 됩니다.
// ( ios socket )
 xmppStream.enableBackgroundingOnSocket = YES;

다음은 효과가 어떤지 테스트를 해 봅시다.
먼저 - (void) xmppStream: (XMPPStream *)sender didReceiveMessage: (XMPMessage *) 메시지 방법에 다음 코드를 추가합니다.
    // , 
    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)
    {

    }else{// , 
        UILocalNotification *localNotification = [[UILocalNotification alloc] init];
        localNotification.alertAction = @"Ok";
        localNotification.alertBody = [NSString stringWithFormat:@"From: %@

%@",@"test",@"This is a test message"];// localNotification.soundName = @"crunch.wav";// localNotification.applicationIconBadgeNumber = 1;// [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];// }

진기 테스트, 로그인 후 백그라운드 상태로 전환한 후 컴퓨터에서 spark로 아이폰에 메시지를 보내고 상태 표시줄에서 알림 메시지를 넘기면 기본적으로 성공합니다.
-------------------------------------------------------------------------------------------------------------------------------------------------
추가 설명:
인터넷에서 자료를 찾았을 때 만약에 당신의 응용이 voip를 실현하지 못했다면 상기 방법대로 하면 애플reject에 걸릴 위험이 있습니다.그러면 대체 방법은 응용 프로그램이 백그라운드에 들어가거나 종료된 후에 서버 측은 사용자 상태의 변화에 따라 사용자에게 메시지를 보내고 애플 apns를 사용하여 새로운 메시지를 사용자에게 보내는 것이다.그러나 우리는 애플의 apns가 즉각성과 신뢰성에 대해 보증을 하지 않는다는 것을 알고 있다. 즉, 새로운 소식의 통지가 애플에 전달된다는 것이다. 애플은 당신을 도와 전송할 수 있을 뿐만 아니라 즉각적인 전송도 보장하지 않기 때문에 제3자의 무료 전송 서비스 제공자가 있는지 찾아볼 수밖에 없다.
Google에서 극광 푸시라는 무료 푸시를 찾았습니다. 연구 중에 업데이트된 결과가 있습니다.

좋은 웹페이지 즐겨찾기