您的位置:首页 > 移动开发

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

2014-05-28 20:44 375 查看
在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]];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apple ios 6 ios