Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 关于inapp采购_Iphone - Fatal编程技术网

Iphone 关于inapp采购

Iphone 关于inapp采购,iphone,Iphone,我在iphone上开发了一个应用程序。 我已经在app store上加载了它的lite版本。 现在我无法从应用程序本身加载完整版本,如何才能做到这一点。 我知道这是可能的,但如何做到这一点。您需要为完整版本创建单独的包id。因为这是两种不同的应用程序。您可以用两种方法来实现。您可以将lite和full作为两个独立的应用,也可以进行应用内升级。根据您如何实现Lite的限制,一个或另一个可能是更好的选择 在两个应用程序场景中,您可以将Full开发为一个单独的捆绑包,使用单独的捆绑包id。对于这一点,

我在iphone上开发了一个应用程序。 我已经在app store上加载了它的lite版本。 现在我无法从应用程序本身加载完整版本,如何才能做到这一点。
我知道这是可能的,但如何做到这一点。

您需要为完整版本创建单独的包id。因为这是两种不同的应用程序。

您可以用两种方法来实现。您可以将lite和full作为两个独立的应用,也可以进行应用内升级。根据您如何实现Lite的限制,一个或另一个可能是更好的选择

在两个应用程序场景中,您可以将Full开发为一个单独的捆绑包,使用单独的捆绑包id。对于这一点,Xcode目标和条件编译可能很方便。在Lite版本中,您希望在App Store中硬编码指向完整版本的链接。通过从iTunes Connect复制粘贴找到链接

在第二个场景中,full/lite是运行时设置,升级包是应用内购买。实现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)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...
    }
}
-(void)paymentQueue:(SKPaymentQueue*)q更新的事务:(NSArray*)tr
{
int i,n=[tr计数];

对于(i=0;iyes,谢谢你的建议,我也在考虑同样的问题,但我不知道这是怎么回事。cna你建议我一步一步来。谢谢lotThanks..现在我的响应计数为0,什么是解决方案。我已经在itunes帐户上创建了用于应用内购买的新应用,但我得到了计数0,你能帮我吗
- (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...
    }
}