project/Kuring(공지알림)

[iOS] inAppReview(StoreKit)✨

lgvv 2022. 3. 6. 10:50

inAppReview(StoreKit)✨

 

✅ StoreKit을 활용해보기

 

애플 공식문서

https://developer.apple.com/documentation/storekit

 

Apple Developer Documentation

 

developer.apple.com

 

애플 공식문서

 

✅ StoreKit

인 앱 구매나 애플 뮤직 등 다른 것들도 지원하지만, 내가 사용할 것은 리뷰 작성하는 부분이다!

 

🟠 코드

import UIKit
import StoreKit

class AppStoreReviewManager {
    /// action count 값이 3일 때 `true` 입니다.
    static var isReviewable: Bool { UserDefaultManager.inAppReviewCount == 3 }
    
    static func requestReviewIfAppropriate() {
        guard UserDefaultManager.inAppReviewCount <= 3 else { return }
        UserDefaultManager.inAppReviewCount += 1

        guard isReviewable else { return }
        let scene = UIApplication.shared.connectedScenes.first { $0.activationState == .foregroundActive }
        if let scene = scene as? UIWindowScene {
            SKStoreReviewController.requestReview(in: scene)
        }
    }
}

 

🟠 UserDefaultManager

import UIKit

class UserDefaultManager {
    enum Key: String {
        /// 인앱 리뷰를 위한 키
        case inAppReviewCount
    }
    
    @UserDefault(key: .inAppReviewCount, defaultValue: 0)
    static var inAppReviewCount: Int
}

@propertyWrapper
struct UserDefault<T> {
    let key: UserDefaultManager.Key
    let defaultValue: T
    let storage: UserDefaults
    
    var wrappedValue: T {
        get { self.storage.object(forKey: self.key.rawValue) as? T ?? self.defaultValue }
        set { self.storage.set(newValue, forKey: self.key.rawValue) }
    }
    
    init(key: UserDefaultManager.Key, defaultValue: T, storage: UserDefaults = .standard) {
        self.key = key
        self.defaultValue = defaultValue
        self.storage = storage
    }
}

 

✅ 특정 액션에 아래 코드를 삽입해서 이벤트를 처리한다.

AppStoreReviewManager.requestReviewIfAppropriate

 

 

 

✅ 이렇게 나타난다..! 

결과