-
인앱리뷰(In-App Review) 연동하기iOS 2023. 11. 9. 10:02
안녕하세요. 그린입니다 🍏
이번 포스팅에서는 인앱리뷰(In-App Review) 연동하는 방법에 대해 학습해보겠습니다 🙋🏻
우선 인앱리뷰가 무엇인지 부터 알아보겠습니다.
인앱리뷰 (In-App Review)
인앱리뷰는 우리가 제공하는 앱 속에서 앱의 앱스토어 평점 및 리뷰를 남길 수 있도록 요청하는 기능입니다.
즉, 많이들 앱을 사용하다보면 이 앱의 평점을 남겨달라는 팝업이 뜰 경우를 종종 본적이 있으실거에요.
쉽게 말해, 앱 내에서 평점과 리뷰를 요청하는 기능이라고 정리할 수 있습니다.
그런데 이 인앱리뷰의 코드를 심어주어도 인앱리뷰를 띄우는 결정은 애플 내부 시스템에서 해주기에 개발자가 직접 컨트롤할 수 없는 부분들이 많습니다 🥲
인앱리뷰의 특징들을 조금 살펴볼까요?
인앱리뷰 특징
1️⃣ 시스템적으로 1년에 최대 3번까지만 사용자에게 노출됩니다.
즉, 코드에서 조건없이 계속 노출시키도록 구현이 되어있어도 내부 시스템에 의하여 1년에 최대 3번까지만 노출되는것이죠.아무래도 인앱리뷰를 남발하여 어뷰징하지 않도록 애플에서 관리하는것같고 이 내부 시스템이 어떤 방식으로 동작하고 정해졌는지는 아직도 시크릿합니다.
아무래도 민감한 정책쪽인 부분이다보니 계속 시크릿할것 같습니다.
2️⃣ 사용자가 앱에서 특정 작업을 수행하는것을 방해하지 않는 타이밍에 노출해야합니다.
즉, 사용자가 일련의 행동을 하는 도중 노출을 시키는것은 가이드에 위반하며 어떤 이벤트 흐름이 끝났을때 노출시키는것을 권고합니다.
또한, 사용자가 실제 해당 앱을 충분히 경험해보고 평가할 수 있는 단계가 되었을때 노출해야 합니다.
3️⃣ 앱 실행 즉시 노출시키지 말아야 합니다.
첫 앱 실행이 아니더라도 앱을 실행하는 즉시 노출되는것은 가이드에 위반됨으로 피해야 합니다.
4️⃣ 사용자 액션의 결과로 인해 노출을 요청하면 안됩니다.
어떠한 유저 액션의 결과라는 조건으로 인해서 노출 시키는것은 피해야합니다.그런데, 사실 2번의 이벤트 흐름이 끝났을때도 사용자의 액션의 결과로 볼 수 있을것 같은데 조금 모호하긴 하네요.
예를들어, 어떤 상품을 주문하기를 눌러 주문이 완료되었을때도 액션의 결과로 볼 수 있을 것 같은데 이때도 인앱리뷰 팝업이 종종 노출되는 앱들이 있거든요.
요건 좀 더 알아봐야겠네요 🤔
추가로 하나 더 알아본 사실은 인앱리뷰 노출이 어떤 대가성을 치른다거나 보상의 목적으로 노출되는 경우 심사 리젝이 됩니다.
5️⃣ 사용자는 인앱리뷰 요청을 기기에 표시되지 않도록 비활성화 할 수도 있습니다.
설정 -> 앱스토어 -> 앱 내 평가 및 리뷰 항목 ON / OFF6️⃣ 디버그용 빌드 같은 개발 환경에서는 1년에 3번 혹은 다른 조건과 관계없이 코드가 심어진 조건대로 무조건 항상 인앱리뷰가 노출됩니다.
7️⃣ 테스트플라이트에서는 인앱리뷰가 노출되지 않습니다.8️⃣ 인앱리뷰는 해당 앱의 평점이나 리뷰를 작성하지 않은 사용자에게만 노출됩니다.
9️⃣ 인앱리뷰 요청은 최소 1~2주 간격을 두고 요청하는것이 좋습니다.
🔟 인앱리뷰로 인한 콜백에 대한 결과 등은 제어하거나 감지하지 못합니다.
이렇게 정리해봤습니다아!
종합적으로 판단해보면 인앱리뷰는 사용자의 경험을 빼앗지 않는 선에서 긍정적인 피드백을 받기 위해 노출시키려는 의도가 있습니다.
그렇기에, 사용자가 해당 앱을 긍정적으로 평가할 수 있는 타이밍에 노출시키는것이 좋습니다.
또한, HIG에 제시된 인앱리뷰에 대한 가이드들을 잘 지켜야지 심사 리젝을 당하지 않을 수 있겠죠!?
그럼 이제 인앱리뷰를 한번 구현해볼까요?
그전에 인앱리뷰를 구현하려면 우리는 StoreKit이라는 프레임워크를 간단히 알아야합니다.
인앱리뷰의 기능이 이 StoreKit 프레임워크에 존재하거든요!
StoreKit
앱 내 구매 및 App Store와의 상호 작용을 지원하는 프레임워크
StoreKit 프레임워크는 아래와 같은 기능들을 제공해줍니다.
1️⃣ In-App Purchase
콘텐츠 및 서비스에 대한 인앱 구매를 제공하고 홍보할 수 있습니다.
2️⃣ App transaction
App Store 서명 거래를 통해 고객의 앱 구매를 확인할 수 있습니다.
3️⃣ Ad network attribution
광고 기반 앱 설치를 검증할 수 있습니다.
4️⃣ Recommendations
타사 콘텐츠에 대한 권장 사항을 제공할 수 있습니다.
5️⃣ Reviews
사용자에게 App Store 평가 및 리뷰를 요청할 수 있습니다.
6️⃣ Messages
앱에 App Store 메시지를 표시할 수 있습니다.
이 외에도 StoreKit 프레임워크를 사용해 Apple Music 기능이나 외부 구매, 외부 링크 계정, 결제 방식 바인딩 등을 제공해줍니다.
자 그럼 이렇게 간단히 StoreKit이라는 프레임워크에서 인앱리뷰를 지원하는것을 알아봤습니다!
이제 진짜 주인공 인앱리뷰 구현하러 가시죠~
인앱리뷰(In-App Review) 구현하기
인앱리뷰를 요청하는것에는 두가지 방법이 있습니다.
하나는 앱에서 평가 및 리뷰를 팝업으로 띄우고 거기서 마무리 짓는 방식이고 하나는 실제 해당 앱의 앱 스토어의 리뷰 페이지로 딥링크 시켜 작성하게 하는 방식입니다.
우선 앱에서 평가 및 리뷰 팝업을 띄우는것부터 보시죠!
간단히 SwiftUI에서 그 구현을 해보겠습니다.
import SwiftUI import StoreKit struct ContentView: View { var body: some View { VStack { Button( action: { if let scene = UIApplication.shared.connectedScenes .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { SKStoreReviewController.requestReview(in: scene) } }, label: { Text("리뷰 요청하기") } ) } .padding() } }
코드 아주 간단하죠?
물론, 이걸 아키텍쳐별로 적용시킬 수도 있고 따로 별도 Services로 빼서 작업해도 됩니다~
간단히 코드 설명을 해볼까요?
우선 StoreKit을 임포트해줘야 됩니다.
그리고 해당 버튼이 눌렸을때 저는 리뷰 요청을 action에 넣어뒀어요.
현재 최상단에 해당 인앱리뷰 노출 팝업이 씬으로 노출 될 수 있게 scene이 포그라운드에 있는 가장 첫번째 씬으로 찾아줍니다.
그리고 SKStoreReviewController의 requestReview 메서드를 이용해 인앱리뷰 팝업을 노출 시킬 수 있습니다.
SKStoreReviewController는 사용자에게 앱 스토어 평점 및 리뷰를 요청하는 프로세스를 제어하는 개체입니다.
iOS 14이전에는 requestReview() 메서드로 사용을 했으나 iOS 14 이후에는 requestReview(in windowScene: UIWindowScene) 메서드를 통해 사용해야 합니다.
그럼 한번 어떻게 동작하는지 확인해볼까요?
실제 이렇게 잘 동작하는것을 확인할 수 있습니다!
그런데 보시면, 실제 평점을 주더라도 Submit, 제출을 할 순 없습니다.
당연히 현재 앱 스토어에 올라가있는 상용된 앱이 아니니까요 🥲
요 부분들은 실제 심사 > 배포 후 확인해봐야 합니다!
그런데 여기서도 평점 후에 제출을 하면 사실 리뷰 코멘트를 작성하는 시트 노출은 옵셔널입니다.
즉, 애플 내부 시스템에서 제어하기에 개발자가 컨트롤 할 수 없습니다.
그렇기에, 이 리뷰 코멘트를 무조건 작성하게 하려면 앱에서 모든것을 작성하게 하는것이 아닌 해당 앱 스토어 리뷰 페이지로 이동시키는 방법이 더 적절할것 같습니다.
그게 두번째 방법일것 같아요.
그럼 두번째 방법 구현을 한번 볼까요?
import SwiftUI struct ContentView: View { var body: some View { VStack { Button( action: { let appID = "해당하는 App ID" let urlString = "https://apps.apple.com/app/id\(appID)?action=write-review" if let url = URL(string: urlString) { UIApplication.shared.open(url) } }, label: { Text("리뷰 요청하기") } ) } .padding() } }
이렇게 구현하면 StoreKit을 사용하지 않고 단순히 앱 스토어 리뷰 페이지로 이동시킬 수 있습니다.
당연히 해당하는 App ID를 적절히 넣어줘야겠죠?
현재는 테스트 앱이라 확인은 해볼 수 없지만 요런식으로 구현하시면 충분히 가능할겁니다 😀
마무리
인앱리뷰가 생각보다 가이드도 많고 개발자가 컨트롤 할 수 있는 부분도 적긴하지만 그래도 어느 시점에는 앱에 필요한 기능이라고 생각이 듭니다.
가장 중요하게 도입전 고려해봐야할 부분은 사실, 기능보다 해당 인앱리뷰가 노출될때 사용자가 긍정적인 평가를 남겨줄 수 있는 그런 흐름에서 노출시키는것이 가장 중요하다고 생각해요.
그렇기에 기술 검토보다는 기획적으로 검토가 제일 필요합니다!
모두 앱의 5.0은 뭔가 리뷰 조작같고... 4.8 평점을 위하여 🥂
레퍼런스
'iOS' 카테고리의 다른 글
CI & DI에 대해 알아보기 🔑 (45) 2023.11.20 ATS (App Transport Security) 톺아보기 (33) 2023.11.14 Event Capturing (38) 2023.10.26 Event Bubbling (44) 2023.10.23 메모리 덤프 분석 (feat. fridump) (44) 2023.09.14