Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 리팩토링
- Clean Code
- uiscrollview
- Refactoring
- Observable
- HIG
- Human interface guide
- 애니메이션
- ribs
- 스위프트
- RxCocoa
- Xcode
- UICollectionView
- tableView
- Protocol
- swift documentation
- MVVM
- collectionview
- rxswift
- uitableview
- SWIFT
- map
- 리펙토링
- 리펙터링
- 클린 코드
- clean architecture
- UITextView
- combine
- swiftUI
- ios
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 별점 팝업, 리뷰 요청 팝업 띄우는 방법 StoreKit, SKStoreReviewController 본문
iOS 응용 (swift)
[iOS - swift] 별점 팝업, 리뷰 요청 팝업 띄우는 방법 StoreKit, SKStoreReviewController
jake-kim 2022. 5. 4. 00:40
* StoreKit을 이용한 결제 구현 방법은 이 포스팅 글 참고
별점, 평가 팝업 표출 주의사항
- 애플 문서대로, 사용자에게 앱에대한 충분한 경험을 부여하지 않은 경우 팝업을 띄우지 말 것
- ex) 처음 앱을 킨 경우나 onboarding화면에 팝업 x
- 평가 요청 주기는 최소 1~2주 텀으로 요청할 것 (자주 요청 시 부정적인 인식)
- 시스템에서 제공하는 Rating 프롬프트
- 365일 기간 내에 앱당 3번만 노출로 제공
- 사용자가 설정 앱에서 평가 프롬프트 수신 거부도 따로 가능
- 시스템의 평가 프롬프트는 필요한 정보만 표시하고 사용자에게 친숙하므로, 되도록이면 시스템에서 제공하는것을 사용할 것
StoreKit
- 인앱 구매나, 앱 스토어와의 인터렉션과 관련된 기능을 지원하는 framework
- In-App Purchase
- Ad Network Attribution
- Apple Music
- Recommendations and Reviews
- 별점 팝업도 StoreKit에서 제공해주는 SKStoreReviewController를 사용하면 편리하게 가능
별점 팝업 (리뷰 요청) 띄우는 방법
ex) 특정 버튼을 5번 이상 클릭하고 버전 별점 팝업 띄우기
- static으로 사용하기 위해서 enum으로 정의
import StoreKit
enum AppStoreReviewManager {
}
- 사용하는쪽에서 버튼이 눌릴 경우 해당 유틸을 호출하여 사용
@objc private func didTapButton() {
AppStoreReviewManager.requestReviewIfAppropriate()
}
- AppStoreReviewManager에서 버튼이 눌린 횟수까지 카운팅하도록 설정하기 위해서 필요한 프로퍼티 정의
// AppStoreReviewManager.swift
private static let minimumReviewWorthyActionCount = 5
private static var actionCount: Int {
get { UserDefaults.standard.integer(forKey: "actionCount") }
set { UserDefaults.standard.set(newValue, forKey: "actionCount") }
}
- 메소드 정의
// AppStoreReviewManager.swift
static func requestReviewIfAppropriate() {
}
- 해당 메소드가 불릴 때 카운트를 올려주는 코드
// in requestReviewIfAppropriate()
self.actionCount += 1
guard self.actionCount >= minimumReviewWorthyActionCount else { return }
- 버전 정보를 불러와서 해당 버전이 최초 버전이거나 현재 버전과 지난 버전이 다른 경우 리뷰를 새로 요청해야 하므로 분기문 추가
- lastVersion과 같은 값은, 별점 팝업에서 yes 버튼을 누른 경우, 값 입력
// in requestReviewIfAppropriate()
let bundleVersionKey = kCFBundleVersionKey as String // "CFBundleVersion"
let currentVersion = Bundle.main.object(forInfoDictionaryKey: bundleVersionKey) as? String // build version
let lastVersion = UserDefaults.standard.string(forKey: "lastVersion")
guard lastVersion == nil || lastVersion != currentVersion else { return }
- SKStoreReviewController.requestReview() 를 사용하여 리뷰 팝업 띄우기
if #available(iOS 14.0, *) {
guard let scene = UIApplication
.shared
.connectedScenes
.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
else { return }
SKStoreReviewController.requestReview(in: scene)
} else {
SKStoreReviewController.requestReview()
}
* 주의
- requestReview()를 요청해도 애플의 내부 코드에 의해서 요청이 무시될 수 있므로, "리뷰 요청하기" 버튼과 같은 것을 만들고 리뷰 팝업이 뜨게끔하는 코드를 짜지 말것
- TestFlight에서 리뷰 요청 테스트를 마음껏 가능 (리뷰를 해도 실제 반영 x)
- requestReview()을 여러번 요청해도 production환경에서는 일년에 3번 제한되고 requestReview()를 요청하는 일년 중 3번 랜덤으로 노출(debug환경에서는 계속 노출)
* 전체 코드: https://github.com/JK0369/ExRatingPopup
* 참고
https://developer.apple.com/documentation/storekit
https://www.raywenderlich.com/9009-requesting-app-ratings-and-reviews-tutorial-for-ios
'iOS 응용 (swift)' 카테고리의 다른 글
Comments