一、第 1 种:直接跳转 demo
1.1、Swift 版本
/// 跳转 @objc func click1() { let url = URL(string: "itms-apps://itunes.apple.com/app/id 1142110895") // 注意: 跳转之前, 可以使用 canOpenURL: 判断是否可以跳转 if !UIApplication.shared.canOpenURL(url!) { // 不能跳转就不要往下执行了 return } if #available(iOS 10.0, *) { UIApplication.shared.open(url!, options: [:]) { (success) in if (success) { print("10以后可以跳转url") }else{ print("10以后不能完成跳转") } } } else { // Fallback on earlier versions let success = UIApplication.shared.openURL(url!) if (success) { print("10以下可以跳转") }else{ print("10以下不能完成跳转") } } }
提示:上面 id429849944 中 id 后面的数字是app的唯一id,我们可以在app store 获取任意一个app的id
- 如果app未上线我们可以登录apple开发者账号,点开自己创建的应用获取app唯一的id
- 1.2、OC版本
- (void)click1 { NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id1142110895"]; if (@available(iOS 10.0, *)){ [[UIApplication sharedApplication]openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey:@YES} completionHandler:^(BOOL success) { if (success) { NSLog(@"10以后可以跳转url"); }else{ NSLog(@"10以后不可以跳转url"); } }]; }else{ BOOL success = [[UIApplication sharedApplication]openURL:url]; if (success) { NSLog(@"10以前可以跳转url"); }else{ NSLog(@"10以前不可以跳转url"); } } }
二、第 2 种: 应用内跳转 demo
- 2.1、Swift 版本
- 导入头文件
import StoreKit
- 添加跳转
@objc func click2() { let storeProductVC = StoreKit.SKStoreProductViewController() storeProductVC.delegate = self let dict = [SKStoreProductParameterITunesItemIdentifier: "1142110895"] storeProductVC.loadProduct(withParameters: dict) { (result, error) in guard error == nil else { return } } present(storeProductVC, animated: true, completion: nil) }
- 实现协议回调
extension ViewController: SKStoreProductViewControllerDelegate { func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) { viewController.dismiss(animated: true, completion: nil) } }
- 2.2、OC版本
- 导入头文件
#import <StoreKit/StoreKit.h>
,遵守协议:<SKStoreProductViewControllerDelegate>
- 添加跳转
//2:实现代理SKStoreProductViewControllerDelegate SKStoreProductViewController *storeProductViewContorller = [[SKStoreProductViewController alloc] init]; storeProductViewContorller.delegate = self; //加载一个新的视图展示 [storeProductViewContorller loadProductWithParameters: @{SKStoreProductParameterITunesItemIdentifier : @"1142110895"} completionBlock:^(BOOL result, NSError *error) { //回调 if(error){ NSLog(@"错误%@",error); }else{ //应用界面 [self presentViewController:storeProductViewContorller animated:YES completion:nil]; } }];
- 实现协议(取消按钮监听)回调
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController{ [self dismissViewControllerAnimated:YES completion:nil]; }