首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提供storekit内容?

如何提供storekit内容?
EN

Stack Overflow用户
提问于 2009-10-26 05:24:17
回答 1查看 6.3K关注 0票数 3

对于我的应用程序,我已经足够了,它将要求确认和帐户的应用程序内购买,但我不知道如何启用购买完成后的项目。

代码语言:javascript
复制
SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.silver.tapp.page2"];

[SKPaymentQueue defaultQueue addPayment:支付];

这就是我到目前为止所拥有的

代码语言:javascript
复制
[[p2Controller tabBarItem] setEnabled:TRUE];

这是我想要执行的代码

EN

回答 1

Stack Overflow用户

发布于 2009-10-26 08:10:11

首先,你应该回顾一下苹果提供的In App purchase documentation -他们详细地描述了这一点,这对了解他们正在做什么很有用。

您缺少的是SKPaymentTransactionObserver --您需要负责实现这个观察者,它是您作为SKPaymentTransactionQueue的观察者添加的。Apple建议您将应用启动时的观察者添加到默认队列中,以便它能够观察到您的应用运行时发生的所有事务。

本质上,您需要编写自己的类来实现SKPaymentTransactionObserver协议。当iTunes商店处理支付时,这个类要做的是观察、捕获支付队列中的回调,并捕获成功和失败事件。

以下是Payment Observer的框架:

PaymentObserver.h

代码语言:javascript
复制
#import <StoreKit/StoreKit.h>

@interface PaymentObserver : NSObject <SKPaymentTransactionObserver> {  
}

- (void) completeTransaction: (SKPaymentTransaction *)transaction;
- (void) restoreTransaction: (SKPaymentTransaction *)transaction;
- (void) failedTransaction: (SKPaymentTransaction *)transaction;

@end

PaymentObserver.m

代码语言:javascript
复制
#import "PaymentObserver.h"
@implementation PaymentObserver

- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions
{
  // handle payment cancellation
}

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
  // handle the payment transaction actions for each state
  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;
{
  // Record the transaction
  //...

  // Do whatever you need to do to provide the service/subscription purchased
  //...

  // Remove the transaction from the payment queue.
  [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

}

- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
  // Record the transaction
  //...

  // Do whatever you need to do to provide the service/subscription purchased
  //...

  [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) failedTransaction: (SKPaymentTransaction *)transaction
{  
  if (transaction.error.code != SKErrorPaymentCancelled)
  {
    // Optionally, display an error here.    
  }
  [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

@end

一旦实现了PaymentObserver,就需要将一个实例作为事务观察者添加到默认支付队列中。

代码语言:javascript
复制
// Done at app launch...
PaymentObserver *paymentObserver = [[PaymentObserver alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:paymentObserver];
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1622116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档