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 恢复消耗品购买

在App Purchase中:需要登录[环境:沙箱]

应用程序中的颤动-flutter_inapp_purchase-IOS App Store 拒绝-性能:应用程序完整性

iOS 应用内购买不适用于 TestFlight 中的非沙盒帐户