【问题标题】:Link an in-app purchase to user apple account将应用内购买链接到用户 Apple 帐户
【发布时间】:2015-12-07 21:30:23
【问题描述】:

我正在寻找一种将应用内购买(不可更新订阅)链接到用户苹果帐户的方法,因为我的应用没有帐户系统,显然我希望用户保留他的订阅。

我了解到我们无法获取 Apple ID,但我认为有办法做到这一点,因为大多数 iOS 应用程序都可以使用您的 Apple 帐户保存数据。

感谢您的回答。

【问题讨论】:

  • 应用内链接是什么意思?您刚刚使用当前应用标识符与您的 Apple iTunes Connect 帐户相关联。
  • 我已经在 iTunes Connect 中创建了应用内购买,我的意思是在用户购买对象时保存购买。
  • 您是在询问恢复购买吗?

标签: ios iphone in-app-purchase


【解决方案1】:

对于非续订订阅,您必须手动将到期日期存储在某处,因为 Apple 不会为非续订管理它。

我在我的一个应用程序中实现了此功能,订阅后我将过期日期存储在服务器上,应用程序将在访问付费功能时检查过期日期。

如果发现过期,应用会再次要求购买订阅。

参考链接: https://developer.apple.com/library/mac/documentation/LanguagesUtilities/Conceptual/iTunesConnectInAppPurchase_Guide/Chapters/CreatingInAppPurchaseProducts.html#//apple_ref/doc/uid/TP40013727-CH3-SW1

https://www.progressconcepts.com/blog/non-renewing-subscription-app-purchases-ios/

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您应该自己在应用中跟踪已购买的产品。我通常为此使用[[NSUserDefaults standardUserDefaults] setBool:YES forKey:productIdentifier]

    当您的用户重新安装您的应用或购买新设备时,就会出现问题。在这种情况下,您必须实施一种方法来恢复购买的产品。

    In-App Purchase Programmering Guide 声明实现此功能的一种方法是调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]。这会向 App Store 发送请求以恢复您应用的所有已完成交易。

    然后您的事务观察者的paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 将被调用并且transactions 保存恢复的产品。我的函数通常看起来像这样:

    - (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;
            }
        };
    }`
    

    restoreTransaction完成恢复过程(提供内容、更新NSUserDefaults等)。

    【讨论】:

    • 感谢您的帮助,但问题是我想知道用户是否已经购买了产品而没有进入应用内视图控制器
    • 检查产品是否已经购买的代码不应该与视图控制器有任何关系。它可能位于视图控制器中,但大多数开发人员同意将呈现视图的代码与业务逻辑分开是一种很好的做法。也就是说,答案中的代码可以/应该在其自己的类中(与应用内购买逻辑的其余部分一起),您应该能够在代码中的任何位置使用它的功能。甚至在进入视图控制器之前。
    【解决方案3】:

    如果您没有自己的帐户系统(用户可以在其中登录等),您可以从购买收据中查看用户对您的应用的购买:

    https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html

    无法从 SDK 获取 AppleID 等个人信息。

    【讨论】:

    • 加密好像很难,谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2012-10-30
    • 1970-01-01
    • 2015-05-02
    • 2019-05-19
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多