Ce que vous devez savoir sur la vérification des chèques sur l'App Store (reçu de l'App Store)

StackOverflow a encore beaucoup de questions sur la validation des vérifications de l'App Store, nous avons donc décidé d'écrire un article sur ce sujet dans un format de questions et réponses.


image


Qu'est-ce qu'un chèque App Store?


Il s'agit d'un fichier crypté au format PKCS # 7, qui contient des informations sur tous les achats dans l'application. Il se trouve dans le bundle d'application et peut être facilement obtenu en appelant: Bundle.main.appStoreReceiptURL .


Y a-t-il toujours ce fichier?


Si l'application a été téléchargée depuis l'App Store, alors oui, toujours. Et si elle a été installée via Xcode ou Testflight, alors initialement l'application n'a pas de vérification de bac à sable jusqu'au premier achat ou restauration de la vérification.


Que signifie "valider un chèque"?


Cela signifie décrypter le fichier, recevoir la date JSON et vérifier les achats effectués par l'utilisateur. Vous pouvez le faire localement ou en envoyant une demande à Apple.


Dans quels cas un développeur requiert-il la validation d'un chèque?


Pour valider un achat qui vient de se terminer.
Quand beaucoup avaient un jailbreak, c'était pertinent: il y avait des utilitaires pour contrefaire un chèque. Maintenant, ce problème a cessé d'être aigu, car le jailbreak est devenu une rareté.


Lors de la restauration des achats.
Si un utilisateur réinstalle votre application ou démarre à partir d'un autre appareil, vous devez lui donner accès aux fonctionnalités pour lesquelles il a déjà payé. Après avoir décrypté la vérification de l'App Store, vous pouvez savoir si un achat intégré a été acheté.


Lors de l'achat d'abonnements auto-renouvelables.
Pour déterminer l'état actuel de l'abonnement et la date d'expiration.


Quels achats peuvent être restaurés lors de la validation?


Il existe 4 types d'achats intégrés:


  • achats de consommables
  • achats non consommables
  • abonnements non renouvelables
  • Abonnements auto-renouvelables
    Vous pouvez tout restaurer sauf les achats dépensés. Ceux-ci incluent, par exemple, des pièces dans votre application - quelque chose que vous pouvez acheter autant de fois que vous le souhaitez. Vous devez enregistrer le nombre actuel de pièces chez l'utilisateur sur votre serveur.

Quelles méthodes de validation existent?


Il y en a trois:


  • validation locale avec OpenSSL,
  • Validation à la demande par Apple directement depuis un appareil iOS,
  • Validation à la demande par Apple à l'aide de votre serveur.

Quelle méthode de validation est la meilleure?


La validation locale est complexe et nécessite beaucoup de temps et d'efforts pour être mise en œuvre. Vous devrez également ajouter la bibliothèque OpenSSL à votre projet. Dans certains cas, vous devez mettre à jour le chèque.


Apple ne recommande pas de vérifier les vérifications sur l'appareil iOS lui-même. Ce n'est pas sûr: une demande peut être interceptée avec une attaque de l'homme du milieu.


Il est préférable de valider les contrôles sur le serveur. De plus, Apple y ajoute occasionnellement de nouveaux champs, par exemple grace_period_expires_date et subscription_group_identifier . Sur notre serveur, nous pouvons rapidement apporter des modifications sans mettre à jour l'application. Et les deux méthodes de validation précédentes peuvent être facilement trompées en modifiant simplement l'heure du système sur l'appareil iOS.


À quoi sert le secret partagé?


Il s'agit d'une ligne de clé spéciale qui est nécessaire pour décrypter les chèques avec des achats auto-renouvelables. Apple utilise le secret partagé comme paramètre dans la demande HTTPS à Apple.


Où obtenir le secret partagé?


Accédez à l'App Store Connect, ouvrez l'application, accédez à l'onglet Fonctionnalités , dans la section Achats intégrés, vous verrez la clé partagée pour le bouton de l'application . Générez une nouvelle clé, si ce n'est pas déjà fait.


Exemple de code pour valider un chèque


 func validateReceipt(){ #if DEBUG let urlString = "https://sandbox.itunes.apple.com/verifyReceipt" #else let urlString = "https://buy.itunes.apple.com/verifyReceipt" #endif guard let receiptURL = Bundle.main.appStoreReceiptURL, let receiptString = try? Data(contentsOf: receiptURL).base64EncodedString() , let url = URL(string: urlString) else { return } let requestData : [String : Any] = ["receipt-data" : receiptString, "password" : "YOUR_SHARED_SECRET", "exclude-old-transactions" : false] let httpBody = try? JSONSerialization.data(withJSONObject: requestData, options: []) var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("Application/json", forHTTPHeaderField: "Content-Type") request.httpBody = httpBody URLSession.shared.dataTask(with: request) { (data, response, error) in // convert data to Dictionary and view purchases }.resume() } 

Ceci est un exemple de validation d'un chèque sur iOS. N'oubliez pas de remplacer la valeur de YOUR_SHARED_SECRET par votre secret partagé .


Après avoir reçu les data , convertissez-les en Dictionary :


 DispatchQueue.main.async { if let data = data, let jsonData = try? JSONSerialization.jsonObject(with: data, options: .allowFragments){ // your non-consumable and non-renewing subscription receipts are in `in_app` array // your auto-renewable subscription receipts are in `latest_receipt_info` array } } 

Exemple de reçu déchiffré sur l'App Store


Vous pouvez voir ici un exemple de chèque avec deux transactions dans une application avec un abonnement auto-renouvelable.


Quelles sont les différences entre in_app et latest_receipt_info ?


  • latest_receipt_info contient toutes les transactions, y compris les renouvellements d'achats auto-renouvelables. Vous ne devez utiliser que ce tableau.


  • in_app contient des transactions d'achats in_app et d'abonnements non renouvelables. La première transaction de votre abonnement auto-renouvelable est également dupliquée ici. Les achats de consommables apparaissent également dans le tableau in_app , mais disparaissent ensuite lorsque le développeur termine la transaction.



Conclusion


Chez Apphud, nous avons implémenté la validation des vérifications de l'App Store pour les applications avec des abonnements auto-renouvelables dans un SDK open-source pratique. Apphud vous aide également à suivre l'état de l'abonnement, à analyser les mesures clés, à proposer automatiquement des remises aux utilisateurs non abonnés, et bien plus encore. Si vous éprouvez de la douleur en travaillant avec des abonnements, essayez gratuitement notre solution .

Source: https://habr.com/ru/post/fr472188/


All Articles