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

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

【问题讨论】:

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

标签: ios iphone in-app-purchase app-store-connect


【解决方案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 主题。

      【讨论】:

        猜你喜欢
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多