【问题标题】:Can't get In-App Purchase to work无法让应用内购买工作
【发布时间】:2013-02-05 20:42:52
【问题描述】:

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

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

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

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

Q2.如何让它发挥作用?

我已经检查了以下所有内容:

您是否为您的 App ID 启用了应用内购买?:
在应用 ID 下的 Provisioning Portal 中,我有“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 and 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];

}

“开始”没有失败,继续调用 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 等于 0。

我刚刚将以下调试代码添加到 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 运行应用程序,你猜怎么着?无效的产品标识符!!!! 请大家帮忙,我疯了!!!!!!

【问题讨论】:

  • @s.bandara 遗憾的是,这也不起作用。

标签: ios in-app-purchase storekit


【解决方案1】:

问题已解决

在提出 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 匹配。

我现在在 Provisioning Portal 中创建了一个新的 App ID 'bundle_seed_id.Myapp',瞧,我的产品 ID 'com.mydomain.Myapp.fullversion' 不再无效,现在似乎可以正常工作了。

【讨论】:

    【解决方案2】:

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

    A2。贴一些代码

    【讨论】:

    • 我不知道你为什么投了反对票。我回答了他的一个问题。您需要在您的设备上建立连接才能在您的设备上测试互联网。您无法使用计算机的连接。请改正。另外,为了回答问题 2,我们需要查看一些代码。
    • @JorisWeimar 感谢您回答 Q1。我问的原因是,我不确定您是否在测试设备上建立了连接,是否会尝试将您带到真正的应用商店而不是沙盒版本。
    • @ByronCox 请在您的问题中发布相关代码,我会看看它
    • @JorisWeimar 代码已发布。谢谢。
    • 是的,代码看起来不错。您是否尝试过重新创建应用内购买?
    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2021-01-29
    相关资源
    最近更新 更多