web-dev-qa-db-fra.com

Bouton de restauration des achats intégrés

J'ai mis en place des achats intégrés dans la mise à jour de mon application pour la première fois, attendez seulement 3 semaines et faites-la rejeter pour la raison suivante:

Nous avons constaté que votre application propose des achats intégrés qui peuvent être restaurés, mais elle ne comprend pas de fonctionnalité de "restauration" pour permettre aux utilisateurs de restaurer les achats intégrés précédemment achetés. Pour restaurer des produits d'achat intégrés précédemment achetés, il serait approprié de fournir un bouton "Restaurer" et de lancer le processus de restauration lorsque le bouton "Restaurer" est tapé.

Maintenant, je pensais ajouter un bouton navbar à droite (en haut) de ma table où les achats de l'application peuvent être vus/tapés et ajouter le code suivant qui sera lié au bouton:

 [[SKPaymentQueue defaultQueue]   restoreCompletedTransactions];

Quelqu'un peut-il vérifier que cela est correct et probablement tout ce qui est nécessaire? Voudrais que cela réussisse cette fois. Merci d'avance!

42
Alex G

Alex, j'ai été rejeté pour la même raison la semaine dernière, et c'est exactement ce que Apple voulait - après avoir ajouté un tel bouton Restaurer, ils n'en ont pas demandé autre question à ce sujet.

Bien sûr, vous devez non seulement appeler [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];, mais implémentez également la restauration (je veux dire, fournir le contenu à l'utilisateur).

28
Nikita Pestrov

J'utilise une variante de ceci:

//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}
    }  
}

Désolé, je suis sur mon iPad si cela n'a aucun sens.

41
Brian Noah

J'ai été rejeté pour la même raison. Cela est dû au fait que vous pouvez être connecté avec le même Apple ID sur différents appareils ios.

Par exemple, supposons que je suis connecté à [email protected] sur un iPad. Lorsque je télécharge votre application, je me rends compte que je voudrais supprimer les annonces (disons que vous avez des annonces sur votre application si vous ne le faites pas), donc je les supprime pour 99¢. Un an plus tard, je décide d'acheter un iPhone et de me connecter à [email protected] sur ce compte, et je télécharge à nouveau votre application. Les publicités sont toujours là, même si je les ai déjà payées. Qui voudrait payer deux fois la même chose? Avec la fonction restore, je peux restaurer les achats que j'ai effectués sur mon iPad et les faire fonctionner sur mon iPhone.

Pour restaurer l'achat, vous pouvez utiliser:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

Après cela, vous devez également fournir le contenu que l'utilisateur a acheté.

3
Jojodmo

Le bouton de restauration pourrait être un commutateur de restauration dans ensemble de paramètres d'application . Il ne submerge pas l'interface utilisateur et semble être Apple s'en réjouit (mais n'oubliez pas de mentionner que vous avez implémenté la mécanique de cette façon).

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