如果有托管内容,IAP 会失败,但如果被视为正常的非消耗品,则可以正常工作

Posted

技术标签:

【中文标题】如果有托管内容,IAP 会失败,但如果被视为正常的非消耗品,则可以正常工作【英文标题】:IAP fails if has hosted content but works fine if treated as normal non-consumable 【发布时间】:2013-06-24 05:08:58 【问题描述】:

我正在尝试在 ios 6.0 上实现托管内容的 IAP。

没有贴一堆代码,我的代码来源于raywenderlich教程http://www.raywenderlich.com/21081/introduction-to-in-app-purchases-in-ios-6-tutorial 和http://xinsight.ca/blog/iap-content-download-in-ios6/。此代码适用于购买普通的非消耗品。

我创建了一个包含托管内容的新 IAP 项目,并通过 xcode 上传了它(使用上面第二个链接中描述的方法)。

当我去购买该物品时,它会显示警报,然后我点击购买。此后不久,我的交易失败了,下面调用了 SKPaymentTransactionStateFailed 案例:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions


    for (SKPaymentTransaction * transaction in transactions) 

        switch (transaction.transactionState)
            case SKPaymentTransactionStatePurchased: 

                if (transaction.downloads) 
                    [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
                 else 
                    // unlock features
                    //[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    [self completeTransaction:transaction];
                    
                break;               
            
            case SKPaymentTransactionStateFailed: 
                if (transaction.downloads) 
                    NSLog(@"transaction failed... but found downloads");
                

                [self failedTransaction:transaction];
                break;
            
            case SKPaymentTransactionStateRestored: 

                if (transaction.downloads) 
                    [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
                 else 
                    // unlock features
                    //[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    [self restoreTransaction:transaction];
                

                break;
            
            default:
               break;
       
   

transaction.error.code 似乎是 SKErrorPaymentCancelled。

如果我在 iTunesConnect 中将此 IAP 项目的性质更改为没有托管内容,那么购买就可以完成。我不知道是什么原因造成的。

任何对 IAP 托管内容有经验的人都知道我应该注意的任何陷阱吗?可能与我创建托管内容包的方式有关吗?创建包时,我只是将所有内容都放在了 xcode 中的 Supporting Files 组中 - 在 finder 中检查存档包显示内容为:

/dSYMs

/Info.plist

/Products/Library/InAppPurchaseContent/ProductIDName/Contents/#content here#

/Products/Library/InAppPurchaseContent/ProductIDName/ContentInfo.plist

这是正确的吗?上传后显示“等待截图”,我理解这是正确的。

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题,对于托管在 Apple 服务器上的所有 IAP 内容,我也收到了 SKErrorPaymentCancelled 错误。 这个问题似乎来自目前正在处理它的 Apple。

查看那里了解更多更新:

https://devforums.apple.com/message/839428#839428

iPhone storekit sandbox stopped working

【讨论】:

即将来到这里并用同一个帖子结束问题。看来他们现在已经修好了。干杯。

以上是关于如果有托管内容,IAP 会失败,但如果被视为正常的非消耗品,则可以正常工作的主要内容,如果未能解决你的问题,请参考以下文章

IAP 创建 - 没有“托管内容”

如果只给出域(没有路径),则重写所有内容都会失败

如果我在 iTC 中添加 IAP,当前没有 IAP 的实时应用会受到影响吗?

向用户展示其他付款方式。

字符串比预期长,并被视为多个输入

iTunes Connect 上没有“使用 Apple 托管内容”部分