在应用内购买测试(看不到我的产品)
In app purchase testing (can't see my products)
所以我按照教程尝试使用 IAP 制作测试应用程序。
1) 我创建了新的 App ID
2) 添加了两个ID为iapdemo_extra_colors_colect_1和iapdemo_extra_colors_colect_2
的消耗品
3) 在 iTunes 连接中创建测试用户
4) 创建并应用。
5) 使用 tableView 视图制作单独的购买页面
6) 复制 App ID bundle id 到 info.plist 到 "Bundle identifier"
7) 而我的购买页面代码是:
import UIKit
import StoreKit
class IAPurchaceViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, SKProductsRequestDelegate {
var productIDs: [String!] = []
var productsArray: [SKProduct!] = []
@IBOutlet weak var tblProducts: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tblProducts.delegate = self
tblProducts.dataSource = self
productIDs.append("iapdemo_extra_colors_colect_1")
productIDs.append("iapdemo_extra_colors_colect_2")
requestProductInfo()
}
func requestProductInfo() {
if SKPaymentQueue.canMakePayments() {
let productIdentifiers = NSSet(array: productIDs)
let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productRequest.delegate = self
productRequest.start()
} else {
print("Cannot perform In App Purchases.")
}
}
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
if response.products.count != 0 {
for product in response.products {
productsArray.append(product )
}
tblProducts.reloadData()
} else {
print("There are no products.")
}
if response.invalidProductIdentifiers.count != 0 {
print(response.invalidProductIdentifiers.description)
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return productsArray.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 80.0
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("idCellProduct", forIndexPath: indexPath)
let product = productsArray[indexPath.row]
cell.textLabel?.text = product.localizedTitle
cell.detailTextLabel?.text = product.localizedDescription
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
// MARK: IBAction method implementation
@IBAction func dismiss(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
// MARK: UITableView method implementation
}
当我来到购买页面时,我希望看到产品列表,但我只看到“没有产品。
["iapdemo_extra_colors_colect_1", "iapdemo_extra_colors_colect_2"]" 在控制台中。
我尝试了更多教程和 apple 示例代码来检查我的应用内购买,但没有成功。
在我下载 Apple 示例代码以检查应用内购买后
https://developer.apple.com/library/ios/samplecode/sc1991/StoreKitSuite.zip
并且我在 invalidProductIdentifiers 数组中获得了我的单个产品 ID。所以我找到了故障排除列表(来自 Apple):
- 您没有使用明确的 App ID。
- 如果您或 App Review 拒绝了您在 iTunes Connect 中的最新二进制文件。
- 您没有清除在 iTunes Connect 中销售的应用内购买产品。
- 您没有使用与您明确的应用程序 ID 关联的配置文件对您的应用程序进行签名。
- 您可能已经修改了您的产品,但这些更改尚未适用于所有 App Store 服务器。
- 您没有完成所有财务要求。有关详细信息,请参阅合同、税务和银行信息。
- 您的产品是 Apple 托管的产品,其内容尚未上传到 iTunes Connect。
我得到了答案
- 我使用明确的应用程序 ID
- 我的应用程序没有被拒绝,因为它正在测试,我没有尝试提交它
- 我有单品在售
- 配置文件设置为自动。我也尝试制作一个并在 xcode
中使用它
- 我一个小时没有修改任何东西(可能我需要再等一会儿?)
- 填写税务和银行账户
- 不是 Apple 托管的
大家有什么想法吗?
问题出在配置文件中。由于某种原因,它不正确,所以我自己制作了它,并且开始运行良好。
此外,我发现如果您的证书有问题也可以解决这个问题,但我的情况并非如此!
希望对大家有所帮助!
所以我按照教程尝试使用 IAP 制作测试应用程序。
1) 我创建了新的 App ID
2) 添加了两个ID为iapdemo_extra_colors_colect_1和iapdemo_extra_colors_colect_2
的消耗品3) 在 iTunes 连接中创建测试用户
4) 创建并应用。
5) 使用 tableView 视图制作单独的购买页面
6) 复制 App ID bundle id 到 info.plist 到 "Bundle identifier"
7) 而我的购买页面代码是:
import UIKit
import StoreKit
class IAPurchaceViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, SKProductsRequestDelegate {
var productIDs: [String!] = []
var productsArray: [SKProduct!] = []
@IBOutlet weak var tblProducts: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tblProducts.delegate = self
tblProducts.dataSource = self
productIDs.append("iapdemo_extra_colors_colect_1")
productIDs.append("iapdemo_extra_colors_colect_2")
requestProductInfo()
}
func requestProductInfo() {
if SKPaymentQueue.canMakePayments() {
let productIdentifiers = NSSet(array: productIDs)
let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productRequest.delegate = self
productRequest.start()
} else {
print("Cannot perform In App Purchases.")
}
}
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
if response.products.count != 0 {
for product in response.products {
productsArray.append(product )
}
tblProducts.reloadData()
} else {
print("There are no products.")
}
if response.invalidProductIdentifiers.count != 0 {
print(response.invalidProductIdentifiers.description)
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return productsArray.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 80.0
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("idCellProduct", forIndexPath: indexPath)
let product = productsArray[indexPath.row]
cell.textLabel?.text = product.localizedTitle
cell.detailTextLabel?.text = product.localizedDescription
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
// MARK: IBAction method implementation
@IBAction func dismiss(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
// MARK: UITableView method implementation
}
当我来到购买页面时,我希望看到产品列表,但我只看到“没有产品。 ["iapdemo_extra_colors_colect_1", "iapdemo_extra_colors_colect_2"]" 在控制台中。
我尝试了更多教程和 apple 示例代码来检查我的应用内购买,但没有成功。
在我下载 Apple 示例代码以检查应用内购买后 https://developer.apple.com/library/ios/samplecode/sc1991/StoreKitSuite.zip
并且我在 invalidProductIdentifiers 数组中获得了我的单个产品 ID。所以我找到了故障排除列表(来自 Apple):
- 您没有使用明确的 App ID。
- 如果您或 App Review 拒绝了您在 iTunes Connect 中的最新二进制文件。
- 您没有清除在 iTunes Connect 中销售的应用内购买产品。
- 您没有使用与您明确的应用程序 ID 关联的配置文件对您的应用程序进行签名。
- 您可能已经修改了您的产品,但这些更改尚未适用于所有 App Store 服务器。
- 您没有完成所有财务要求。有关详细信息,请参阅合同、税务和银行信息。
- 您的产品是 Apple 托管的产品,其内容尚未上传到 iTunes Connect。
我得到了答案
- 我使用明确的应用程序 ID
- 我的应用程序没有被拒绝,因为它正在测试,我没有尝试提交它
- 我有单品在售
- 配置文件设置为自动。我也尝试制作一个并在 xcode 中使用它
- 我一个小时没有修改任何东西(可能我需要再等一会儿?)
- 填写税务和银行账户
- 不是 Apple 托管的
大家有什么想法吗?
问题出在配置文件中。由于某种原因,它不正确,所以我自己制作了它,并且开始运行良好。
此外,我发现如果您的证书有问题也可以解决这个问题,但我的情况并非如此!
希望对大家有所帮助!