In App Purchase沙盒问题
Posted
技术标签:
【中文标题】In App Purchase沙盒问题【英文标题】:In App Purchase sandbox problem 【发布时间】:2011-08-16 12:30:40 【问题描述】:目前我正在开发需要应用内购买的 ios 应用程序。
与许多教程一样(例如:http://www.raywenderlich.com/2797/introduction-to-in-app-purchases)。我在 iTunesConnect 中创建了新应用程序,上传了二进制文件并拒绝了它。之后,我在应用购买产品中添加了一些。在下一步中,我将 Storekit 添加到我的 Xcode 项目中,然后我在我的 UIViewController 中编写了这段代码:
- (void)buyPressed
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObjects: @"com.mycompany.appliaction_name.levelpack",nil]];
request.delegate = self;
[request start];
NSLog(@"request started");
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
NSArray *products = response.products;
for (int i=0; i<[products count]; i++)
SKProduct *proUpgradeProduct = [products objectAtIndex:i];
if (proUpgradeProduct)
NSLog(@"Valid product id: %@" , proUpgradeProduct.price);
NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle);
NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription);
NSLog(@"Product price: %@" , proUpgradeProduct.price);
NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier);
for (NSString *invalidProductId in response.invalidProductIdentifiers)
NSLog(@"Invalid product id: %@" , invalidProductId);
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Apple connection error!" message:nil delegate:self cancelButtonTitle:@"CLOSE" otherButtonTitles:nil];
[myAlertView show];
[myAlertView release];
我仍然收到我所有应用内产品的产品 ID 无效的信息。今天我发现了这个:http://developer.apple.com/library/ios/#technotes/tn2259/_index.html
还有一件重要的事情: “重要提示:在应用程序准备好接受 App Review 批准之前,请勿将开发二进制文件上传到 iTunes Connect。如果二进制文件存在于 iTunes Connect 中且功能不完整,App Review 将审查二进制文件并可能拒绝开发二进制文件。如果您或 App Review 在 iTunes Connect 中拒绝了您最近的二进制文件,则测试 In App Purchase 将失败。在这种情况下,解决方法是上传一个没有 In App Purchase 功能的二进制文件,该功能可以得到 App Review 的批准。一旦二进制文件被批准,恢复使用应用内购买功能测试二进制文件。”
所以我必须再次在 iTunes 中创建新应用,或者我应该在没有应用内购买的情况下构建和提交我的应用,以及应用何时出现在 iTunes 中开发新版本的应用内购买?
感谢您的回答!
【问题讨论】:
【参考方案1】:invalidProductIdentifiers(Apple App Store 无法识别的产品标识符字符串数组。(只读))
所以请确保您没有使用被拒绝的相同产品标识符
断开设备后运行 Xcode,然后运行 Build->Clean All Targets。
运行 Xcode->Empty Caches,然后退出并重新启动 Xcode。
在 Xcode 重新启动并且您的设备重新启动后,将其重新连接到您的机器。
在 iTunesConnect 门户上创建一个全新的 iTunes 测试帐户。
使用开发配置文件从 XCode 构建并运行您的应用程序到您的设备,然后尝试使用新的 iTunes 测试帐户购买产品。
如果您提交申请并且二进制文件因任何原因被拒绝,则应用内购买可能会停止在沙盒中正常运行。 Apple 表示,恢复这种情况的唯一方法是重新提交没有 IAP 功能的应用程序二进制文件并首先获得批准(但不一定发布)。
看看我的另一个相关[ANSWER]
【讨论】:
我知道,因此我创建了具有新标识符的新产品,但根本没有任何变化。 好的,您是否尝试删除该应用程序,重新安装,因为有时您可能会从应用商店安装该应用程序,并且它永远不会正确注册到 StoreKit 框架,所以可能这就是发生无效产品ID的原因 是的,我试过了。当然,我也尝试注册为新用户(普通用户和测试用户)。我还尝试将应用程序购买添加到我现有的应用程序中,结果完全相同,iTunes Connect 中的所有合同都已正确签署。有什么想法吗?【参考方案2】:就在此时,另一件事对我有所帮助:在应用程序的新版本的版本信息中进行更改(任何更改)。但我也做了上述缓存清理/设备重启。
【讨论】:
以上是关于In App Purchase沙盒问题的主要内容,如果未能解决你的问题,请参考以下文章
从 App 内获取 iOS In-App-Purchase 产品的产品参考名称
Flutter in_app_purchase '_enablePendingPurchases':必须在调用 startConnection 之前调用 enablePendingPurchases(
iOS In-App-Purchase Sandbox 恢复消耗品购买