3

アプリ内購入に次のコードを使用しました。

- (void)viewDidLoad {
if ([SKPaymentQueue canMakePayments]) {
    NSLog(@"Can Buy Product");

    SKProductsRequest *productRequest=[[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.mycompany.myproduct.productpack"]];
    productRequest.delegate=self;
    [productRequest start];
}
else {

    NSLog(@"Product Can't be purchased");
}
}

-(IBAction)purchasePack1 {

SKPayment *payment=[SKPayment paymentWithProductIdentifier:@"com.mycompany.myproduct.productpack"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];

}


-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

validProduct=nil;
int count=[response.products count];
if (count>0) {
    NSLog(@"Product Avail");

    validProduct=[response.products objectAtIndex:0];
}
else {
    NSLog(@"No Product avail");
    [purchaseBtn setHidden:TRUE];
}
}


-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

for (SKPaymentTransaction *transaction in transactions) {
    switch (transaction.transactionState) {
        case SKPaymentTransactionStatePurchasing:
            NSLog(@"Purchasing");   
            [activityIndicatorObj setHidden:FALSE];
            [activityIndicatorObj startAnimating];
            break;

        case SKPaymentTransactionStatePurchased:

            UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"Congrats" message:@"Thanks For Purchasing " delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
            [alt show];
            [alt release];
            NSLog(@"Purchased");
            [activityIndicatorObj stopAnimating];
            [activityIndicatorObj setHidden:TRUE];
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;

            case SKPaymentTransactionStateFailed:

            if (transaction.error.code!=SKErrorPaymentCancelled) {

                NSLog(@"Cancelled");

            }
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            UIAlertView *alt1=[[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Some Error Encountered!" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
                [alt1 show];
                [alt1 release];
            NSLog(@"Failed");
            [activityIndicatorObj stopAnimating];
            [activityIndicatorObj setHidden:TRUE];
            break;

            case SKPaymentTransactionStateRestored:
            NSLog(@"Restored");
            [activityIndicatorObj stopAnimating];
            [activityIndicatorObj setHidden:TRUE];
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;



        default:
            break;
    }
}
}

購入ボタンをクリックすると、「この製品を購入済みで、まだダウンロードしていません。ダウンロードしますか?」という警告メッセージが表示されます。[はい] をクリックしても、アプリから応答がありませんでした。製品がダウンロードされていないことは確かです。誰でもこの問題の提案を教えてください。前もって感謝します。

4

1 に答える 1

0

の実装が見当たりません- (void)provideContent:(NSString *)productId- その部分を見逃しましたか? いずれにせよ、transactionState が SKPaymentTransactionStatePurchased に切り替わったときに通知を受け取る必要があります。

まだアプリ内マネージャー クラスを配置するのに役立つ場合は、アプリ内購入に関する Ray Wenderlich tut を参照してください。ビューコントローラーにアプリ内ロジックを配置したと思います-その部分を別のクラスに残しておくとよいでしょう。だから、アプリ内マネージャー/ヘルパー:-)

于 2012-08-22T10:51:17.703 に答える