web-dev-qa-db-fra.com

Comment tester IAP (achat in-app) dans iOS Simulator OR sur l'appareil?

J'ai implémenté un mécanisme d'achat intégré non consommable simple en suivant le livre de tutoriel Ray Wenderlich.

Lorsque mon application démarre, j'initie une demande d'informations sur le produit:

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];

Le SKProductRequest est créé. Il a une adresse mémoire mais rien d'autre ne se produit. Aucune des méthodes déléguées n'est appelée:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    NSLog(@"Product info received...");
    NSArray *products = response.products;
    for (SKProduct *product in products) {
        NSLog(@"ID: %@, title:%@, (%f)", product.productIdentifier, product.localizedTitle, product.price.floatValue);
    }

    self.productsRequest = nil;
}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
    NSLog(@"Failed to load list of products");
    self.productsRequest = nil;
}

J'ai vérifié deux fois:

  • Application entièrement configurée dans iTunes Connect.
  • État de l'application dans ITC est "Préparer le téléchargement"
  • Ajout d'un IAP non consommable.
  • Statut du produit IAP dans ITC est "Prêt à soumettre"
  • L'ID d'application est com.mycompany.myapp à la fois pour l'application et dans la liste. Vérifié deux fois.
  • IAP utilise com.mycompany.myapp.productname (en utilisant exactement le même ID pour la demande).
  • Création d'un compte utilisateur de test dans ITC.
  • Rien soumis à Apple pour l'instant.
  • Mon Mac dispose d'un accès Internet.
  • Il n'y a aucun autre message dans la console ou à l'écran.

Le livre de Ray Wenderlich ne mentionne pas que je dois faire autre chose que cela.

Seulement ne fois J'ai vu un appel -didFailWithError: à mon délégué sur le périphérique, mais il n'est plus apparu. Mon délégué n'est pas appelé à la fois sur l'appareil ou le simulateur. Je l'ai laissé fonctionner pendant des minutes sans aucune réponse.

iTunes Connect donne cet avertissement déroutant:

Vos premiers achats intégrés doivent être soumis avec une nouvelle version d'application. Sélectionnez-les dans la section Achats intégrés de la page Détails de la version, puis cliquez sur Prêt à télécharger le fichier binaire.

Est-ce nécessaire avant de pouvoir tester les achats intégrés?

25
openfrog

Dans la version actuelle de Xcode 5.0 (5A1413), les achats intégrés ne fonctionneront pas dans le simulateur iOS.

StoreKit (achats intégrés) ne fonctionnera pas dans le simulateur. 13962338

Source: Notes de publication Xcode 5.0> Problèmes connus> Simulateur iOS https://developer.Apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/xc5_release_notes/xc5_release_notes.html#//Apple_ref/doc/ uid/TP40001051-CH2-SW3

24
yood

Dans la documentation du simulateur iOS, il est écrit:

Limitations de l'API

Dans iOS Simulator, il existe certaines limitations aux API et fonctionnalités, notamment:

Apple Push Services
Privacy alerts for access to Photos, Contacts, Calendar, and Reminders
The UIBackgroundModes key
iCloud document syncing and key-value storage support

Les cadres non pris en charge incluent:

External Accessory
Media Player
Message UI 
Event Kit
In UIKit, the UIVideoEditorController class
Store Kit

Étant donné que l'achat dans l'application nécessite que Store Kit fonctionne et que le framework Store Kit ne soit pas pris en charge pour Simulator, vous ne pouvez pas tester IAP dans iOS Simulator.

Plus d'informations: documentation iOS Simulator

16
Ashbay

Malheureusement, il y a plusieurs choses que vous ne pouvez pas tester sur le simulateur. In App Purchases appartient à cette liste.

Donc, vous ne pouvez pas tester les achats intégrés dans le simulateur, vous avez besoin d'un appareil iOS pour cela.

Edit: Pour autant que je puisse voir, c'est ce qui se passe lorsque vous essayez de tester IAP sur le simulateur, les délégués d'achat ne seront pas appelés.

5
Bartu

J'ai compris quelque chose:

J'ai lancé le SKProductRequest immédiatement à la fin du -didFinishLaunching d'AppDelegate ... et cela n'a jamais fonctionné.

Ensuite, j'ai fait un appel différé et j'ai attendu 3 secondes. Dès lors, il a commencé à fonctionner. Vous ne pouvez donc pas faire de demandes StoreKit immédiatement après le lancement de l'application.

1
openfrog

Où est déclaré votre objet skProductRequest? Essayez une déclaration globale de skProductRequest.

0
user3189333