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

iOS in-app purchase. Identifying purchased product (non-consumable).

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

在 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

    }

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

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

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

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

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

当用户更换设备或稍后重新安装您的应用程序时,当他再次尝试购买 Spring 主题时,您必须在购买对话框中提供恢复选项。(这是必须的。如果您不提供此选项选项你的应用程序将被拒绝。) 当他按下 restore apple 时,你会 return 你知道这个用户以前买过这个,你会激活 Spring 主题。