在 App 内部打开AppStore

2016-06-12  本文已影响431人  WeeverLu

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

Demo地址:
https://git.coding.net/Weever/StoreProductDemo.git

上一篇下一篇

猜你喜欢

热点阅读