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