본문 바로가기

Design Thinking

StoreKit1) SwiftUI 앱에서 HIG를 만족하는 리뷰 요청기능 만들기

앱 내에서 리뷰 요청을 어떻게 하는 지 알아보자.

 

앱 출시 때 마다 사용자들한테 리뷰를 받는 것이 필자에겐 정말 큰 행복이다. 근데 이번 SeoulSalam은 다운로드 수가 꽤 나오는 데에도 불구하고 이용자 리뷰가 생각보다 안 나와서 섭섭했다...

 

리뷰 요청을 위해서는 StoreKit에 있는 SKStoreReviewController의 requestRiview() 함수를 불러와줘야 한다.

 

 

그리고 구현 전에 확인해야할 사항이 있다!!

 

바로 애플 개발자 웹사이트의 앱스토어 리뷰HIG리뷰인데, 해당 사안들을 전부 다 확인하면 좋지만, 몇 가지 중요한 부분들을 해석하고 공유해드리려고 한다.

 

 

1. You can prompt for ratings up to three times in a 365-day period.

리뷰요청을 1년에 딱 세 번 만!!

 

 

2. Avoid Pesting People. Repeated rating prompts can be irritating, and may even negatively influence the user’s opinion of your app. Allow at least a week or two between rating requests and only prompt again after the user has demonstrated additional engagement with your app.

반복적인 리뷰요청으로 사람들을 괴롭히면 앱에 부정적인 영향이 갈 수 있습니다. 요청 사이엔 최소 1~2 주의 시간이 필요합니다.

 

HIG의 Best Practice

 

이제 실제 코드인데, 많은 예제들이 UIKit이었기 때문에 SwiftUI에서 조금 더 간편하게 뷰 모디파이어를 이용하여 구현을 하는 것으로 했다.

 

import SwiftUI
import StoreKit

struct ReviewCounter: ViewModifier {
    @AppStorage("reviewCounter") private var reviewCounter = 0

    func body(content: Content) -> some View {
        content
            .onAppear {
                reviewCounter += 1
                print("reviewCounter", reviewCounter)
            }
            .onDisappear {
                if reviewCounter > 3 {
                    reviewCounter = 0
                    DispatchQueue.main.async {
                        if let scene = UIApplication.shared.connectedScenes
                                .first(where: { $0.activationState == .foregroundActive })
                                as? UIWindowScene {
                            SKStoreReviewController.requestReview(in: scene)
                        }
                    }
                }
            }
    }
}

extension View {
    func reviewCounter() -> some View {
        modifier(ReviewCounter())
    }
}

 

우선 @AppStorage로 카운터를 저장할 변수를 만들어주고, 뷰 모디파이어로 컨텐트가 OnAppear일 때엔 숫자를 올리도록 하고 OnDisappear일 때엔 특정 횟수가 넘어갔을때에 if let scene ~ 부터 해당하는 코드로 리뷰 요청을 하는 창을 불러온다.

 

테스트를 위해 필자는 세 번이 초과되면 불러오는 것으로 하였고, 그 결과 :

 

 

성공적으로 리뷰 요청을 할 수 있었다.

 

참고로 필자는 HIG의 요건에 맞도록 하기 위해서 횟수를 50회로 조정하였다. 그렇다면 1~2 주 사이에 다시 뜨는 일은 없을 테니...