我正在尝试设置IAP,但在使用SKProductsRequest调用检索产品后,我的委托中的SKProductsResponse数组的计数为0.这是我的清单:
有关为什么取出的产品数为零的任何其他建议?
我不相信这会是一个编码问题,但无论如何它在这里:
…
NSSet *productIdentifiers = [NSSet setWithObjects:@"redacted", nil];
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
self.productsRequest.delegate = self;
[self.productsRequest start];
…
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *products = response.products;
NSLog(@"Product count: %d", [products count]);
for (SKProduct *product in products)
{
NSLog(@"Product: %@ %@ %f", product.productIdentifier, product.localizedTitle, product.price.floatValue);
}
}
检查下面列表中的所有3件事 1)检查您的产品标识符 - 它们必须与您的代码和iTunes Connect中的完全相同 - >我的应用程序 - > YourAppName - >功能 - >应用程序内购买 2)iTunes Connect - >协议,税,和银行业务 - >主协议 - >付费申请 - >联系信息/银行信息/税务信息(应填写) 3)代码进行测试
class ViewController: UIViewController {
var requestProd = SKProductsRequest()
var products = [SKProduct]()
override func viewDidLoad() {
super.viewDidLoad()
validateProductIdentifiers()
}
}
extension ViewController: SKProductsRequestDelegate {
func validateProductIdentifiers() {
let productsRequest = SKProductsRequest(productIdentifiers: Set(["candy100", "someOtherProductId"]))
// Keep a strong reference to the request.
self.requestProd = productsRequest;
productsRequest.delegate = self
productsRequest.start()
}
// SKProductsRequestDelegate protocol method
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for invalidIdentifier in response.invalidProductIdentifiers {
print(invalidIdentifier)
}
}
}
此外,请记住,同意付费应用程序cotract是不够的。您还必须专门填写该协议的联系人,银行和税务信息,以便将其视为已完成。
经过深入挖掘后,以下步骤解决了我为SKProductsRequest获取0个产品的问题。
转到设置>在iOS设备上登录iPhone。如果您已使用原始Apple ID登录,请点击它并选择注销。然后,只需使用您在iTunes Connect中创建的沙盒测试器的凭据登录即可。
我在一些macOS 10.14系统上得到一个空的SKProductsResponse.products
数组,而其他工作正常并返回我的应用程序的当前IAP的有效列表。
相同的应用,相同的代码。 用户在两台计算机上登录了相同的App Store帐户。
这简直太奇怪了。
在我的情况下,这是一个错误。在模拟器中,所有产品标识符都失败并被标记为无效。在真实设备中,所有产品请求成功获取产品。
Tvos Chek
我遇到了同样的问题,通过在产品名称之前只发送IAP产品名称而不是我的包ID来解决它。这是一个例子:
工作SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"my_product"]];
而不是
不起作用SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.my_site.my_app.my_product"]];
确保在“功能”部分中启用了“应用程序内购买”。如果不这样做,SKProductsRequest将返回0个产品。
我遇到过同样的问题...
我只是更改了我的Bundle Identifier,它与iTunes捆绑包标识符不匹配。
我的应用程序运行良好:)
如果您忽略了这一点,那么产品标识符匹配区分大小写。
因此,如果您在Apple上创建了一个标识为say的产品
com.yourcompany.product1
并使用产品标识符调用产品请求
com.yourcompany.Product1
您的清单将以零产品退回。
这让我忙了一会儿:-)
ps:在一个单独的项目中,我发现SKProductsRequest仅在重启后才开始返回产品。因此,如果所有其他方法都失败了,请尝试重新启动Mac。
让我们转到iOS的设置> iTunes和应用程序商店并注销
希望这对你有所帮助,我不知道为什么:D
有时候,这些类型的问题都有很多解决方案。经过一些研究后,我发现删除应用程序然后重新安装它有时会有所帮助(In-App Purchase, SKProductsRequest returning 0 - Products still in Review)你还在使用什么版本的iOS?
初步答复
你有合同,银行等信息设置吗?
更正了答案
我觉得这个错了。看看In-App Purchase, SKProductsRequest returning 0 - Products still in Review
还请你是否在iTunesConnect中设定了产品价格。我错过了,产品为零。我整天都想知道这一点。