iPhone Store Kit 返回无效产品 ID 错误
-
06-07-2019 - |
题
我正在尝试在 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++ 构建的。
解决方案 7
好吧,在做了我能想到的所有事情并阅读了每个论坛之后,以下是有效的:
重做一切。
- 从 Xcode Organizer 中删除所有配置文件。
- 关闭 Xcode。
- 创建新的应用程序 ID。
- 使用新的应用程序 ID 创建新的配置文件。
- 使用新的应用程序 ID 创建新的分发配置文件。
- 在 iTunes Connect 中创建一个新应用程序
- 启动 Xcode,安装两个新的配置文件。更新 yoru 捆绑包 ID 以匹配。还要确保应用程序请求的 id 字符串已更新以反映您的捆绑包 id。
- 使用新的分发配置文件在分发模式下构建您的项目。
- 上传新的二进制文件。(不要拒绝)
- 设置您的测试应用内购买。
- 使用新的配置文件在调试模式下构建项目。
- 测试请求。
这就是我的商店正常运转所需要的。我最好的猜测是苹果后端服务器有时会搞砸,你只需要从头开始。
希望这对大家有帮助!
其他提示
我尝试了苹果论坛和此处建议的所有内容,但仍然无法正常工作。找到了解决方案 - 您的应用程序需要通过 Xcode 传输才能启用沙箱。
很明显,对吧?那么,如果您正在对现有帐户进行更新,设备仍会将其视为 App Store 安装的应用程序。
删除它,然后再次传输。现在应该可以工作了:)
删除测试 iPhone 上的应用程序并重新安装它可以正常工作。另外,自从提交应用内购买项目以来,我也等了 8 个小时。
请执行以下步骤:
使用您的开发者帐户登录 iTunes connect (https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/).
转到选项卡 - “合同、税务和银行业务”
检查“请求合同”和“处理中的合同”部分。
查看 “iOS 付费应用程序” 并需要设置联系信息、银行信息和税务信息。
当“iOS 付费应用程序”单元格移动到“有效合同”部分时,我将能够使用产品进行应用程序内购买。
请通过以下链接了解更多信息:http://developer.apple.com/library/ios/#technotes/tn2259/_index.html
请注意,当 iPhone 越狱后 应用同步 数据包中断 完全进行应用内购买测试。AppSync 使用 Install0us 作为依赖项进行安装。
你不必完全恢复iOS, 只需在 Cydia 中卸载 AppSync 即可成功测试应用内购买.
在我删除 AppSync 之前,所有论坛、教程和有关修复“无效产品”的评论中的所有提示对我都不起作用。
我在使用新应用程序(v1.0 尚未在商店中发布)时也遇到了类似的问题,我也尝试在应用程序中添加购买功能。我设置了一切,添加了产品等。当我执行 SKProductsRequest 时,我的产品总是返回为无效。
当我在苹果开发者论坛上看到一篇与此无关的帖子时,我正准备放弃整个过程。它建议从测试设备中删除该应用程序,然后进行全新的构建+安装。这就成功了。
为了确定这一点,我在另一台给我带来同样麻烦的设备上尝试了它,它也修复了该问题。
这只是一种猜测,但我认为,如果设备上有一个使用在添加 IAP 之前创建的配置文件创建的版本,则需要删除该版本并使用 IAP 配置文件安装一个新的版本。(也就是说,简单地替换应用程序并不能解决问题。)
如果你的代码没有错误, 有时它返回无效的 productId 仅仅因为,您可能需要超过 10 小时的时间来更改信息。生效。或者,productId 无效,因为您的设备上仍然存在错误,因此您可以再次尝试删除应用程序并重新构建它。根据我的经验, 希望会有所帮助。
IAP 的 iTunes Connect 界面最近已更新,可能会导致无效:<产品 ID> 错误。
现在,您可以在 iTunes connect 中添加 IAP,而无需设置价格(默认为 0 美元),它会让您保存该条目。
如果您没有事先编辑价格字段,旧版本的 UI 会在您按“保存”时抱怨。
很容易完全忽略此字段,并且任何通过任何 iOS 调用使用该产品 ID 获取信息的尝试都会导致 Invalid :< 产品 ID > 而不是告诉您它发现 < 产品 ID > 售价为 0 美元。