반응형
나의 아이폰에 특정 앱이 미설치되어 있을때 해당 앱을 설치하기 위해 앱 스토어로 이동하게 되면 앱의 상태가 백그라운드로 변경되면서 스토어 앱이 포그라운드로 올라가게 된다.
이런 부분을 꺼려 하는 서비스가 있을 수 있기 때문에 현재 앱에서 벗어나지 않고 앱스토어 화면을 뛰울 수 있기를 바랄 경우 StoreKit.framework를 이용하는 SKStoreProductViewController를 모달창으로 뛰울 수 있다. iOS 6.0이상 부터 가능하다.
프로젝트에서 Build Phases 항목의 Link Binary With Libraries에 + 버튼을 눌러 StoreKit.framework를 추가한다.
SKStoreProductViewControllerDelegate 프로토토콜을 따른다고 명시하고 delegate Method를 선언한다.
SDK에 들어가서 보면 알겠지만 상당히 간결한 클래스다. 별것 없다. 열고 닫히면 끝.
#pragma mark SKStoreProductViewControllerDelegate
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
// 앱스토어 모달창이 닫힐 때 처리할 행동
[viewController dismissViewControllerAnimated:YES completion:nil];
}
모달창을 뛰우는 소스는 비교적 간단하다.
NSString *appUrl = @"https://apps.apple.com/kr/app/id944134670";
// iOS 6.0이상에서 SKStoreProductViewController를 이용하기 위한 어플리케이션 아이디
NSString *appId = @"944134670";
// SKStoreProductViewController를 사용할 수 있는지 여부 확인
if(NSClassFromString(@"SKStoreProductViewController")) {
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
storeController.delegate = self;
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : appId };
[storeController loadProductWithParameters:productParameters completionBlock:^(BOOL result, NSError *error) {
if (result) {
[self presentViewController:storeController animated:YES completion:^{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, SCREEN_WIDTH, 110)];
[v setBackgroundColor:[UIColor whiteColor]];
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 50, SCREEN_WIDTH, 30)];
[l setText:@"설치가 완료되면 다음 버튼을 눌러주세요"];
[l setTextAlignment:NSTextAlignmentCenter];
[l setBackgroundColor:[UIColor redColor]];
[l setTextColor:[UIColor yellowColor]];
[v addSubview:l];
[v setTag:1234];
[self.view.window addSubview:v];
}];
} else {
NSLog(@"error");
}
}];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appUrl] options:@{} completionHandler:^(BOOL success) {
//성공
NSLog(@"success");
}];
}
위의 예제는 모달창을 뛰운 다음 그 위에 별도의 화면을 구성할 수 있는 뷰를 추가하는 코드가 포함된 상태이다.
모달창으로 뛰운 앱스토어 화면에서 앱을 설치한 뒤에 해당 앱을 열게 되면 화면이 또 전환 되기 때문에 사용자에게 한번 더 인지를 줄 수 있도록 UI적으로 추가 장치를 할 수 있을거라는 의도에서 뷰를 넣는 코드를 추가해보았다.
우리 앱을 벗어나는 것이 싫다면 앱 내에서 별도의 앱을 설치할 수 있도록 유도할 때 사용할 수 있는 방법이다.
반응형
'프로그래밍 > Xcode-iOS' 카테고리의 다른 글
ITMS-90809: Deprecated API Usage, new apps that use UIWebView as of April 30, 2020 and app updates that use UIWebView as of December 2020. (0) | 2020.04.28 |
---|---|
iOS UIButton SetBackgroundColor forState: (0) | 2020.04.24 |
target별 Podfile 작성하는 방법, def-end (0) | 2020.03.16 |
iOS 13 widget dark mode 체크 (0) | 2020.02.28 |
UITableView cell selectedColor(highlighted) Change (0) | 2020.01.16 |