iPhone Store Kit 返回无效产品 ID 错误

Posted

技术标签:

【中文标题】iPhone Store Kit 返回无效产品 ID 错误【英文标题】:iPhone Store Kit returning invalid product ID errors 【发布时间】:2009-10-27 19:18:30 【问题描述】:

我正在尝试在我的 iPhone 上测试应用内购买,但遇到了一个问题,即我请求信息的产品 ID 最终在“didRecieveResponse”方法中作为无效的产品 ID 返回给我。

我有:

创建了与此应用关联的店内产品。它的捆绑 ID 与其他所有内容匹配。已获开发商批准出售。 确保我的新配置文件已启用商店应用购买,并且它具有完整的应用名称:“com.domain.appname” 确保这是用于将应用程序签名到我的 iPhone 的配置文件。 确保“com.domain.appname”是用于构建配置文件的应用 ID。 确保在我的 plist 文件中使用“com.domain.appname”作为包标识符。

一切似乎都已就绪,但我的产品仍以无效 ID 退回给我。

这是我正在使用的代码:


- (void)requestProductData 
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];


- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   

   for(int i = 0; i  < myProducts.count; ++i)
   
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   

   [request autorelease];


我的所有产品 ID 都显示在无效的打印输出中,并且没有一个显示在“产品信息:”打印输出中。

任何建议将不胜感激...

附:是的,这是作为 Objective-c/c++ 构建的。

【问题讨论】:

可能是个愚蠢的问题,但您是否真的去 iTunes Connect 并添加您正在查询的应用内购买产品? 根本不是一个愚蠢的问题。我确实添加了应用内购买。我检查了它的ID,一切都匹配。它已被开发商批准出售和验证。 这可能也不是,但我注意到在您的示例代码中您调用的是“initWithProductIndentifiers”而不是“initWithProductIdentifiers”...... @EToreo-Hi。我正在 Cocos2d-x 中尝试 InAppPurchase。等待有人指导我。你能指导我完成这个 IAP。我是新手。提前致谢。 【参考方案1】:

我尝试了 Apple 论坛和此处的所有建议,但仍然无法正常工作。找到了解决方案 - 您的应用需要通过 Xcode 传输才能启用沙箱。

很明显,对吧?好吧,如果您正在对现有帐户进行更新,该设备仍会将其视为 App Store 安装的应用程序。

删除它,然后重新传输。它现在应该可以工作了:)

【讨论】:

我也得到了无效的产品标识符,请问您通过 Xcode 转移应用程序是什么意思?我该怎么做?提前致谢。 @bobo 他的意思是在你的设备上从 Xcode 中运行应用程序,而不是在模拟器上。 @Hector - 谢谢,你救了我各种挫折! 您应该从您的设备中删除该应用程序,然后再次在设备上构建并运行。我的问题是针对应用程序的 iTunes(生产)版本进行构建和运行,这意味着我的新版本仍然指向 Apple 的生产 iTunes 服务器,而不是沙箱。【参考方案2】:

删除测试 iPhone 上的应用程序并重新安装它有效。此外,自提交应用内购买项目后,我也等了 8 个小时。

【讨论】:

当问题发生时也为我工作。 又遇到了这个问题——似乎几乎每次我在另一个应用程序中实施 IAP 时都会出现这个问题。删除应用程序,从 XCode 进行干净 + 重新安装修复它。我相信这也解决了以前的问题。【参考方案3】:

请按以下步骤操作:

    使用您的开发者帐户 (https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/) 登录 iTunes Connect。

    转到选项卡 - “合同、税务和银行业务”

    在流程部分检查请求合同和合同。

    查看“iOS付费应用程序”,需要设置联系信息、银行信息和税务信息。

    当“ios 付费应用程序”单元格移动到效果部分的合同时,我将能够将产品用于应用内购买。

请通过以下链接了解更多信息: http://developer.apple.com/library/ios/#technotes/tn2259/_index.html

【讨论】:

【参考方案4】:

请注意,当 iPhone 越狱时,AppSync 数据包会完全中断应用内购买测试。 AppSync 与 Install0us 作为依赖项一起安装。

您不必完全恢复 iOS,只需在 Cydia 中卸载 AppSync 即可成功测试应用内购买

在我删除 AppSync 之前,所有论坛、教程和 cmets 中关于 fixind“无效产品”的所有提示都对我无效。

【讨论】:

【参考方案5】:

我在尝试添加应用购买的新应用(v1.0 尚未在商店中发布)时也遇到了类似的问题。我设置了所有内容,添加了产品等,当我执行 SKProductsRequest 时,我的产品总是返回无效。

当我在苹果开发者论坛上看到一个切线相关的帖子时,我正准备放弃整个过程。它建议从测试设备中删除应用程序并进行全新的构建+安装。成功了。

为了确定,我在另一个给我同样麻烦的设备上尝试过它,它也在那里修复了它。

这只是一个猜测,但我认为如果设备上有一个使用在添加 IAP 之前创建的配置文件制作的构建,则需要删除该构建并使用 IAP 重新安装轮廓。 (也就是说,简单地替换应用程序并不能解决问题。)

【讨论】:

【参考方案6】:

如果您的代码没有问题, 有时它返回无效的productId 只是因为,您可能需要 10 多个小时的时间来更改信息。生效。 或者,productId 无效,因为您的设备上仍然存在错误,因此您可以再次尝试删除您的应用并重新构建它。 以我的经验, 希望它会有所帮助。

【讨论】:

【参考方案7】:

好的,所以在做了我能想到的一切并阅读了那里的每个论坛之后,以下是有效的:

重做一切。

    从 Xcode Organizer 中删除所有配置文件。 关闭 Xcode。 创建一个新的应用 ID。 使用新的 App ID 创建一个新的 Provisioning 配置文件。 使用新的 App ID 创建一个新的分发配置文件。 在 iTunes Connect 中创建新应用 启动 Xcode,安装两个新的配置文件。更新 yoru 包 ID 以匹配。还要确保更新应用请求的 ID 字符串以反映您的捆绑包 ID。 使用新的分发配置文件在分发模式下构建您的项目。 上传您的新二进制文件。 (不要拒绝) 设置您的测试应用内购买。 使用新的 Provisioning 配置文件在调试模式下构建您的项目。 测试请求。

这就是让我的商店运转起来的原因。我最好的猜测是,Apple 后端服务器有时会搞砸,你只需要从头开始。

希望对大家有帮助!

【讨论】:

您能否创建一个与以前同名的新应用?【参考方案8】:

IAP 的 iTunes Connect 界面最近已更新,这可能会导致 Invalid : 错误。

您现在可以在 iTunes 连接中添加 IAP,而无需设置默认为 0 美元的价格,它可以让您保存该条目。

如果您没有事先编辑价格字段,旧版本的用户界面会在您按保存时报错。

很容易完全忽略此字段,任何尝试通过任何 iOS 调用使用该产品 ID 获取信息都会导致无效:,而不是告诉您它找到了价格为 0 美元的 .

【讨论】:

以上是关于iPhone Store Kit 返回无效产品 ID 错误的主要内容,如果未能解决你的问题,请参考以下文章

StoreKit 返回无效的产品标识符 - 仅在真正的 App Store 上,仅在 iOS7 上

iOS 订阅产品无效

Sprite Kit 和 Pathfinding,iPad 和 iPhone 的区别?

App Store 错误:您上传的二进制文件无效

如何解决 App Store 中的无效二进制错误

用于运行配置文件/检查器的 XCode 配置文件无效 - iPhone 应用程序