将应用内购买与用户的苹果账户关联

4
我正在寻找一种将应用内购买(非自动续订订阅)链接到用户的苹果账户的方法,因为我的应用程序没有账户系统,显然我希望用户能保留他的订阅。
我看到我们不能获得Apple ID,但我认为有一种方法可以做到这一点,因为大多数iOS应用程序都可以使用您的Apple账户保存数据。
感谢您的答复。

你说的"in-app link"是什么意思?你只是在当前应用标识符上连接了你的苹果iTunes Connect帐户。 - Nitin Gohel
我已经在iTunes Connect中创建了应用内购买,我的意思是当用户购买物品时保存购买记录。 - Karz
你是在询问如何恢复购买吗? - Pascal
3个回答

1

加密似乎很困难,感谢您的回答。 - Karz

0

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

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

如果发现已过期,应用程序将要求重新购买订阅。

参考链接: 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/

希望这能有所帮助。

0

你应该自己在应用程序中跟踪已购买的产品。我通常使用[[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等)。


谢谢您的帮助,但问题是我想知道用户是否已经购买了产品,而不必进入应用内视图控制器。 - Karz
检查产品是否已购买的代码不应与视图控制器有任何关系。它可以位于视图控制器中,但大多数开发人员都认为将呈现视图的代码与业务逻辑分离是一个好的实践。也就是说,答案中的代码可以/应该位于自己的类中(与其余应用内购买逻辑一起),并且您应该能够从代码的任何位置使用其功能。甚至在进入视图控制器之前。 - Markus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接