React-native-iap: buySubscription ignorant les commentaires des utilisateurs

Créé le 6 oct. 2018  ·  32Commentaires  ·  Source: dooboolab/react-native-iap

Version de react-native-iap

2.3.0

Les plates-formes sur lesquelles vous avez rencontré l'erreur (IOS ou Android ou les deux ?)

Android

Comportement attendu

let sub = wait RNIApp.buySubscription("some");

devrait attendre que l'utilisateur appuie sur acheter sur le mode de paiement dans l'application

Comportement réel

je ne peux pas vérifier si l'utilisateur a accepté l'abonnement, car en faisant :

let sub = wait RNIApp.buySubscription("some");
si(sous){
faire des choses..
}

le bloc if(sub) s'exécute immédiatement après l'ouverture de la fenêtre contextuelle, mais l'utilisateur n'accepte toujours pas l'abonnement

Environnement testé (émulateur ? appareil réel ?)

Appareil réel

Des idées?

Il existe d'autres méthodes telles que getAvailablePurchases qui renvoient également une promesse et fonctionnent correctement.

Le problème est que buySubscription doit renvoyer le rappel de l'entrée utilisateur et ce n'est pas

⌚️ regression 📱 iOS

Commentaire le plus utile

Nous y travaillons actuellement. De plus, tous ceux qui sont confrontés à cela, avez-vous appelé getSubscriptions avant d'appeler buySubscription ?

Tous les 32 commentaires

J'utilise RN 57, aussi, l'abonnement est terminé, je peux vérifier sur le Playstore que l'achat est ok mais la promesse d'achat d'abonnement revient indéfinie

de l'aide?

Eh bien, je suis passé à la 2.2.2 et ça marche... donc je pense que vous avez raté quelque chose dans votre nouvelle version

@ marcosmartinez7 Désolé pour le bris pourriez-vous essayer 2.3.1 ?

Salut merci!

Je n'ai pas le temps maintenant mais je le ferai

@ marcosmartinez7 Merci de revenir.

@dooboolab Issue est également présent sur iOS. J'ai essayé à la fois 2.3.1 ainsi que 2.3.2 . Comme mentionné par @ marcosmartinez7 2.2.2 fonctionne bien

Je pense que c'est corrigé dans 2.3.3 . Veuillez rouvrir lorsque cela se produit encore.

@dooboolab Je suis désolé, je viens d'installer et de relier 2.3.5 . await RNIap.buySubscription(iapProductId) renvoie toujours immédiatement undefined sur iOS

@Gaia-Nutrition Je pense que votre problème est différent car le code ios n'a pas changé. Pourriez-vous essayer de dissocier et de lier à nouveau ?

@dooboolab J'ai essayé de lier et de dissocier. Chaque fois que je reviens à 2.2.2 il recommence à fonctionner. Mais je revérifierai demain. Peut-être que je vais essayer d'installer manuellement le composant natif

@dooboolab Ok, j'ai maintenant lié manuellement la nouvelle version 2.3.6 . Toujours en train undefined recevoir

Quelqu'un peut-il confirmer cela? Cela ne devrait pas arriver surtout dans ios.

@dooboolab Je peux confirmer que sur iOS, la version 2.3.6 n'exécute pas les promesses mais la version 2.2.2 le fait (en utilisant un appareil iPhone 5, React Native 0.56)

Je rencontre également ce problème sur 2.3.7. Lorsque j'essaie d'utiliser await la ligne suivante est appelée tout de suite au lieu d'attendre la promesse, et lorsque j'utilise RNIap.buySubscription(subId).then(purchase => {}) elle plante avec une erreur, impossible de lire la propriété alors de non définie

Nous y travaillons actuellement. De plus, tous ceux qui sont confrontés à cela, avez-vous appelé getSubscriptions avant d'appeler buySubscription ?

