5

好吧,我正在为此撕毁我的头发。我正在开发一个免费的应用程序(带有广告和一些锁定功能)。应用内购买将删除广告并提供完整功能。

因此,我设置了一个 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 运行应用程序,你猜怎么着?无效的产品标识符!!!!求助,求各位大神,我疯了!!!!!!

4

2 回答 2

6

问题解决了

在提出 TSI 后,Apple 代表终于发现了我的问题。

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

我在 Provisioning Portal 中创建的第一个 App ID 是一个通配符。当您完成创建新应用程序的过程时,它希望您输入您从下拉列表中选择的捆绑 ID,该下拉列表由供应门户中的应用 ID 填充。如果您选择一个带有通配符的 Bundle ID,它会要求提供一个 Bundle ID 后缀,我将在此处输入“Myapp”,然后“Myapp”最终成为您的 Bundle ID。有点奇怪,因为我认为这只是一个后缀。

后来(几个月后)当我决定要实现应用内购买时,我会发现通配符应用 ID 不能用于推送通知或应用内购买。所以我会在供应门户中创建一个新的应用程序 ID,按照提示“推荐的做法是对应用程序 ID 的捆绑标识符部分使用反向域名样式字符串” - 因此我输入了' com.mydomain.Myapp'。我不知道我为 App ID 创建的 Bundle ID 必须与之前在 iTunes Connect 中创建的应用程序的 Bundle ID 匹配。

我现在已经在供应门户中创建了一个新的应用程序 ID 'bundle_seed_id.Myapp',瞧,我的产品 ID 'com.mydomain.Myapp.fullversion' 不再无效,现在似乎可以正常工作了。

于 2013-02-13T03:27:13.147 回答
1

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

A2。发布一些代码

于 2013-02-06T09:34:18.703 回答