Je suis en mesure de créer ma première application d'achat intégrée. J'aimerais savoir s'il existe un moyen de vérifier l'achat sur votre serveur.
Je dois créer toute la gestion des utilisateurs et je voudrais savoir pour tous les utilisateurs enregistrés ce qu'ils ont déjà acheté sur leurs appareils iOS, afin qu'ils obtiennent une application Web gratuite, ou quelque chose du genre. Alors, est-il possible pour moi de vérifier côté magasin Apple, si cet utilisateur a déjà acheté un produit?
MODIFIER:
Le scénario est comme ça:
Utilisateur A acheter une application B sur un appareil mobile. Après cela, je voudrais vérifier sur mon serveur (sur ma page Web, ...) si l'utilisateur A est acheté de l'application B ou (similaire) quelle application a été achetée par l'utilisateur A.
Je ne souhaite pas envoyer de message depuis un appareil mobile à mon serveur que l'utilisateur A achète l'application B, car les utilisateurs peuvent reproduire cet appel sur le serveur même s'ils n'ont pas acheté l'application B.
Je vérifierais du côté du serveur avec l'App Store si l'utilisateur A a acheté l'application B.
Récupérez le reçu de l'application (à partir du fichier sous [[NSBundle mainBundle] appStoreReceiptURL]
) et envoyez-le à votre serveur. Alors soit…
Analysez le reçu et vérifiez sa signature par rapport au certificat d'Apple comme décrit ici (sur votre serveur, pas dans l'application). Ou,
Envoyez le reçu (à nouveau, de votre serveur) à la boutique d'applications pour validation comme décrit ici .
Je viens de publier une simple application Web Python/Django ( Vérificateur de reçu d’achat intégré à l’application ) qui gère automatiquement la partie ennuyeuse de ce processus (c’est-à-dire vérifier le reçu sur votre serveur tout en maintenant l’intégrité cryptographique). Le code lui-même est relativement simple, mais j’imaginais que d’autres apprécieraient ne pas avoir à faire le gros travail ici.
Pour l'utiliser, assurez-vous simplement que votre secret partagé spécifique à l'application est prêt, puis allez ici et cliquez sur "Déployer sur Heroku". Votre application sera opérationnelle dans une minute.
J'ai également inclus un exemple de code expliquant comment utiliser cette application Web pour valider vos reçus dans votre application. Utilisation de Swift 4:
guard let receiptURL = Bundle.main.appStoreReceiptURL,
let data = try? Data(contentsOf: receiptURL) else {
return
}
let encodedData = data.base64EncodedData(options: [])
let url = URL(string: "https://your-app.herokuapp.com/verify")!
var request = URLRequest(url: url)
request.httpBody = encodedData
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data,
let object = try? JSONSerialization.jsonObject(with: data, options: []),
let json = object as? [String: Any] else {
return
}
// Your application logic here.
}
task.resume()
Remarque: StackOverflow propose d'autres solutions suggérant d'effectuer la validation complètement dans l'application elle-même, mais je vous le déconseille vivement. Extrait de la documentation Apple dans Guide de programmation de la validation du reçu :
Utilisez un serveur de confiance pour communiquer avec l'App Store. L'utilisation de votre propre serveur vous permet de concevoir votre application pour qu'elle reconnaisse et approuve uniquement votre serveur, et vous assure que votre serveur se connecte au serveur App Store. Il n’est pas possible de créer une connexion sécurisée entre le périphérique d’un utilisateur et l’App Store directement, car vous ne contrôlez aucune des extrémités de cette connexion.
D'autres améliorations pourraient probablement être apportées pour ajouter une sorte de signature cryptographique dans l'en-tête de la réponse afin que votre application puisse vérifier si la réponse est sûre, mais je l'ajouterai probablement dans une version ultérieure. Terminé :)
Le serveur peut vérifier la réception avec App Store via Http Post. Veuillez consulter https://developer.Apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely. html
Pour cela, vous pouvez utiliser les éléments suivants: 1. Saisissez les utilisateurs sur votre serveur avec le statut de l'achat. 2. Vous pouvez également utiliser le reçu de paiement fourni par Apple avec le kit de magasin.
De plus, si vous utilisez un produit non consommable, vous avez simplement besoin d'un bouton de restauration pour cela. Veuillez consulter le document de Apple pour cela. https://developer.Apple.com/in-app-purchase/