iOS 7 上禁用 SKStoreProductViewController 速率

ios

1个回答

写回答

18728839951

2025-06-13 14:00

+ 关注

IOS
IOS

IOS 7之前,开发者可以使用SKStoreProductViewController来在应用内展示App Store中的产品页面。然而,在IOS 7上,苹果公司针对这一功能进行了限制,使得开发者无法在应用内直接展示App Store产品页面。这个限制给开发者带来了一些困扰,但是通过一些技巧和方法,我们仍然可以实现类似的功能。

案例代码:

Swift

import UIKit

import StoreKit

class ViewController: UIViewController {

// 在这里定义一个按钮,点击按钮时展示产品页面

private lazy var button: UIButton = {

let button = UIButton(type: .system)

button.setTitle("打开产品页面", for: .normal)

button.addTarget(self, action: #selector(showProductPage), for: .touchUpInside)

button.translatesAutoresizingMaskIntoConstrAInts = false

return button

}()

override func viewDidLoad() {

super.viewDidLoad()

view.addSubview(button)

// 设置按钮的约束

NSLayoutConstrAInt.activate([

button.centerXAnchor.constrAInt(equalTo: view.centerXAnchor),

button.centerYAnchor.constrAInt(equalTo: view.centerYAnchor)

])

}

@objc private func showProductPage() {

// 在按钮的点击事件中,使用SKStoreProductViewController展示产品页面

let storeViewController = SKStoreProductViewController()

storeViewController.delegate = self

let parameters = [SKStoreProductParameterITunesItemIdentifier: "APP_ID"]

storeViewController.loadProduct(withParameters: parameters, completionBlock: nil)

present(storeViewController, animated: true, completion: nil)

}

}

extension ViewController: SKStoreProductViewControllerDelegate {

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {

// 用户关闭了产品页面,需要手动dismiss

viewController.dismiss(animated: true, completion: nil)

}

}

解决方案

IOS 7上禁用SKStoreProductViewController速率的问题可以通过使用SFSafariViewController来解决。SFSafariViewController是一个内置的浏览器视图控制器,可以在应用内展示网页。我们可以利用这一特性,在应用内打开App Store中产品页面的链接,从而实现类似的功能。

使用SFSafariViewController展示产品页面

首先,我们需要导入SafariServices框架,并在应用的Info.plist文件中添加一个URL Scheme来处理从Safari返回应用的操作。

Swift

import UIKit

import SafariServices

class ViewController: UIViewController {

// 在这里定义一个按钮,点击按钮时展示产品页面

private lazy var button: UIButton = {

let button = UIButton(type: .system)

button.setTitle("打开产品页面", for: .normal)

button.addTarget(self, action: #selector(showProductPage), for: .touchUpInside)

button.translatesAutoresizingMaskIntoConstrAInts = false

return button

}()

override func viewDidLoad() {

super.viewDidLoad()

view.addSubview(button)

// 设置按钮的约束

NSLayoutConstrAInt.activate([

button.centerXAnchor.constrAInt(equalTo: view.centerXAnchor),

button.centerYAnchor.constrAInt(equalTo: view.centerYAnchor)

])

}

@objc private func showProductPage() {

// 在按钮的点击事件中,使用SFSafariViewController展示产品页面

let urlString = "Apple.com/app/APP_ID">https://itunes.Apple.com/app/APP_ID</a>"

if let url = URL(string: urlString) {

let safariViewController = SFSafariViewController(url: url)

present(safariViewController, animated: true, completion: nil)

}

}

}

优势和劣势

使用SFSafariViewController展示产品页面的优势是可以直接在应用内打开App Store中产品页面的链接,无需离开应用。另外,SFSafariViewController还提供了浏览器的一些功能,例如导航栏、工具栏和Safari的用户体验。

然而,与SKStoreProductViewController相比,SFSafariViewController也存在一些劣势。首先,SFSafariViewController无法像SKStoreProductViewController那样直接在应用内展示用户的评价和评论。其次,SFSafariViewController不是一个完全自定义的视图控制器,开发者无法自定义界面和交互体验。

虽然在IOS 7上禁用了SKStoreProductViewController的速率,但是通过使用SFSafariViewController,我们仍然可以实现在应用内展示App Store中产品页面的功能。开发者可以根据自己的需求选择使用SKStoreProductViewController或SFSafariViewController来展示产品页面。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号