J'essaie de vérifier qu'un achat intégré auto-renouvelable n'a pas expiré côté serveur (pas sur un appareil).
J'utilise le Grand Unified Receipt d'Apple (transactions de style iOS 7). La réponse renvoyée par Apple contient des éléments in_app
Et latest_receipt_info
Avec un tableau de reçus. L'élément JSON in_app
Contient MOINS reçus que latest_receipt_info
. Je m'attendais à ce que les deux éléments contiennent le même nombre ou les mêmes reçus.
De plus, je m'attendais à ce que l'élément in_app
Contienne TOUS les reçus. Cependant, il semble que latest_receipt_info
Contient en fait tous les reçus. Apple semble suggérer d'utiliser in_app
Pour trouver un dernier reçu.
Je suis surpris de voir le latest_receipt_info
Car la documentation d'Apple indique que cet élément est "Renvoyé uniquement pour les reçus de transaction de style iOS 6 pour les abonnements auto-renouvelables." (pas iOS 7+).
Quel élément JSON dois-je répéter pour trouver le dernier reçu pour les transactions de style iOS 7 auto-renouvelables: in_app
Ou latest_receipt_info
?
Pour vérifier qu'un abonnement auto-renouvelable n'a pas expiré, cochez la case latest_receipt_info
élément.
C'est ce qui est actuellement (2017-08-09) officiellement documenté sur le in_app
et latest_receipt_info
éléments:
in_app
Dans le fichier JSON, la valeur de cette clé est un tableau contenant tous les reçus d'achat in-app basés sur les transactions d'achat in-app présentes dans les données de réception en base 64 d'entrée. Pour les reçus contenant des abonnements renouvelables automatiquement, vérifiez la valeur de la clé latest_receipt_info pour obtenir l'état du renouvellement le plus récent.
( source )
latest_receipt_info
Renvoyé uniquement pour les reçus contenant des abonnements renouvelables automatiquement. Pour les reçus de transaction de style iOS 6, il s'agit de la représentation JSON du reçu pour le renouvellement le plus récent. Pour les reçus d'application de style iOS 7, la valeur de cette clé est un tableau contenant toutes les transactions d'achat dans l'application. Cela exclut les transactions pour un produit consommable qui ont été marquées comme terminées par votre application.
( source )
This est la discussion la plus récente et la plus claire à ce sujet. J'espère que cela t'aides.
Babken Vardanyan a mentionné dans plusieurs fils de réponse que latest_receipt_info est parfois manquant. Une chose intéressante que j'ai vue dans les reçus de ce fil https://forums.developer.Apple.com/thread/922 était la différence entre latest_receipt_info et in_app. En faisant un diff, j'ai remarqué que le premier reçu de la chaîne était manquant (contenant is_trial_period = true). Il n'a pas généré d'équivalent de réception dans l'application.
Comme lié dans la documentation: https://developer.Apple.com/library/archive/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//Apple_ref/doc/uid/TP40010573-CH104-SW4 dit d'utiliser latest_receipt_info comme "pour les reçus d'applications de style iOS 7, la valeur de cette clé est un tableau contenant toutes les transactions d'achat dans l'application".
En ce qui concerne les abonnements, vous ne devez pas utiliser in_app et uniquement utiliser latest_receipt_info.
https://www.revenuecat.com/2018/09/24/Apple-subscription-notifications-are-almost-useless couvre les cas Edge comme annulation_date où il s'agit d'un service client fourni une annulation comme vu dans ce Apple: https://forums.developer.Apple.com/thread/9667
Champs de réception (Apple Docs)
La documentation ci-dessus rend assez clair l'utilisation de in_app
. Veuillez noter que la ligne "Les clés non documentées ci-dessous sont réservées à l'utilisation par Apple et doivent être ignorées par votre application" dans la documentation. Donc, même si le reçu décodé a latest_receipt_info
, nous devons ignorer cela.
Mais je suis d'accord, la documentation fait très défaut et cela me rend nerveux. Faites-moi savoir quelle a été votre expérience en utilisant la vérification des reçus de style iOS 7 en production.