在ios6之前好多应用想在app内直接可以评论或者跳转链接下载其他的app,但是必须跳出到自己的aoo了,然后就无法回到自己的app。幸运的是Apple在ios增加了这个sotrekit这个强大的framework,可以让用户在不离开当前应用的前提下展示App Store中的其他产品。具体我们还是看下怎么实现吧:
1、创建一个简单的ios storekitdemo 工程:
2、添加storekit.framework
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];
}
#pragma mark- SKStoreProductViewControllerDelegate
-(void) productViewControllerDidFinish:(SKStoreProductViewController *)viewController
{
[self dismissViewControllerAnimated:YES completion:nil];
}
然后Build and Run
虽然苹果表示SKStoreProductViewController类可以向用户展示其他app,但这是一种理想的在用户不离开当前app的情况下,让用户去App Store评分的方法。
-(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]];
}
}