2015-01-18 2 views
0

배경 패치를 사용하여 주기적으로 백그라운드에서 새 데이터를 다운로드하는 iOS 애플리케이션이 있습니다. 잠시 후, 사용자가 평가판 사용 후 전체 액세스 권한을 구매하지 않은 경우이 기능을 사용 중지 할 수 있기를 바랍니다. 어떻게해야합니까?프로그래밍 방식으로 백그라운드 가져 오기를 켜고 끄는 방법

옵션은 performFetchWithCompletionHandler이 호출 될 때 단순히 아무 것도하지 않는 것입니다. 문제는 completionHandler를 호출하고 새로운 데이터를 사용할 수 있는지 여부를보고해야한다는 것입니다. 내가 UIBackgroundFetchResultNoData을 반환하면 iOS가 잠시 후 performFetchWithCompletionHandler을 호출하기로 결정할 수 있습니다. 또한 UIBackgroundFetchResultNewData을 반환 할 수는 있지만 Apple 주에서 "콘텐츠를 사용할 수는 있지만 아무 것도 다운로드하지 않는다"는 앱은 실행 시간을받을 가능성이 적습니다.

또 다른 옵션은 setMinimumBackgroundFetchInterval을 큰 값으로 호출하는 것입니다. 그러나 이것은 꽤 못생긴 해킹이며,이 값이 얼마나 큰지는 알 수 없습니다.

다른 옵션은 있습니까?

+0

iOS 앱은 평가판 기간이 없어야합니다. IAP를 사용하여 콘텐츠 구매 및 구독을 활성화 할 수 있지만 앱 자체는 사용자가 다운로드 한 후에 만료 될 수 없습니다. – SevenBits

+0

@SevenBits 제대로 완료되면 시험 사용 기간이 적용되는 것은 문제가되지 않습니다. 평가판 기간 동안 풀 모드로 실행 한 다음 사용자가 IAP를 통해 업그레이드하지 않으면 제한된 기능으로 되돌릴 수 있습니다. OP는 만료되는 앱에 대해 아무 말도하지 않았다. 단순히 기능이 적습니다. 나는 내 앱 중 하나에서 똑같이한다. – rmaddy

답변

-1

이것은 이 아닙니다. 대답은이 아니지만 뭔가 지적하고 싶습니다. setMinimumBackgroundFetchInterval에 지정한 값은 전적으로 권고입니다. Apple은 사용자가 얼마나 자주 콘텐츠를 사용하는지에 따라 앱이 새로운 콘텐츠를 가져올 수있는 빈도를 결정합니다. 자세한 내용은 this link입니다.

Apple은 자신의 응용 프로그램 사용법에 따라 백그라운드 가져 오기가 실행되는 빈도를 정의하는 알고리즘을 제공합니다. 많이 사용하는 경우 가능한 한 자주 가져 오지만 매일 오후 4시와 같이 사용하면 백그라운드 가져 오기가 방금 전에 트리거되어야하므로 데이터를 시작할 때 업데이트됩니다.

또한 사용자가 앱을 사용하지 않으면 배경 콘텐츠를 가져 오지 못할 수 있습니다.이 경우 앱이 시작될 때 업데이트해야합니다.

+2

이 질문에 대한 답을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – tbodt

+0

예, 댓글에 너무 큽니다. 내 코멘트를 지원하기 위해 추가 정보를 제공하고 싶었습니다. 귀하는 일반 코멘트 박스로는 할 수 없습니다. – SevenBits

+0

필자는 약간의 기교로 600 자까지 맞출 수 있다고 생각합니다. 그렇다면 그것은 의견에 맞을 것이다. – tbodt

2

이 방법이 효과가 있다는 사실을 알 수는 없지만 반드시 사용해야합니다. Info.plistfetch 배경 모드를 추가

  1. UIApplicationDelegate 방법 application:performFetchWithCompletionHandler:
  2. 를 구현 :

    아시다시피

    , 사용하는 배경은 두 가지가 필요합니다 가져 오기.

물론 옵션 2는 런타임에 변경할 수 없습니다. 그러나 트릭을 사용하여 위임 메서드가 구현되었는지 여부를 프로그래밍 방식으로 나타낼 수 있습니다. 앱 위임 클래스에서

, 다음과 같은 방법을 추가

- (BOOL)respondsToSelector:(SEL)aSelector { 
    if (aSelector == @selector(application:performFetchWithCompletionHandler:)) { 
     // return YES if in trial mode or user has full access. 
     // return NO otherwise 
    } 

    return [super respondsToSelector:aSelector]; 
} 

가정 대리자 방법은 선택 사항이기 때문에 fetch 모드가 활성화되어있는 경우, 아이폰 OS 프레임 워크 그냥 맹목적으로 위임 메소드를 호출하지 않는다는 것입니다 . 다행히도 iOS 프레임 워크는 먼저 위임자가 위임 메소드에 응답하는지 확인합니다.

application:performFetchWithCompletionHandler: 대리자 메서드의 경우 respondsToSelector: 메서드가 호출되는지 여부를 확인해야합니다. 그렇다면이 작동합니다. 그렇지 않다면 애플에 수치스러워 할 것이다.

+0

Daniel -이 기능이 도움이 되었습니까? – rmaddy

관련 문제