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

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

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



2、添加storekit.framework


3、在ViewController.h文件中引入

#import <StoreKit/StoreKit.h>

同时添加SKStoreProductViewControllerDelegate代理

@interface ViewController : UIViewController<SKStoreProductViewControllerDelegate>

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系统的判断

-(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]];
    }
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值