2.2.2
(car toute version plus récente échoue sur iOS en raison de # 279)
iOS
Aucune erreur ne doit être générée. L'achat a réussi (en direct et en production)
E_UNKNOWN
erreur
Notre suivi des erreurs Sentry.io rapporte ceci:
{"framesToPop":1,"code":"E_UNKNOWN","nativeStackIOS":["0 LuCoaching 0x000000010062f6fc LuCoaching + 1996540","1 LuCoaching 0x000000010060aa98 LuCoaching + 1845912","2 LuCoaching 0x00000001007cad98 __cxa_throw + 438380","3 LuCoaching 0x00000001007cc62c __cxa_throw + 444672","4 libdispatch.dylib 0x000000019d078484 <redacted> + 16","5 libdispatch.dylib 0x000000019d025610 <redacted> + 56","6 LuCoaching 0x00000001007cc46c __cxa_throw + 444224","7 libdispatch.dylib 0x000000019d0776c8 <redacted> + 24","8 libdispatch.dylib 0x000000019d078484 <redacted> + 16","9 libdispatch.dylib 0x000000019d0249ec <redacted> + 1068","10 CoreFoundation 0x000000019d5ce1bc <redacted> + 12","11 CoreFoundation 0x000000019d5c9084 <redacted> + 1964","12 CoreFoundation 0x000000019d5c85b8 CFRunLoopRunSpecific + 436","13 GraphicsServices 0x000000019f83c584 GSEventRunModal + 100","14 UIKitCore 0x00000001ca444bc8 UIApplicationMain + 212","15 LuCoaching 0x000000010044d110 LuCoaching + 20752","16 libdyld.dylib 0x000000019d088b94 <redacted> + 4"],"userInfo":{"NSLocalizedDescription":"Verbindung mit iTunes Store nicht möglich"},"domain":"SKErrorDomain","line":26,"column":1877,"sourceURL":"/var/containers/Bundle/Application/818C8439-E250-42E8-AD57-EC4FB5FE5547/LuCoaching.app/main.jsbundle"}
Appareil réel. Clients en direct. Échec très cohérent
Lors du test de la procédure avec des utilisateurs Sandbox, l'erreur ne peut pas être reproduite.
@ Gaia-Nutrition Voulez-vous vérifier ce vieux problème? C'est peut-être la même cause.
https://github.com/dooboolab/react-native-iap/issues/201
@JJMoon dans # 201 l'erreur était E_DEVELOPER_ERROR
et a été causée par le non- remplissage de la liste validProducts
utilisant getSubscriptions()
.
Cependant, j'appelle la fonction avant d'essayer d'effectuer la vérification et j'obtiens également une erreur différente.
Mais maintenant que j'y pense. Il peut arriver qu'il y ait un certain délai entre l'appel getSubscriptions()
et buySubscription()
dû au fait que l'utilisateur reconsidère s'il souhaite effectuer l'achat. Cela pourrait-il être un problème? L'application peut avoir été mise en arrière-plan entre-temps.
EDIT: Mais là encore, l'achat est exécuté avec succès, le problème doit donc être celui où la réponse de l'App Store est en cours de traitement
Bonjour,
Même problème de comportement avec "buyProductWithoutFinishTransaction" ou "buyProduct".
Version 2.2.1
le retour stocké est
{
"framesToPop": 1,
"code": "E_UNKNOWN",
"nativeStackIOS": [...],
"userInfo": {
"NSLocalizedDescription": "Connexion à l’iTunes Store impossible"
},
"domain": "SKErrorDomain",
"line": 16,
"column": 1599,
"sourceURL": "..."
}
Nous avons mis à jour le module car nous reproduisons ce bogue en production avec les versions précédentes.
La partie intéressante est que l'achat de restauration échoue également pour mes utilisateurs lorsque cela se produit. Cela n'arrive qu'à environ 1% de nos utilisateurs iOS.
@fierysolid Même cas, nous sommes environ 5% des achats sur iOS qui ont échoué. Lorsque le client essaie à nouveau d'acheter, il fait apparaître un achat de restauration.
Salut à tous. J'espère que c'est corrigé dans notre nouvelle version d'aujourd'hui qui est 2.3.15
. J'ai remarqué que l'utilisation de NSDictionary
dans iOS n'est pas sûre à utiliser et peut provoquer un comportement inattendu. J'ai corrigé ce problème et j'espère que cela fonctionne correctement sur tous les appareils. Veuillez tester ceci.
Veuillez rouvrir lorsque le problème persiste.
@dooboolab
Je reçois toujours ce problème en utilisant buySubscription()
avec un utilisateur de testeur de bac à sable avec iPhone 6S.
{"userInfo":{"NSLocalizedDescription":"Cannot connect to iTunes Store"}}
@danrevah Vous avez donc essayé notre nouvelle version qui est 2.3.15
? @JJMoon Pouvez-vous tester ceci une fois de plus?
@dooboolab oui
@danrevah Veuillez essayer 2.3.16
.
@dooboolab cela a fonctionné une fois, mais pendant que j'essayais à nouveau, j'ai continué à recevoir ces erreurs. (utilisé v 2.3.17)
@JJMoon Avez-vous une idée à ce sujet? il utilise iPhone6S
J'ai rouvert le numéro. cc @JJMoon
Si plus de gens votent pour ce problème, nous essaierons de creuser plus profondément.
@danrevah J'espère que vous ferez référence à ce document.
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267 -CH7-SW6
Pour tester l'abonnement en mode sandbox, vous devez réacheter l'abonnement après un certain temps.
Et vous devrez peut-être l'annuler pour acheter à nouveau.
Et il y a des réactions étranges du serveur Apple sandbox, ce qui rend le test plus difficile.
Si le cas @JJMoon est le problème, nous pouvons le fermer à nouveau. Veuillez rouvrir si vous avez encore besoin d'aide sur celui-ci. @danrevah
@JJMoon J'ai rencontré le même problème. Toute solution? buySubscription lève une exception et pourtant le paiement est déduit. J'ai besoin de données de résultats pour les stocker et les valider.
@hyochans
+1 J'ai le même problème
Essayez également d'utiliser addAdditionalSuccessPurchaseListenerIOS dans buySubscription
. C'est le même problème que dans # 307.
Essayez également d'utiliser addAdditionalSuccessPurchaseListenerIOS dans
buySubscription
. C'est le même problème que dans # 307.
Quelqu'un a-t-il déjà utilisé en production?
@hyochan , j'ai essayé de faire ça mais sans succès.
if (subscription && subscription.success) {
this.props.subscribe(subscription.result);
} else {
if (Platform.OS === 'ios') {
const sub = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
this.props.subscribe(purchase); // -> This code is never fired
sub.remove();
});
}
}
@cbfranca Veuillez suivre le code actuel. Vous n'utilisez même pas promises
. Vous devriez écouter addAdditionalSuccessPurchaseListenerIOS
après le rejet de la promesse.
De plus, vous n'avez pas besoin de Platform.OS === 'ios'
supplémentaires.
@hyochan
Désolé pour mon ignorance, mais je ne pense pas avoir bien compris. J'ai suivi les mêmes bases de l'exemple, en fonction de mon scénario. J'ai créé une abstraction qui traite cette promesse en utilisant async / await. Cet objet d'abonnement est retourné par mon abstraction.
static purchaseSubscription(newSubscriptionID, currentSubscriptionID) {
if (Platform.OS === 'ios') {
const purchaseResult = KinvoBilling.purchaseSubscriptionIOS(newSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.purchaseSubscriptionANDROID(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionANDROID = async (newSubscriptionID, currentSubscriptionID) => {
const hasCurrentSubscription = currentSubscriptionID !== null;
if (hasCurrentSubscription) {
const purchaseResult = KinvoBilling.updateSubscription(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.buySubscription(newSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionIOS = async (subscriptionID) => {
await KinvoBilling.getSubscriptions();
const purchaseResult = await KinvoBilling.buySubscription(subscriptionID);
return purchaseResult;
}
@cbfranca
''
static purchaseSubscriptionIOS = async (subscriptionID) => {
attendre KinvoBilling.getSubscriptions ();
essayez {
const purchaseResult = attendre KinvoBilling.buySubscription (subscriptionID);
} catch (err) {
abonnement const = RNIap.addAdditionalSuccessPurchaseListenerIOS (async (achat) => {
// dooboolab => vérifiez l'appel ici.
this.setState ({reçu: purchase.transactionReceipt}, () => this.goToNext ());
abonnement.remove ();
}
}
return purchaseResult;
}
`` ``
Vérifiez le code ci-dessus. Je pense que vous devez refactoriser votre code pour l'adapter à son cycle de vie.
@hyochan ne fonctionne pas pour moi.
Mon cénario de test est:
Un autre doute: dois-je également utiliser finishTransaction () dans les abonnements?
Je vois aussi cette erreur. Et je pense que je connais une façon de le reproduire.
^ 2.4.1
https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz
iOS, lors d'un test dans TestFlight sur un appareil réel.
J'ai remarqué que lorsque des fonctions RNIap étaient appelées dans mon application, iOS me demandait de saisir un mot de passe pour un utilisateur précédent d'iTunes / App Store (que j'ai depuis déconnecté et remplacé via les paramètres iOS). J'ai lu quelque part en ligne que c'est un problème qui préoccupe les utilisateurs d'iPhone de temps en temps: parfois une application est achetée avec un compte iTunes, puis le téléphone passe à un nouveau compte iTunes, mais l'application continue de demander le mot de passe pour le ancien compte iTunes.
J'ai essayé de supprimer mon application (et TestFlight) et de réinstaller avec le nouvel utilisateur de l'App Store, en vain. La seule façon de me débarrasser de ce comportement était d'effacer l'appareil. Une fois que j'ai fait cela, je ne pouvais plus reproduire cette erreur.
{
code: E_UNKNOWN,
column: 1565,
domain: NSURLErrorDomain,
framesToPop: 1,
line: 20,
nativeStackIOS: [...],
sourceURL: ...,
userInfo: {
_kCFStreamErrorCodeKey: -4,
_kCFStreamErrorDomainKey: 4,
NSErrorFailingURLKey: None,
NSErrorFailingURLStringKey: https://p100-sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppBuy,
NSLocalizedDescription: Cannot connect to iTunes Store,
NSUnderlyingError: {
code: "-1005",
domain: "kCFErrorDomainCFNetwork",
message: "underlying error",
nativeStackIOS: [...],
userInfo:{"NSErrorPeerAddressKey":null,"_kCFStreamErrorCodeKey":-4,"_kCFStreamErrorDomainKey":4}
}
}
}
J'espère que cela aide quelqu'un!
@hyochan
Après avoir essayé beaucoup de choses, je suis toujours avec le même problème et plus encore. Au code ci-dessous, le RNIap.buySubscription (sku) renvoie undefined. S'il vous plaît, est-ce que quelqu'un l'a résolu?
''
static purchaseSubscriptionIOS = async (subscriptionID) => {
attendre KinvoBilling.getSubscriptions ();
try {
const purchaseResult = await RNIap.buySubscription(subscriptionID);
return createResponse(true, purchaseResult);
} catch (error) {
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
// dooboolab => check the call here.
console.tron.log('--- ERROR ----');
console.tron.log(error);
console.tron.log('--- PURCHASE ----');
console.tron.log(purchase);
const result = purchase;
subscription.remove();
console.tron.log(result);
if (result) {
return createResponse(true, result);
}
return createResponse(false, result);
});
}
};
''
: +1: Nous rencontrons ce problème était bien. Cela semble arriver à environ 10% de nos utilisateurs actuellement. Nous allons essayer d'ajouter cet auditeur, mais je ne pense pas que ce soit finalement une excellente solution. @hyochan Existe-t-il un moyen d'obtenir des informations plus détaillées dans les cas où cela se produit, ou s'agit-il d'une réponse standard des API StoreKit? Dans tous les cas d'erreur, le message semble être "Impossible de se connecter à l'iTunes Store", même lorsque l'achat est réussi.
Nous avons un problème très similaire avec 3.4.6: la première tentative d'achat échoue avec E_UNKOWN
, la nouvelle tentative réussit. Cependant, pour nous, cela se produit avec buyProduct
, pas avec buySubscription
. @hyochan pourrait-il toujours être la même cause fondamentale?
salut! Je rencontre le même problème après avoir appelé RNIap.requestSubscription () J'obtiens un résultat indéfini mais le paiement réussit, la carte de crédit est débitée.
Le seul moyen pour cet utilisateur de passer outre est de restaurer l'achat.
Quelqu'un a-t-il trouvé une solution à ce problème? J'utilise la version 3.5.9
Commentaire le plus utile
: +1: Nous rencontrons ce problème était bien. Cela semble arriver à environ 10% de nos utilisateurs actuellement. Nous allons essayer d'ajouter cet auditeur, mais je ne pense pas que ce soit finalement une excellente solution. @hyochan Existe-t-il un moyen d'obtenir des informations plus détaillées dans les cas où cela se produit, ou s'agit-il d'une réponse standard des API StoreKit? Dans tous les cas d'erreur, le message semble être "Impossible de se connecter à l'iTunes Store", même lorsque l'achat est réussi.