我正在尝试在我的iPhone上测试In App Purchases并遇到一个问题,我在那里请求的信息最终作为“didRecieveResponse”方法中的无效产品ID返回给我。
我有:
似乎一切都已到位,但我仍然将我的产品作为无效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都显示在无效的打印输出中,并且没有一个显示在“产品信息:”打印输出中。
我们将非常感谢任何建议......
P.S。是的,这是作为Objective-c / c ++构建的。
答案 0 :(得分:6)
我尝试了在Apple论坛和这里建议的所有内容,仍然无法让它工作。找到解决方案 - 您的应用需要通过Xcode传输才能启用沙箱。
明显,对吗?好吧,如果您正在使用现有帐户的更新,设备仍会将其视为App Store安装的应用程序。
删除它,然后再次传输。它现在应该工作:)
答案 1 :(得分:4)
在测试iPhone上删除应用并重新安装它有效。此外,自提交应用内购买项目以来,我也等了8个小时。
答案 2 :(得分:3)
请完成以下步骤:
使用您的开发者帐户(https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/)登录iTunes connect。
转到标签 - “合同,税务和银行业务”
检查处理部分中的请求合同和合同。
查看“iOS付费应用程序”,并且需要设置联系信息,银行信息和税务信息。
当“iOS付费应用程序”单元格移至“合同效果”部分时,我将能够在应用程序购买中使用产品。
请浏览以下链接以获取更多信息: http://developer.apple.com/library/ios/#technotes/tn2259/_index.html
答案 3 :(得分:2)
请注意,当iPhone被越狱时, AppSync 数据包会完全破坏应用内购买测试。 AppSync随Install0us一起安装,作为依赖项。
您不必完全恢复iOS,只需在Cydia中卸载AppSync即可成功测试应用内购买。
所有关于fixind'无效产品'的论坛,教程和评论的所有提示在我删除AppSync之前都不适合我。
答案 4 :(得分:1)
我在使用应用程序购买时尝试添加的新应用程序(v1.0尚未在商店中发布)遇到类似问题。我设置了所有内容,添加了产品等,当我进行SKProductsRequest时,我的产品总是无效。
当我在Apple开发者论坛上看到一篇与之相关的帖子时,我正打算放弃整个过程。它建议从测试设备中删除应用程序并进行全新的构建+安装。这就行了。
可以肯定的是,我在另一台给我带来同样麻烦的设备上试了一下,并在那里解决了它。
这只是一个猜测,但我认为如果设备上有一个构建版本,它是使用在添加IAP之前创建的配置文件创建的,则需要删除该版本并使用IAP添加新版本轮廓。 (也就是说,简单地替换应用程序就行不通。)
答案 5 :(得分:1)
如果你的代码没有错, 有时它返回无效的productId 只是因为,您可能需要超过10小时的时间来更改信息。生效。 或者,productId无效,因为您的设备上仍然存在错误,因此您可以再次尝试删除您的应用并重新构建它。 根据我的经验, 希望它会有所帮助。
答案 6 :(得分:0)
好的,所以在做了我能想到的所有内容并阅读每个论坛之后,这里有用了:
每次重做。
这是让我的商店工作所需要的。我最好的猜测是苹果后端服务器有时会搞砸,你只需要从头开始。
希望这有助于每个人!
答案 7 :(得分:0)
最近更新了IAP的iTunes Connect界面,可能导致无效:&lt;产品ID&gt;错误。
您现在可以在iTunes连接中添加IAP,而无需设置默认为0美元的价格,它可以让您保存该条目。
如果您未预先编辑价格字段,则在按下保存时会出现旧版本的UI。
很容易完全错过这个字段,任何通过任何iOS调用使用该产品ID获取信息的尝试都会导致无效:&lt;产品ID&gt;而不是告诉你它发现&lt;产品ID&gt;价格为0美元。