无法让应用内购买工作

时间:2013-02-05 20:42:52

标签: ios in-app-purchase storekit

好的,我正在撕裂我的头发。我正在开发一款免费的应用程序(带有广告和一些锁定的功能)。应用内购买会移除广告并提供完整功能。

所以我设置了一个SKProductsRequest,将它传递给我的产品ID(com.mydomain.Myapp.fullversion)并执行'start'。这不会失败并继续调用productsRequest:didReceiveResponse:,其中NSLog显示 response.products.count等于零 - 所以问题!

所以,首先是愚蠢的问题。

Q1。在我的测试设备上通过Xcode运行我的应用时,测试设备是否需要连接到Internet(例如无线开启),或者运行的Mac是否足够Xcode有互联网连接吗? (已回答:您需要在测试设备上建立连接)。

问2.如何让这个工作?

我检查了以下所有内容:

您是否为应用ID启用了应用内购买?:在应用ID下的配置门户中,我有'bundle_seed_id.com.mydomain.Myapp'和'应用内应用'购买'已启用。

你有没有检查过您的产品的清仓待售?:
在iTunes Connect中我创建了我的应用内购买'com.mydomain.Myapp.fullversion'并且已清除转让。

您的项目的.plist捆绑包ID是否与您的应用ID相匹配?:
是的,它设置为'com.mydomain.Myapp'。

您是否为新的App ID生成并安装了新的配置文件?:
是的我已经为'com.mydomain.Myapp'创建并安装了PP。

您是否已使用此新配置文件将项目配置为代码签名?:
我只有“代码签名身份”下的条目(而不是CS权利,CS资源规则路径和其他CS旗帜)。它已由自动配置文件选择器设置> IPhone Developer并将自己与Myapp匹配,并设置为Debug>任何SDK和版本>任何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中执行'Clean'并重新启动Xcode。从Xcode跑出应用并猜猜是什么?无效的产品标识!!!! 帮助,请任何人,我正在失去理智!!!!!

2 个答案:

答案 0 :(得分:6)

问题已解决

在提出TSI之后,Apple代表终于找到了我的问题。

在iTunes Connect中查看我的应用程序,它声明它的捆绑ID为“Myapp”。供应门户中启用了应用内购买的应用ID是'bundle_seed_id.com.mydomain.Myapp'。不明显的,或者至少对我来说,这个App ID是由Bundle ID组成的,它必须与iTunes Connect中应用程序的Bundle ID相匹配。

我在Provisioning Portal中创建的第一个App ID是一张外卡。当您完成创建新应用程序的过程时,它希望您输入从下拉列表中选择的Bundle ID,该下拉列表从Provisioning Portal中的App ID填充。如果您选择具有通配符的Bundle ID,则会请求Bundle ID后缀,这是我输入“Myapp”的位置,然后“Myapp”最终成为您的Bundle ID。有点奇怪,因为我认为这只是一个后缀。

稍后(几个月后),当我决定实施应用程序内购买时,我会发现通配符App ID不能与推送通知或应用程序内购买一起使用。因此,我会在Provisioning Portal中创建一个新的App ID,按照提示声明“建议的做法是对App ID的Bundle Identifier部分使用反向域名样式字符串” - 因此我输入了' com.mydomain.Myapp”。我不知道我为App ID创建的Bundle ID必须与之前在iTunes Connect中创建的应用程序的Bundle ID相匹配。

我现在在配置门户中创建了一个新的应用程序ID“bundle_seed_id.Myapp”,瞧,我的产品ID“com.mydomain.Myapp.fullversion”不再无效,现在看来它正在运行。 / p>

答案 1 :(得分:1)

A1。您需要在测试设备上建立连接

A2。发布一些代码