在 App 内部打开 AppStore,系统本身就有 API,需要 iOS6 以上才可以使用, 由于目前大部分 App 都在 iOS6至少,故以下不区分了
导入
需要导入StoreKit.framework
,
在使用的地方引入头文件#import <StoreKit/StoreKit.h>
,iOS6以上才可以使用
主要代码
设置 AppId
static NSString * const kAppId = @"425349261"; // 测试使用 网易新闻 AppId
跳转代码
/** 跳到 AppStore 系统App*/
- (void)goAppStoreInOutside:(NSString *)appId
{
// 这里有国内外区域之分?
NSString *urlString = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/us/app/id%@?mt=8", appId];
NSURL *url = [NSURL URLWithString:urlString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
}
/** 在 App 内显示 AppStore,如果 AppId 有误,貌似就没反应,iOS6以上才可以使用 */
- (void)goAppStoreInApp:(NSString *)appId
{
if (!appId || appId.length == 0) {
NSAssert(appId && appId.length != 0, @"AppId 不能为空");
return;
}
SKStoreProductViewController *skStoreProductViewController = [[SKStoreProductViewController alloc] init];
skStoreProductViewController.delegate = self; // SKStoreProductViewControllerDelegate
NSDictionary *parameters = @{ SKStoreProductParameterITunesItemIdentifier: appId };
// 先presentViewController再调用loadProduct,可以先弹出界面,否则需要等loadProduct一会才弹出来
[self presentViewController:skStoreProductViewController animated:YES completion:nil];
[skStoreProductViewController loadProductWithParameters:parameters completionBlock:nil];
}
#pragma mark - SKStoreProductViewControllerDelegate
// 点击左上角“取消”和 右上角“Store”均调用此方法
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController
{
[viewController dismissViewControllerAnimated:YES completion:nil];
}