SKStoreProductViewController类是UIViewController的子类, 如果你对view controller比较熟悉的话,那SKStoreProductViewController使用起来也非常简单了。当你希望向用户展示App Store中产品时,你需要:
1.实例化一个SKStoreProductViewController类
2.设置它的delegate
3.把sotre product视图控制器显示给消费者
剩下的就交给操作系统来处理了。需要记住一点的是SKStoreProductViewController只能以模态的方式显示。SKStoreProductViewControllerDelegate协议定义了一个单独的方法—productViewControllerDidFinish:,当消费者离开App Store时会调用这个方法—一般是通过点击左上角画面中的取消按钮。通过给代理发送productViewControllerDidFinish:消息,操作系统就会把控制权返回到你的程序。当然你不能忘了 只支持IOS6.0及其以上
.h
#import <Foundation/Foundation.h>
@interface InlineAppstore : NSObject
+ (InlineAppstore*)sharedInstance;
- (void)showAppInApp:(NSString *)_appId;
@end
.m
#import "InlineAppstore.h"
#import "AppDelegate.h"
#import <StoreKit/StoreKit.h>
@interface InlineAppstore () <SKStoreProductViewControllerDelegate>
@end
@implementation InlineAppstore
+ (InlineAppstore*)sharedInstance {
static InlineAppstore* pInlineAppstore = nil;
@synchronized(self) {
if (pInlineAppstore == nil) {
pInlineAppstore = [[self alloc] init];
}
}
return pInlineAppstore;
}
- (void)showAppInApp:(NSString *)_appId {
Class storeVC = NSClassFromString(@"SKStoreProductViewController");
if (storeVC != nil) {
SKStoreProductViewController *_SKSVC = [[SKStoreProductViewController alloc] init];
_SKSVC.delegate = self;
[_SKSVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier: _appId}
completionBlock:^(BOOL result, NSError *error) {
if (result) {
[[AppDelegate getInstance].navController presentViewController:_SKSVC
animated:YES
completion:nil];
}
else{
NSLog(@"%@",error);
}
}];
}
else{
//低于iOS6没有这个类
NSString *_idStr = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/us/app/id%@?mt=8",_appId];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:_idStr]];
}
}
#pragma mark - SKStoreProductViewControllerDelegate
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
[viewController dismissViewControllerAnimated:YES completion:nil];
}