Je viens de tester l'achat dans l'application RNExample. J'ai acheté un abonnement avec la méthode buyProductWithoutFinishTransaction().
Je suggère de tester tout comme RNExample. Et mettez à jour Xcode, le paramètre de construction sur « legacy » .. Je suppose que le processus de construction dans Xcode a changé cette mise à jour.
Et utilisez un nouveau testeur de bac à sable.

@JJMoon très intéressant. La combinaison de buyProductWithoutFinishTransaction() et finishTransaction() fonctionne sur 2.3.7 alors que buySubscription() directement échoue toujours !

@Gaia-Nutrition OK. Ensuite, utilisez buyProductWithoutFinishTransaction et finishTransaction au lieu de buySubscription . L'action d'achat est exactement la même.

@Gaia-Nutrition Pouvez-vous essayer 2.3.8 ? Aussi, avez-vous appelé getSubscriptions avant buySubscription ?

@dooboolab 2.3.8 échoue toujours en utilisant buySubscription et encore : Oui, j'ai appelé getSubscriptions auparavant. Je ne pense pas que buyProductWithoutFinishTransaction() fonctionnerait autrement.

J'ai testé buySubscription sur un appareil iOS en mode sandbox.
Il a réussi, mais il affiche un message d'erreur.
Et l'abonnement renouvelable automatiquement ne délivre pas de reçu.
Je suggère d'utiliser buyProductWithoutFinishTransaction et finishTransaction au lieu de buySubscription.
Actuellement, je n'ai pas d'appareil à tester, je suivrai ce problème plus tard.

On dirait que ce problème n'est actuellement que dans iOS . Ai-je raison?

@dooboolab Non, se produit également sur Android. La fonction renvoie undefined avant même que la première ligne de buyItemByType ne soit appelée.

@dooboolab Le problème est causé par index.js:105. Vous devriez changer les lignes en quelque chose comme

export const buySubscription = (sku, oldSku, prorationMode) => Platform.select({ ios: () => RNIapIos.buyProduct(sku), android: () => RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, -1), })();
(Je sais que cela ignore prorationMode)

Cependant, après s'être abonné avec succès, il y a un problème :

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.dooboolab.RNIap.RNIapModule$11.onPurchasesUpdated(RNIapModule.java:427) at com.android.billingclient.api.BillingClientImpl$1.onReceive(BillingClientImpl.java:136) at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303) at com.android.billingclient.api.LocalBroadcastManager.access$000(LocalBroadcastManager.java:44) at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:114) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

@mfentross À quelle version de react-native-iap êtes-vous ? Il y a une ligne vide dans RNIapModule.java:427 . Veuillez réessayer pour le récent.

Ma faute : j'ai édité quelques lignes. Mais la solution au problème principal consiste à modifier la fonction buySubscription pour

`
export const buySubscription = (sku, oldSku, prorationMode) =>
Platform.select({
ios : () => RNIapIos.buyProduct(sku),
androïde : () => {
if (!prorationMode) prorationMode = -1;
return RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, prorationMode);
},
})();

`

Il y avait des crochets inutiles.

@mfentross mon mauvais. J'ai raté la déclaration return . Je viens de publier sur 2.3.11 . Alors maintenant, l'androïde fonctionne?

@dooboolab Merci, ça marche maintenant 👍

@mfentross @JJMoon D'accord ! Il ne nous reste donc que le problème iOS.

@JJMoon Il dit que si la méthode wrap avec async et await , cela fonctionne. Cependant, je ne sais pas trop comment cela pourrait être possible. Envelopper avec async et await est redondant dans la valeur de retour, n'est-ce pas ?

J'ai publié sur 2.3.13 . J'espère que vous essayerez tous ça.

Veuillez rouvrir lorsque cela se produit encore. Merci pour toutes les aides.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

bakedbean picture bakedbean  ·  5Commentaires

HamzaIkram2727 picture HamzaIkram2727  ·  3Commentaires

jvandenaardweg picture jvandenaardweg  ·  4Commentaires

coldfins picture coldfins  ·  3Commentaires

ramondelmondo picture ramondelmondo  ·  4Commentaires