好吧,我正在为此撕毁我的头发。我正在开发一个免费的应用程序(带有广告和一些锁定功能)。应用内购买将删除广告并提供完整功能。
因此,我设置了一个 SKProductsRequest,将我的产品 ID (com.mydomain.Myapp.fullversion) 传递给它并执行“开始”。这不会失败并继续调用 productsRequest:didReceiveResponse:,其中 NSLog 显示response.products.count 等于零- 所以问题!
所以,首先愚蠢的问题。
Q1。在我的测试设备上通过 Xcode 运行我的应用程序时,测试设备是否需要连接到 Internet(例如无线开启)或者运行 Xcode 的 Mac 有 Internet 连接就足够了?(回答:您需要在测试设备上进行连接)。
Q2.我如何让它工作?
我已经检查了以下所有内容:
您是否为您的 App ID 启用了应用内购买?:
在应用 ID 下的供应门户中,我启用了“bundle_seed_id.com.mydomain.Myapp”和“应用内购买”。
您是否为您的产品检查了已清除销售?:
在 iTunes Connect 中,我创建了我的应用内购买“com.mydomain.Myapp.fullversion”,并且已清除销售。
您的项目的 .plist Bundle ID 是否与您的 App ID 匹配?:
是的,它设置为“com.mydomain.Myapp”。
您是否为新的 App ID 生成并安装了新的配置文件?:
是的,我已经为“com.mydomain.Myapp”创建并安装了一个 PP。
您是否已将项目配置为使用此新配置文件进行代码签名?:
我只有“代码签名身份”下的条目(而不是 CS 权利、CS 资源规则路径和其他 CS 标志)。它已由 Automatic Profile Selector > IPhone Developer 设置,并与 Myapp 匹配,并设置为 Debug > Any SDK 和 Release > Any iOS SDK。
您在发出 SKProductRequest 时是否使用了完整的产品 ID?:
是的,我使用的是“com.mydomain.Myapp.fullversion”。
将您的产品添加到 iTunes Connect 后,您是否等了几个小时?:
是的,我已经等了 24 小时。
您的银行详细信息在 iTunes Connect 上是否有效?:
是的。
您是否尝试过从设备中删除应用程序并重新安装?:
很多次。
这里的观察:在测试设备上,我没有登录到“iTunes & App Stores”,当我在测试设备上从 Xcode 运行应用程序时,它没有要求我登录(我有一个测试用户设置在iTunes Connect 并准备好使用)。所以我的应用程序运行,在 SKProductRequest 上开始调用,但从不提示我登录到“iTunes & App Stores”。
提前谢谢了。我希望有人可以帮助我进行应用内购买。拜伦。
更新 1:这是一些代码,虽然我不确定这有多大帮助,正如我上面所说,它在 productsRequest:didReceiveResponse: 失败,因为不返回任何产品。
首先我打电话:
[[MyappIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products)
{
if (success)
{
NSLog(@"SUCCESS - WE HAVE PRODUCTS");
_products = products;
NSLog(@"_products.count = %d", _products.count);
}
else
{
if(products == nil)
{
NSLog(@"FAILED - WE HAVE NO PRODUCTS");
}
}
}];
代码如下:
- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler
{
_completionHandler = [completionHandler copy];
NSLog(@"IAPHelper, requestProductsWithCompletionHandler{}, _productIdentifiers = %@", [_productIdentifiers anyObject]);
_productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];
}
'start' 没有失败并继续调用 productsRequest:didReceiveResponse:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSLog(@"Loading list of products...");
NSLog(@"iAPHelper, productRequest:didRecieveResponse{}, Products count = %d", response.products.count);
一旦你进入这个函数,它就会失败,因为 response.products.count 等于零。
我刚刚将以下调试代码添加到 productRequest:didRecieveResponse{}
for (NSString *invalidProductId in response.invalidProductIdentifiers)
{
NSLog(@"Invalid product id: %@" , invalidProductId);
}
它指出“com.mydomain.Myapp.fullversion”是无效的。
更新 2:这已经不是一个笑话了 - 仍然无法正常工作!
我完全遵循了http://developer.apple.com/library/ios/#technotes/tn2259/_index.html。我认为问题可能是在创建我的应用内购买时我上传了一个屏幕截图 - 但我通过删除应用内购买来纠正这个问题,重新创建它以确保它处于“等待屏幕截图”状态根据文档。我现在已经等待了超过 12 个小时,以便重新创建的应用内购买通过 Apple 的服务器进行过滤。我从我的测试设备中删除了该应用程序。检查我是否已在测试设备上退出商店。重新启动我的测试设备。在 Xcode 中执行“清理”并重新启动 Xcode。从 Xcode 运行应用程序,你猜怎么着?无效的产品标识符!!!!求助,求各位大神,我疯了!!!!!!