-
반응형
앱스토어에서 앱을 다운받을 때 다른사람이 리뷰가 다운을 받을지 말지 결정하는 중요한 요소가 된다. 그만큼 개발자는 적재적소에 리뷰팝업을 띄워야 좋은 리뷰를 많이 받을 수 있으며, 귀찮게 자꾸 물어보거나 크래시가 난 후 리뷰팝업을 띄운다면 별점 테러를 당할 수 있으니 주의해야 한다.
이번에 Remocle 앱에 리뷰를 권하는 팝업을 넣는 과정을 간단하게 정리해 보았다.
🍎 Apple Request Review Prompt
Review popup을 보여주는 코드 자체는 심플하다. 원하는 타이밍에 아래 코드를 호출해 주면 된다.
SKStoreReviewController.requestReview()
그런데 위 함수를 호출해준다고 해서 항상 리뷰 팝업이 보이는 것은 아니다. 실제로 보일지 말지는 Apple Policy에 달려있으므로 명시적인 유저 액션에 대해서 위 함수를 호출하면 안된다.
🐥중요
1. Development: 팝업이 항상 뜬다.
2. Testflight: 팝업이 뜨지 않는다.
3. AppStore: 애플의 Policy에 맞게 뜬다.
Apple Policy에는 365일동안 3번이상 뜨지 않는다, 같은 버전에서 두번이상 뜨지 않는다 등이 있다. 자세한 내용은 애플 공식 문서를 참조. developer.apple.com/app-store/ratings-and-reviews/
🔨 리뷰 팝업 직접 제어하기
일단, 처음에는 리뷰 팝업이 뜨는 타이밍을 직접 제어해 보려고 했다. 역시나 Raywenderlich 에서 좋은 튜토리얼을 찾을 수 있엇다.
튜토리얼을 기반으로 만든 AppStoreReviewManager 이다. 원하는 타이밍에 AppStoreReviewManager.requestReviewIfAppropriate() 함수를 호출해 주면 minimumReviewWorthyActionCount 를 저장해 뒀다가 일정 횟수 이상 해당 액션을 실행 했을 때 App review prompt를 보여준다.
// AppStoreReviewManager.swift // Remocle // // 참고한 사이트: https://www.raywenderlich.com/9009-requesting-app-ratings-and-reviews-tutorial-for-ios#toc-anchor-005 import StoreKit import SwiftyUserDefaults enum AppStoreReviewManager { static let minimumReviewWorthyActionCount = 3 static func requestReviewIfAppropriate() { let actionCount = Defaults[\.reviewWorthyActionCount] + 1 Defaults[\.reviewWorthyActionCount] = actionCount guard actionCount >= minimumReviewWorthyActionCount else { return } let bundleVersionKey = kCFBundleVersionKey as String let currentVersion = Bundle.main.object(forInfoDictionaryKey: bundleVersionKey) as? String let lastVersion = Defaults[\.lastReviewRequestAppVersion] guard lastVersion == nil || lastVersion != currentVersion else { return } SKStoreReviewController.requestReview() Defaults[\.reviewWorthyActionCount] = 0 Defaults[\.lastReviewRequestAppVersion] = currentVersion } }
📚 라이브러리 사용하기
직접 제어하는 것도 좋지만 라이브러이의 도움을 받아, 앱 런칭한지 7일 후, 최소 런칭 횟수 등을 편하게 설정해 주면 좋을 것 같았다. 그래서 적용한 것이 AppRater 라는 라이브러리이다.
github.com/takecian/SwiftRater
이런식으로 편하게 적용할 수 있었다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { SwiftRater.daysUntilPrompt = 7 SwiftRater.usesUntilPrompt = 10 SwiftRater.significantUsesUntilPrompt = 2 SwiftRater.daysBeforeReminding = 3 SwiftRater.showLaterButton = true SwiftRater.debugMode = true SwiftRater.appLaunched() return true }
물론, 원하는 타이밍에 SwiftRater.check() , SwiftRater.incrementSignificantUsageCount() 함수를 불러주는 코드도 추가해야 한다.
💬 앱스토어 리뷰 화면으로 바로 보내기
위에서 SKStoreReviewController.requestReview() 함수는 항상 뜨는 것을 보장하지 않는다고 했다. 그렇다면 세팅 화면에서 리뷰화면으로 곧장 보내려면 어떻게 해야 할까.
아래처럼 앱스토어 링크에 쿼리 스트링을 붙여서 url open을 하면 된다.
if let appstoreURL = URL(string: "https://apps.apple.com/app/id1522259532") { var components = URLComponents(url: appstoreURL, resolvingAgainstBaseURL: false) components?.queryItems = [ URLQueryItem(name: "action", value: "write-review") ] guard let writeReviewURL = components?.url else { return } UIApplication.shared.open(writeReviewURL, options: [:], completionHandler: nil) }
리뷰 타이밍을 잘 잡아서 좋은 리뷰를 많이 받도록 합시다.
반응형'개발' 카테고리의 다른 글
[Firebase/Crashlytics] Bitcode 때문에 dSYM 업로드 안되는 이슈 (0) 2021.04.07 [iOS/Swift] Multiselection 되는 Photo picker Library 선택하기 (0) 2021.04.07 SSH 인증키 생성 & Github 에 등록 (0) 2021.02.27 Mac 기본 캘린더와 구글캘린더 싱크 오류 해결방법 (0) 2021.02.25 CocoaPod 여러가지 (0) 2021.02.09 댓글