私はかなり奇妙ではあるが深刻な問題を抱えており、同様のシナリオを持つ人を見つけることができませんでした.
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 つだけです。