2012-06-13 13 views
41

ボタンを復元し、それは以下の理由で拒否があります。私たちは、あなたのアプリがでていますことを発見しは残念ながら3週間待って、私が最初に私のアプリのアップデートにアプリの購入に実装されている

を復元することができますが、ユーザが以前に購入したアプリ内購入を復元するための「復元」機能は含まれていません。 以前に のアプリ内購入商品を復元するには、 に「復元」ボタンを用意し、「復元」ボタンをタップすると復元プロセスを開始するのが適切です。

今私は、アプリの購入がタップ/見ることができる私のテーブルの右(上)にnavbarボタンを追加し、ボタンにリンクされます、次のコードを追加することを考えていた:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

誰かが、これが正しいこと、そしておそらくすべてが必要であることを確認できますか?今度はこれがうまく通過することを望みます。前もって感謝します!

+7

私は同じ邪悪な拒否通知を受けました。あなたはいつも "復元"ボタンを提供していますか?復元可能なアプリ内購入がどこにあるかを自動的に確認したいが、restoreCompletedTransactionsを呼び出すと、パスワードの入力が求められます。それは吸う!これはこれのためのもう一つのAPIですか? "BUY"ボタンを "BUY/RESTORE"に変更できますか?それはまだ吸う。私はフルタイム "RESTORE"ボタンの余地がありません。 – whatchamacallit

+1

@whatchamacallit私がしたのは、上のコードをnavbarのボタンに接続されたメソッドに置いて承認されただけです。あなたがナビゲーションバーにボタンのためのスペースを持っていない場合は、恐らくテーブル自体の中に置く必要があります。がんばろう! –

+5

Mighty EagleのAngry Birdsに復元ボタンが表示されませんか?どうして拒否されないのですか? – erkanyildiz

答えて

27

先週と同じ理由で私は拒否されました。これはAppleが望んだものです。復旧ボタンを追加した後、彼らはこの件に関して他の質問をしませんでした。

もちろん、[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];に電話するだけでなく、復元自体も実装する必要があります(つまり、ユーザーにコンテンツを提供すること)。

+0

返信Nikitaありがとう。確かに非常にイライラ。基本的に私のアプリ内購入でやったことは、ユーザーが購入した後、購入した商品IDの配列に入れられることです。アプリ内購入を提供するビューをタップすると、ビューは購入した配列にユーザーがいるかどうかをチェックし、それに基づいて購入ビューまたは広告ビューに自動的にリダイレクトします。 restoreCompletedTranscationsが呼び出されたときに何が起こっているのか教えてください。ありがとう –

+0

restoreCompletedTranscationsはSKPaymentObserverデリゲートへの復元されたトランザクションを提供するので、以前に購入したユーザーを見ることができます。 trasnsactionsは単なるSKPaymentTransactionsであり、その状態はSKPaymentTransactionStateRestoredです。 –

+0

ご協力いただきありがとうございます!最後のトランザクションの詳細を取得する方法または最後に完了したトランザクションを復元する方法を受け入れるかどうかを確認します。 –

41

私はこれのバリエーションを使用します。これは意味をなさない場合

//inside of an IBaction 
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions]; 


// Then this is called 
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { 
    NSLog(@"%@",queue); 
    NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]); 

    NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init]; 
    NSLog(@"received restored transactions: %i", queue.transactions.count); 

    for (SKPaymentTransaction *transaction in queue.transactions) { 
     NSString *productID = transaction.payment.productIdentifier; 
     [purchasedItemIDs addObject:productID]; 
     NSLog (@"product id is %@" , productID); 
     // here put an if/then statement to write files based on previously purchased items 
     // example if ([productID isEqualToString: @"youruniqueproductidentifier]){write files} else { nslog sorry} 
    } 
} 

申し訳ありませんが、私は私のiPadでよ。

+6

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];私の問題を解決!ありがとう!他の多くの例がこの行を無視しています。 – Sunkas

+1

これは正確ではありません。あなたがrestoreCompletedTransationsを呼び出した後に呼び出されるデリゲートメソッドは - (void)paymentQueue:(SKPaymentQueue *)キューupdatedTransactions:(NSArray *)トランザクション – odyth

+0

あなたにとっては正確ではないかもしれませんが、うーん。 –

3

リストアボタンの代わりに、リストアスイッチをapp settings bundleにすることができます。それはUIを圧倒しておらず、Appleがそれを歓迎しているようだ(しかし、あなたはこのようにメカニックを実装したことに言及している)。

BOOL shouldRestorePurchases = [[NSUserDefaults standardUserDefaults] boolForKey:@"restorePurchasesKey"]; 
+1

古い電話から新しい電話に移行する場合、これはうまくいきません。 –

+0

@AbdulYasinの方法では、設定バンドルにブール値を格納する方法が説明されています。アプリでは、 「復元ボタン」と同じように。 –

2

私は同じ理由で拒否されました。これは、異なるiOS端末で同じApple IDでログインできるためです。

たとえば、iPadの[email protected]にログインしているとします。あなたのアプリケーションをダウンロードすると、私は広告を削除したいと思います(そうしないとあなたのアプリに広告があるとしましょう)、私は99¢のためにそれらを削除します。 1年後、私はiPhoneを購入し、そのアカウントの[email protected]にサインインし、あなたのアプリをもう一度ダウンロードします。しかし、私はすでにそれらを支払ったにもかかわらず、広告はまだそこにあります。誰が同じことを2回払いたいのですか? restore機能を使用すると、iPadで行った購入を復元し、iPhoneで動作させることができます。

が購入を復元するには、使用できます。その後

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

を、あなたはまた、ユーザが購入したコンテンツを提供する必要があります。

関連する問題