2014-12-06 2 views
4

제목은 모두 그 뜻입니다. pubnub 포럼에서이 questionhere을 보았습니다 (동일한 질문, 다른 제안).응용 프로그램이 백그라운드 상태로 들어가면 Pubnub 연결이 중지됩니다. iOS 8

문제의 핵심은 응용 프로그램이 일시 중지되면 pubnub 연결이 대기 상태가되고 응용 프로그램이 포 그라운드로 돌아갈 때까지 전송되지 않는다는 것입니다. 채널에서 백그라운드로 가고 있지만 작동하지 않는다는 알림을 보내려면 합당한 방법 인 것 같습니다.

필자는 pubnub가 웹 소켓을 사용하고 있으며 백그라운드 모드에서는 허용되지 않는다는 것을 알았습니다. 심지어 운이없는 백그라운드 모드로 VOIP를 사용하려고 시도했지만 위치 업데이트 bg 모드가 작동합니다. 그러나, 이것을 사용하면 위치 서비스를 사용하지 않기 때문에 내 앱이 거부됩니다. 이 코드를 실행하는 경우

- (void)applicationDidEnterBackground:(UIApplication *)application { 

    [PubNub sendMessage:@"Hello from PubNub iOS!" toChannel:self.myChannel; 
} 

내가 pubnub에서이 로그 항목을 얻을 수 (그래서 적어도 나는 명령이 실행 된 것을 알고) : 나는이 이상 자신을 죽이고있다

Looks like the client suspended"; Fix suggestion="Make sure that your application is configured to run persistently in background 

일. 요즘 당신이 생각하는 무언가를 간단하게 시작하는 것은 15 분이며, 좌절의 날로 변하게됩니다. 내 말은 무슨 뜻인지 아시겠습니까? :)

+1

당신이 VOIP 소켓을 사용할 수있을 때 정지 배경을 구현? 이 작업을 수행했다처럼'pList' 파일' UIBackgroundModes 의 VoIP 는'같은데. 더 깊은 다이빙을 원하면 [[email protected]]에게 이메일을 보내야합니다. – PubNub

+1

이것은 iOS 문제보다 PubNub 문제가 적습니다. 앱이 백그라운드에서 실행될 수 있으면 PubNub도 실행할 수 있습니다. 안드로이드는 훨씬 더 직설적이며 백그라운드 서비스로 연결된 PubNub와 함께 훌륭하게 작동합니다. PubNub iOS SDK의 새로운 백그라운드 테스트 코드입니다. https://github.com/pubnub/objective-c/tree/master/iOS/tests/pubnubBackground 계속 살펴보고 질문이있는 경우 PubNub Support에 문의하십시오. –

+0

@CraigConover 나는이 일찍부터 건너 왔지만 그 일에 깊이 관여하지는 않았다. 배경 기능이 상당히 단순하고 뭔가 빠져있는 것 같았습니다. 정말 똑바로 보이지 않는 것 같습니다. 이미 도움이되었다는 것을 알고 있습니다. – GrandSteph

답변

1

실제로 메시지를 보낼 수있었습니다. 앱이 배경을 입력하려고 할 때 필요했습니다. 그리고 배경 모드를 사용하지 않고.

나는이 배경의 유한 작업을 활용하여 설명했듯이 tutorial입니다.

- (void)applicationWillResignActive:(UIApplication *)application { 

    [PubNub updateClientState:@"MyID" state:@{@"appState":@"Background",@"userNickname":@"MyNickname"} forObject:[PNChannel channelWithName:@"MyChannel"]]; 

    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     NSLog(@"Background handler called. Not running background tasks anymore."); 
     [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask]; 
     self.backgroundTask = UIBackgroundTaskInvalid; 
    }]; 

} 

그리고 다시 온라인

- (void)applicationDidBecomeActive:(UIApplication *)application { 

    if (self.backgroundTask != UIBackgroundTaskInvalid) 
    { 
     [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask]; 
     self.backgroundTask = UIBackgroundTaskInvalid; 
     NSLog(@"Task invalidated"); 
    } 
} 
+0

앱을 백그라운드에서 30 분 이상 방치해도 위의 해결 방법이 적용 되었습니까? 내가 아는 한 백그라운드 작업은 유한 길이이므로 OS는 언제든지 앱을 일시 중지 할 수 있습니다. 응용 프로그램이 포 그라운드로 들어간 후에 동일한 연기 문제가 발생했기 때문에이 질문을하고 있습니다. –

+0

내 목표는 앱을 종료 할 때 업데이트를 보내는 것입니다. 이 기능은 단지 몇 초 밖에 걸리지 않으므로 잘 작동합니다. 다른 모든 작업, 당신 말이 맞아요, 결국 운영 체제에 의해 중단됩니다. – GrandSteph

관련 문제