iOS 6 SDK: 在应用内展示App Store (storekit)

在ios6之前好多应用想在app内直接可以评论或者跳转链接下载其他的app,但是必须跳出到自己的aoo了,然后就无法回到自己的app。幸运的是Apple在ios增加了这个sotrekit这个强大的framework,可以让用户在不离开当前应用的前提下展示App Store中的其他产品。具体我们还是看下怎么实现吧:

 1、创建一个简单的ios storekitdemo 工程:

iOS 6 SDK: 在应用内展示App Store (storekit)_第1张图片

iOS 6 SDK: 在应用内展示App Store (storekit)_第2张图片

2、添加storekit.framework

iOS 6 SDK: 在应用内展示App Store (storekit)_第3张图片

3、在ViewController.h文件中引入

#import 

同时添加SKStoreProductViewControllerDelegate代理

@interface ViewController : UIViewController

4、 ViewController.m文件中添加代码

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button setTitle:@"Go to App Store" forState:UIControlStateNormal];
    [button setFrame:CGRectMake(0.0, 0.0, 200.0, 44.0)];
    [button setCenter:self.view.center];
    [self.view addSubview:button];
    [button addTarget:self  action:@selector(openAppStore:) forControlEvents:UIControlEventTouchUpInside];
  
}
6添加button事件

-(void) openAppStore:(id)sender {
        [self showIndicator];
        SKStoreProductViewController *_SKSVC = [[SKStoreProductViewController alloc] init];
        _SKSVC.delegate = self;
        [_SKSVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:@"743484337"}
                          completionBlock:^(BOOL result, NSError *error) {
                              if (result) {
                                  [self presentViewController:_SKSVC
                                                     animated:YES
                                                   completion:nil];
                              }
                              else{
                                  NSLog(@"%@",error);
                              }
                            [self hideIndicator];
                          }];
    
}


 这个方法的重点有二个 
  

1、我们写对自己想要跳转的app number就好了

2、completion block。

当App store请求结束时会调用这个completion block。在完成的block中,我们要核实是否有错误遗漏,并把store product 视图控制器展示给用户。请记住,即使用户没有离开你的程序,操作系统仍然会在内部进行与App store的连接。由于在请求App Store过程中,会需要稍微长的一段时间,也就是说,最好在请求还没有返回响应时给用户显示一个风火轮。一旦请求完成(成功或者不成功),已经完成的 block将会允许我们解除activity indicator。

那么我们就要一个UIActivityIndicatorView来给用户提示进度。

- (void)showIndicator //显示加载菊花
{
   indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    indicatorView.autoresizingMask =
    UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin
    | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
    [self.view addSubview:indicatorView];
    [indicatorView sizeToFit];
    [indicatorView startAnimating];
    indicatorView.center = self.view.center;
}

- (void)hideIndicator    //隐藏加载菊花
{
    [indicatorView stopAnimating];
}

最后我们在执行下 SKStoreProductViewControllerDelegate方法

#pragma mark- SKStoreProductViewControllerDelegate
-(void) productViewControllerDidFinish:(SKStoreProductViewController *)viewController
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

 然后Build and Run

虽然苹果表示SKStoreProductViewController类可以向用户展示其他app,但这是一种理想的在用户不离开当前app的情况下,让用户去App Store评分的方法。


iOS 6 SDK: 在应用内展示App Store (storekit)_第4张图片

iOS 6 SDK: 在应用内展示App Store (storekit)_第5张图片


最后在完善下我们的跳用方法,做一个ios系统的判断

-(void) openAppStore:(id)sender {
    Class storeVC = NSClassFromString(@"SKStoreProductViewController");
    if (storeVC != nil) {
        [self showIndicator];
        SKStoreProductViewController *_SKSVC = [[SKStoreProductViewController alloc] init];
        _SKSVC.delegate = self;
        [_SKSVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:@"743484337"}
                          completionBlock:^(BOOL result, NSError *error) {
                              if (result) {
                                  [self presentViewController:_SKSVC
                                                     animated:YES
                                                   completion:nil];
                              }
                              else{
                                  NSLog(@"%@",error);
                              }
                            [self hideIndicator];
                          }];
    }
    else{
        //低于iOS6没有这个类
        NSString *_idStr = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/us/app/id%@?mt=8",@"743484337"];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:_idStr]];
    }
}





你可能感兴趣的:(iphone开发学习和总结)