2012-04-04 2 views
3

나는이 주제를 주로 검색했다. 나는 애플의 제약에 직면 해있다. 분당 한 번씩 내 서버를 제어해야하며 변경 사항이있는 경우 로컬 알림을 실행하십시오. 내가 필요로하는 것은 타이머 (NSTimer)를 배경 (또는 장치 잠금이 활성화 될 때 ..)으로 유지하는 방법입니다. 감사합니다백그라운드에서 코드 블록을 유지하는 방법은 무엇입니까?

+1

백그라운드에서 타이머가 작동하지 않습니다. 이것에 대한보세요 http://stackoverflow.com/questions/7190919/problem-while-working-in-background-and-nstimer – sandy

답변

4

앱의 디자인을 재고해야합니다. OS가 메모리를 확보하기 위해 사냥을 할 때 앱이 죽지 않는다고 보장 할 수는 없습니다. 그 시나리오에서는 어떻게됩니까? 푸시 알림이 최선의 방법입니다. 우선 60 초마다 서버를 폴링 할 필요가 없습니다. 관심있는 내용이 서버에서 변경되면 알림을 표시합니다. 둘째, 앱이 실행 중이 아닌 경우에도 알림이 전송됩니다.

다른 문제는 info.plist를 통해 Apple에 앱이 지원하는 배경 모드를 알려줘야한다는 것입니다. 이것은 배경 음악이나 VoIP를 실행하는 애플 리케이션을위한 것입니다. 웹 서버 폴링은 지원되는 모드 중 하나가 아닙니다. 푸시 알림을 사용하면 앱이 포 그라운드로 들어갈 때 알림을 통해 전달 된 정보를 처리하는 데 사용할 수있는 일부 대리인 메서드도 얻을 수 있습니다.

+0

하지만 내가 알기 론 "Psuh Notifications가 전면에서 수신되도록 보장 된 것은 아닙니다. ". 나는 그것을 보증하고 싶다. – ilhnctn

+0

예를 들어 비행기 모드 인 경우 데이터 연결이 다시있을 때까지 알림이 수신되지 않습니다. 그러나 데이터 연결이없는 경우 설문 조사는 1 분에 1 분 정도의 아이디어가 어쨌든 작동하지 않습니다. – jmstone617

+0

예, 맞습니다.하지만 처음으로 데이터 연결을 만들면 변경된 내용이 나타납니다. – ilhnctn

5

서버 부분에서 논리를 수행 할 수 있으며 변경 사항이 있으면 밀어 넣기 알림을 보냅니다.

2

내 애플은 지속적으로 코드의 다음 조각 백그라운드에서 실행 .....

-(void)applicationDidEnterBackground:(UIApplication *)application 

{ 
    UIApplication *app = [UIApplication sharedApplication]; 

    UIBackgroundTaskIdentifier bgTask = 0; 

    backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES]; 

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    [app endBackgroundTask:bgTask]; 
    }]; 

} 

은 이제 backgroundTask 방법에서 원하는 무엇이든 할.

+0

@ Vish_Ob-j Reosanable로 보이지만 문서를 읽는 한 Apple은 App Store에서이 스타일의 코드를 허용하지 않을 것입니다. 귀하의 앱이 거부 될 수 있음을 의미합니다. 이 코드는 App Store에서 승인을 받았습니까? – ilhnctn

+0

@ilis - 아직 내 앱을 appStore에 제출하지 않았습니다. 하지만 이것은 백그라운드에서 실행되는 코드 블록을 유지하는 유일한 방법 인 것 같습니다 ... –

+0

하지만 Apple은 그렇게 말하지 않습니다. 또한이 코드 스 니펫의 원본을 기억합니다. 위치 또는 Vo-IP 기반 응용 프로그램 (또는 기타 등등)에서 가능할 수 있습니다. 모바일 장치의 코딩 및 메모리 관리에 대한 푸시 알림이 더 좋습니다. – ilhnctn

관련 문제