5

私はかなり奇妙ではあるが深刻な問題を抱えており、同様のシナリオを持つ人を見つけることができませんでした.

3 つのアプリ内購入のオプションがあるアプリがあります。メソッドの内部では、paymentQueue:updatedTransactions:購入が成功するとサーバーに呼び出しを送信し、それをデータベースに記録します。そのため、アプリの各 IAP の正確な数をリアルタイムで把握できます。

しかし、iTunesConnectにログインして売上を見ると、アプリ内購入の完了数が劇的に少なくなっています。たとえば、3 日前、私のデータベースには150 件のアプリ購入が記録されていました。しかし、iTunesConenect は、その同じ日に合計30件の完了したトランザクションしか表示しません。

なぜこれができるのか、私は途方に暮れています。

私は領収書を確認しません - 少数の人々が自分の電話を脱獄して IAP を無料で手に入れても本当に気にしないので、私はそれらを確認しないことにしました。これが問題である可能性があると思いますが、私のアプリを使用している 150 人のユーザーのうち 120 人がジェイルブレイクされた電話を使用しているとは思えません。

だから私は疑問に思っています: iTunesConnect IAP レポートに遅延はありますか? それとも私のコードに何かありますか?(以下のコード)

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        NSLog(@"Transaction: %@\n", transaction.payment.productIdentifier);

        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:

                NSLog(@"Processing purchase");
                [_purchasingActivityView setTitle:@"Processing"];

                // show wait view here
                //statusLabel.text = @"Processing...";
                break;

            case SKPaymentTransactionStatePurchased:

                //TODO-> Log analytics
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                NSLog(@"Finished purchase: %@\n", transaction.payment.productIdentifier);

                //All Filters were purchased
                if([transaction.payment.productIdentifier isEqualToString:kInAppPurchaseFilterPackALLProductId]) {
                    if ([[ACSimpleKeychain defaultKeychain] storeUsername:@"iapALL"
                                                                 password:nil
                                                               identifier:transaction.transactionIdentifier
                                                               forService:@"myService"]) {
                        [Logger log:[NSString stringWithFormat:@"Stored transaction credentials for fall: %@", transaction.transactionIdentifier]];

                            [[WebCallManager sharedManager] sendPurchaseNotice:@"ALL" withDeviceId:[OpenUDID value] withDelegate:nil];
                    }
                    else {
                        [Logger log:[NSString stringWithFormat:@"Error storing transaction credentials for fpone & fptwo purchase: %@", transaction.transactionIdentifier]];
                    }
                }

                //Filter Pack ONE was purchased
                else if([transaction.payment.productIdentifier isEqualToString:kInAppPurchaseFilterPackONEProductId]) {
                    if ([[ACSimpleKeychain defaultKeychain] storeUsername:@"iapONE"
                                                                 password:nil
                                                               identifier:transaction.transactionIdentifier
                                                               forService:@"myService"]) {
                        [Logger log:[NSString stringWithFormat:@"Stored transaction credentials for fpone purchase: %@", transaction.transactionIdentifier]];
                        [[WebCallManager sharedManager] sendPurchaseNotice:@"ONE" withDeviceId:[OpenUDID value] withDelegate:nil];
                    }
                    else {
                        [Logger log:[NSString stringWithFormat:@"Error storing transaction credentials for fpone purchase: %@", transaction.transactionIdentifier]];
                    }
                }

                //Filter Pack TWO was purchased
                else if([transaction.payment.productIdentifier isEqualToString:kInAppPurchaseFilterPackTWOProductId]) {
                    if ([[ACSimpleKeychain defaultKeychain] storeUsername:@"iapTWO"
                                                                 password:nil
                                                               identifier:transaction.transactionIdentifier
                                                               forService:@"myService"]) {
                        [Logger log:[NSString stringWithFormat:@"Stored transaction credentials for fptwo purchase: %@", transaction.transactionIdentifier]];
                        [[WebCallManager sharedManager] sendPurchaseNotice:@"TWO" withDeviceId:[OpenUDID value] withDelegate:nil];
                    }
                    else {
                        [Logger log:[NSString stringWithFormat:@"Error storing transaction credentials for fptwo purchase: %@", transaction.transactionIdentifier]];
                    }
                }


                [_purchasingActivityView dismissWithClickedButtonIndex:0 animated:YES];

                break;


            case SKPaymentTransactionStateRestored:
                if(_purchasingActivityView) {
                    [_purchasingActivityView dismissWithClickedButtonIndex:-1 animated:YES];
                }

                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                // remove wait view here
                NSLog(@"Transation restored\n");
                break;

            case SKPaymentTransactionStateFailed:

                if (transaction.error.code != SKErrorPaymentCancelled) {
                    NSLog(@"Error payment cancelled");
                }
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                // remove wait view here

                [_purchasingActivityView dismissWithClickedButtonIndex:-1 animated:YES];
                NSLog(@"Purchase Error: %@\n", [[transaction error] description]);

                break;

            default:
                break;
        }
    }
}

ユーザーの観点からは、トランザクションは完全に機能しているように見えます。

ヘルプ/アドバイスは非常に高く評価されます。これは私にとって完全に当惑しています。ありがとう!

編集: また、私は 3 つの IAP 製品を持っていることにも言及する必要があります。これらはすべて、私のデータベース レコードによると、複数回購入されています。ただし、ITC では、これまでに購入されたことがあるのは 2 つだけです。

4

2 に答える 2

0

ユーザーが以前にアプリ内購入を購入したことがあり、その後アプリを削除してアプリを再インストールした場合、再度購入することはできますが、実際には販売とは見なされません (iTunes Connect にも表示されません)。これはあなたの切断でしょうか?

于 2013-01-21T13:58:22.533 に答える