iOS 应用内购买。识别购买的产品(非消耗品)。

Posted

技术标签:

【中文标题】iOS 应用内购买。识别购买的产品(非消耗品)。【英文标题】:iOS in-app purchase. Identifying purchased product (non-consumable). 【发布时间】:2015-03-09 13:38:38 【问题描述】:

我有许多用于应用内购买的图像模板,它们本地存储在设备上。我在 iTunes Connect 中创建了非消耗性应用内购买。现在我无法理解,我该如何将特定图像分配给产品标识符?因为在应用内购买中没有将其分配给特定内容的选项。我可能在这里遗漏了一些东西。来自this问题 我必须为我销售的每个图像模板创建新的产品标识符。但这使它更加混乱,因为我无法理解如何将每个图像链接到每个产品标识符。 谢谢。

【问题讨论】:

除了为每个应用内购买分配其自己的标识符,然后在产品标识符和您的图像之间建立映射之外,别无他法。您可以在购买回调中查找标识符 这是否意味着我的所有产品标识符都应该存储在我的应用中,并且根据我选择的图像,我将各自的产品标识符发送到应用内购买代码块?谢谢! 当然,您需要知道应用程序中的标识符。要么将它们存储在某个文件中,要么从您自己的服务器中获取它们。 【参考方案1】:

您要么必须将所有图片与您的应用一起发送,然后硬编码产品标识符到图片的映射,要么从应用商店加载产品 ID,然后使用外部网站或服务器上传标识符的图片。

遗憾的是,Apple 不允许您将元数据分配给您可以使用产品标识符上传的产品。对于非消耗品,您现在至少可以将内容托管在苹果服务器上。

不幸的是,目前它的硬编码或使用外部服务器,您可以在应用程序版本之间添加图像。

【讨论】:

【参考方案2】:

在 iTunes Connect 中,当您创建应用内购买时,您会为每次购买提供一个产品 ID,例如 com.example.purchase1

在代码之后你应该检查哪个是购买的,如下所示:

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

    for (SKPaymentTransaction * transaction in transactions) 
        switch (transaction.transactionState)
    
        case SKPaymentTransactionStatePurchased:
            [self completeTransaction:transaction];
            break;
        case SKPaymentTransactionStateFailed:
            [self failedTransaction:transaction];
            break;
        case SKPaymentTransactionStateRestored:
            [self restoreTransaction:transaction];
        default:
            break;
    
  ;


- (void)completeTransaction:(SKPaymentTransaction *)transaction 

    //get and pass productIdentifier of transaction
    [self provideContentForProductIdentifier:transaction.payment.productIdentifier];

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];




- (void)provideContentForProductIdentifier:(NSString *)productIdentifier 

    if ([productIdentifier isEqualToString:@"com.example.purchase1"]) 

      //unlock purchase1

    

【讨论】:

【参考方案3】:

实际上,您应该为要出售的每个图像模板创建非消耗性应用内。 假设您有 4 个不同的图像模板。 您的产品标识符将为 imageSet1、imageSet2、imageSet3、imageSet4。 在您的应用程序中,您有 4 个模板名称,分别是 Spring、Summer、Autumn、Winter。

当使用您的应用的用户想要购买 Spring 时,您将向 appstore 发送该用户想要购买 imageSet1 的请求(在您的应用中是 Spring)。交易成功后,您将激活 Spring 图像的凭据。

当用户更改设备或稍后重新安装您的应用程序时,当他再次尝试购买 Spring 主题时,您必须在购买对话框中提供恢复选项。(这是必须的。如果您不提供此选项,您的应用程序将被拒绝.) 当他按下恢复时,苹果会返回该用户之前购买过的信息,您将激活 Spring 主题。

【讨论】:

以上是关于iOS 应用内购买。识别购买的产品(非消耗品)。的主要内容,如果未能解决你的问题,请参考以下文章

非消耗品的应用内购买问题

iOS苹果内购(详细步骤)

Unity 之 Mac App Store 内购过程解析(购买非消耗道具 | 恢复购买 | 支付验证)

Unity 之 Mac App Store 内购过程解析(购买非消耗道具 | 恢复购买 | 支付验证)

请建议,实现应用内购买(消耗品/非消耗品)的最佳方法是啥? [关闭]

使用 ios 进行免费的非消耗性应用内购买