web-dev-qa-db-ja.com

アプリの購入で復元ボタン

私は初めてアプリの更新にアプリの購入を実装しましたが、3週間しか待たず、次の理由で拒否されました:

アプリには復元可能なIn-App Purchaseがありますが、ユーザーが以前に購入したIn-App Purchaseを復元できる「復元」機能は含まれていません。以前に購入したアプリ内購入製品を復元するには、「復元」ボタンを提供し、「復元」ボタンがタップされたときに復元プロセスを開始することが適切です。

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

 [[SKPaymentQueue defaultQueue]   restoreCompletedTransactions];

誰かがこれが正しいこと、そしておそらくすべてが必要であることを確認できますか?今回はこれが成功するようにしたいです。前もって感謝します!

42
Alex G

アレックス、私は先週同じ理由で拒否されましたが、これは正しいですApple欲しい-このような復元ボタンを追加した後、彼らは何も尋ねませんでしたこのテーマに関する他の質問。

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

28
Nikita Pestrov

私はこれのバリエーションを使用します:

//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を使用しています。

41
Brian Noah

復元ボタンの代わりに、 app settings bundle の復元スイッチを使用できます。 UIを圧倒することはなく、Appleは歓迎しています(ただし、この方法でメカニックを実装していることを忘れないでください))。

BOOL shouldRestorePurchases = [[NSUserDefaults standardUserDefaults] boolForKey:@"restorePurchasesKey"];
3
Roman B.