2017-03-28 6 views
6

다음을 AppDelegate 및 가져온 StoreKit에 추가했습니다. 검토 모달이 출시 될 때 예상대로 팝업됩니다. 제 질문은 제가이 주파수를 담당하는 사람입니까, 아니면 애플입니까? docs은 여전히 ​​가볍지 만 Apple이 사용자 당 1 년에 3 번으로 제한한다는 것을 elsewhere이라고 읽었습니다. 그 숫자가 표시 될 때 (이상적으로 두 달) 적절한 시간을 추가 할 수 있다고 믿을 수 있습니까?SKStoreReviewController 제어 빈도

내가 앱을 시작할 때마다 개발이 갑자기 나타나기 때문에 사용자가 12 개월 동안 다시 한 번 물어 보지 않으면 3 번이나 해고해야한다는 것을 싫어한다.

이제 10.3이 나와서 다른 사람들이이 문제를 어떻게 해결했는지 알아 보겠습니다.

건배.

if #available(iOS 10.3, *) { 
     print("Show Review Controller") 
     SKStoreReviewController.requestReview() 
    } else { 
     print("Cannot Show Review Controller") 
     // Fallback on earlier versions 
    } 
+0

저는 애플이 일년에 세 번씩 고르게 일하지 않는 어려운 방법을 배웠습니다. 내 구현은 app에서 특정 작업의 세 번째 시간 후에 requestReview()를 호출 할 때마다 발생했습니다. 도. 세 가지 작업 후에도 검토 요청이 항상 팝업으로 표시됩니다. 세 번. 그럼 더 이상, 1 년 동안, 아마. 여기에 나온 답변 에서처럼 사용자 기본값 등에서 마지막 요청 시도 날짜를 저장하는 것은 정상적인 처리 방법입니다. – Jonny

답변

8

UserDefaults에 저장된 개수를 추가했습니다. 특정 작업이 발생할 때마다 증가하며 (평균 사용자는 앱 사용 당 한 번씩 카운트가 증가 할 것입니다) count % 10 == 0

리뷰 요청을 표시 할 수도 있지만 표시하지 않을 수도 있습니다 너무 자주 표시됩니다.

또는 lastReivewAttemptDate 및 요청 간의 최소 간격을 저장하는 것이 좋습니다.

+0

비슷한 결과를 얻었습니다. 초기 값 5로 사용자 기본값에 저장된 값이 있습니다. 사용자가 해당 개체 기본값에서 1을 제거한 특정 개체를 성공적으로 추가 할 때마다 0에 도달하면 SKStoreReviewController.requestReview() 값을 5로 재설정하십시오. –

+0

@FaizFareed 다른 질문으로이 질문을하십시오. –

+1

@AshleyMills, 지시 해 주셔서 감사합니다.하지만 직접하겠습니다. 따라서 다른 질문을 생성 할 필요가 없습니다. & 위의 내 의견에 대해 유감스럽게 생각합니다. 그래서 그것을 제거하려고합니다. –

2

당신은 이것을 계산하지 않습니다.하지만 이렇게하면 잠재적으로 전화가 부족할 때 더 전략적 일 수 있습니다.

NSUserDefaults 내의 각 호출에 대한 시간 소인을 저장하는 가장 유연한 방법 인 것 같습니다. 이것은 obj-c에서 내가하는 것입니다 :

// Rate app action for iOS 10.3+ 
-(void)displayDialog { 
    [SKStoreReviewController requestReview]; 
    [self storeTimestamp:PromptTimestampsKey]; 
} 

- (void)storeTimestamp:(NSString *)key { 
    NSNumber *todayTimestamp = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]]; 

    NSMutableArray *timestamps = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:key]]; 

    // Remove timestamps more than a year old 
    for (NSNumber *timestamp in timestamps) { 
     if ((todayTimestamp.doubleValue - timestamp.doubleValue) > SecondsInYear) { 
      [timestamps removeObject:timestamp]; 
     } 
    } 

    // Store timestamp for this call 
    [timestamps addObject:todayTimestamp]; 
    [[NSUserDefaults standardUserDefaults] setObject:timestamps forKey:key]; 
}