2011-03-29 166 views
2

我在iphone上开发了一个应用程序。 我已经在应用商店中加载了精简版。 现在我不能从应用程序本身加载完整版本,它是如何完成的。 我知道这是可能的,但如何做到这一点。关于inapp购买

回答

0

您需要为完整版本创建单独的捆绑ID。因为这是两种不同的应用。

1

你可以用两种方法做到这一点。您已将精简版和完整版作为两个独立的应用程序,或者您可以进行应用程序内升级。根据您如何实施Lite的限制,其中一个或另一个可能是更好的选择。

在两个应用场景中,你开发完全作为一个单独的包,一个独立的包ID。 Xcode目标和条件编译可能会派上用场。在Lite版本中,您想要在App Store中硬编码链接到完整版本。通过从iTunes Connect复制粘贴找出链接。

在第二种情形中,全/精简版是一个运行时间设定,升级包是一个应用程序内购买。实施StoreKit API,提供硬编码的应用内产品ID。一旦发现升级购买(这是一个异步过程),将设置翻转为完整。

我推荐第二种方法。首先,所有的评论都会在Lite版本下进行,而不是在Lite和Full之间进行分割。另外,如果您的应用程序具有设置或数据文件,升级时不会丢失。

编辑:这里是实现应用内购买的可能是什么样子等。某处在应用程序有一个升级按钮(链接,图片等等)这是这样的:

if(![SKPaymentQueue canMakePayments]) 
{ 
    //Display the "cannot pay here" message 
    return; 
} 

@try 
{ 
    [[SKPaymentQueue defaultQueue] 
     addPayment:[SKPayment paymentWithProductIdentifier: @"com.mydomain.myproduct.full"]]; 
} 
@catch (NSException * e) 
{ 
    //Sorry... 
} 

同时,你需要在你的应用程序,处理StoreKit通知的类。我提到它是异步的;好吧,它仍然是。就我而言,我用的AppDelegate为:

@interface MyAppDelegate : NSObject <..., SKPaymentTransactionObserver> 

而且您指定的应用程序委托作为一个:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    //... 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
} 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 
} 

然后你实现事务处理方法:

- (void)paymentQueue:(SKPaymentQueue *)q updatedTransactions:(NSArray *)tr 
{ 
    int i, n = [tr count]; 
    for(i=0;i<n;i++) 
    { 
     SKPaymentTransaction *t = [tr objectAtIndex:i]; 
     if(t.transactionState == SKPaymentTransactionStatePurchased) 
      [self ProcessPurchase: t.payment.productIdentifier]; 

     //Support for restored transactions 
     if(t.transactionState == SKPaymentTransactionStateRestored) 
      [self ProcessPurchase: t.originalTransaction.payment.productIdentifier]; 

     //Failed/purchased/restored 
     if(t.transactionState != SKPaymentTransactionStatePurchasing) 
      [q finishTransaction:t]; 
} 

-(void)ProcessPurchase:(NSString*)ProgID 
{ 
    if([ProgID compare:@"com.mydomain.myproduct.full"] == 0) 
    { 
     //It's an upgrade! Change the settings, enable hidden content, and stuff... 
    } 
} 

像这样的东西。

+0

是的,谢谢你的建议,我也在想同样的事情,但我不知道这是如何工作的。 cna你建议我一步一步来。非常感谢 – 2011-03-30 09:28:57

+0

@Gopal Rathod:请参阅编辑。 – 2011-03-30 13:04:12

+0

谢谢..现在我有回应计数0什么是解决方案。我已经创建了新的应用程序在iTunes帐户的应用程序购买,但我得到0,你能帮我 – 2011-03-31 06:35:05