본문 바로가기
프로그래밍/Xcode-iOS

모달창으로 앱스토어 링크 열기(SKStoreProductViewController)

by Mr-후 2020. 4. 17.
반응형

나의 아이폰에 특정 앱이 미설치되어 있을때 해당 앱을 설치하기 위해  앱 스토어로 이동하게 되면 앱의 상태가 백그라운드로 변경되면서 스토어 앱이 포그라운드로 올라가게 된다. 

이런 부분을 꺼려 하는 서비스가 있을 수 있기 때문에 현재 앱에서 벗어나지 않고 앱스토어 화면을 뛰울 수 있기를 바랄 경우 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적으로 추가 장치를 할 수 있을거라는 의도에서 뷰를 넣는 코드를 추가해보았다. 

우리 앱을 벗어나는 것이 싫다면 앱 내에서 별도의 앱을 설치할 수 있도록 유도할 때 사용할 수 있는 방법이다. 

 

반응형