React-native-iap: iOS: esta compra desde la aplicación ya se ha comprado.

Creado en 12 sept. 2018  ·  16Comentarios  ·  Fuente: dooboolab/react-native-iap

Versión de react-native-iap

"react-native-iap": "^2.0.3",

Plataformas a las que se enfrentó el error (¿IOS o Android o ambos?)

iOS

Comportamiento esperado

Hace una compra

compra constante = espera RNIap.buyProductWithoutFinishTransaction (productId)
const {transactionReceipt, purchaseToken} = compra
sendToServer (transactionReceipt, {
onSuccess: () => {
RNIap.finishTransaction ()
RNIap.consumeAllItems ()
}})

Comportamiento real

Cuadro de diálogo: "Esta compra desde la aplicación ya se ha comprado". Esto solo sucede para un SKU, otros funcionan bien. Creo que la aplicación se puso en mal estado y no veo la forma de solucionarlo. Me cansé de llamar a finishTransaction y consumeAllItems en la inicialización, pero eso no lo solucionó. Otros SKU que puedo comprar varias veces sin problema. No se devuelve nada por getPurchaseHistory .

Entorno probado (¿Emulador? ¿Dispositivo real?)

Dispositivo (caja de arena)

Pasos para reproducir el comportamiento

No estoy seguro.

📱 iOS 🙏 help wanted

Comentario más útil

Estaba llamando a este código nativo.

Cuando lo llamé en didFinishLaunchingWithOptions currentQueue.transactions estaba vacío, pero llamarlo en applicationDidBecomeActive funcionó.

Esto funcionó:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

No estoy seguro de cómo, pero tal vez podamos exponer esta funcionalidad en la biblioteca.

Todos 16 comentarios

@siderakis Sí, extraño. Ya he solucionado este problema como se dijo en stackoverflow, pero todavía ocurre en algunos dispositivos. Yo también estoy dispuesto a arreglar esto. Qué dispositivo estás usando?

@siderakis Supongo que esto podría resolver tu aplicación en mal estado. ¿Podrías intentarlo?

Lo probé y no funcionó. También reinstalé la aplicación y eso no ayudó. Se ejecuta en un iPad.

Establecí un punto de interrupción y parece que currentQueue.transactions está vacío

De SKPaymentQueue.h

// Array of unfinished SKPaymentTransactions.  Only valid while the queue has observers.  Updated asynchronously.
@property(nonatomic, readonly) NSArray<SKPaymentTransaction *> *transactions NS_AVAILABLE_IOS(3_0);

<strong i="6">@end</strong>

Tal vez lo llamé demasiado pronto

Llamé al código más tarde en la ejecución del programa y solucionó el problema.

@siderakis Perdón por molestarme. Pero, ¿a qué código llamaste?
La matriz transactions es una propiedad, no un método, que no está en nuestro código.
¿Quiso decir finishTransaction ?

Estaba llamando a este código nativo.

Cuando lo llamé en didFinishLaunchingWithOptions currentQueue.transactions estaba vacío, pero llamarlo en applicationDidBecomeActive funcionó.

Esto funcionó:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

No estoy seguro de cómo, pero tal vez podamos exponer esta funcionalidad en la biblioteca.

@siderakis Sí. Eso es lo que quise decir en el número 259.
Creo que la acción puede estar en cualquier lugar después de applicationDidBecomeActive.
Entonces, expondré ese método al lado de JS, ese usuario puede llamarlo en cualquier momento.
Gracias por tu consejo.

@JJMoon , tengo el mismo problema, ¿cuándo podemos esperar una resolución para exponer un método como mencionaste anteriormente? Gracias.

@sivrihuseyin El problema es bien conocido ahora. Haremos el parche este fin de semana. Gracias a todos los emisores.

Lanzamos la solución esperada en 2.2.0 . ¿Podrías seguir el archivo Léame y probar esta línea de códigos?

Hola Hyo Chan,

Gracias por la información.

Instalé la versión 2.2.0 y probé el código. Desafortunadamente, el
el problema aún no se ha solucionado. creo que la función, * clearTransaction * no tiene
ha sido exportado. En el entorno reactNative no hay una transacción clara
función dentro de RNIap.

Revisé el archivo index.d.ts y no pude ver la función como
clearTransaction en esto. expediente.

Saludos cordiales,

Huseyin

El domingo, 16 de septiembre de 2018 a las 2:25 p.m. Hyo Chan Jang [email protected]
escribió:

Cerrado # 257 https://github.com/dooboolab/react-native-iap/issues/257
a través de a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

Hola Hyo Chan,

Lamento la información incorrecta. ESTÁ ARREGLADO. No hay ningún problema
nunca más.

Gracias por su pronta respuesta y excelente solución.

Saludos cordiales,

Huseyin

El domingo, 16 de septiembre de 2018 a las 2:56 p.m. Huseyin Sivri [email protected]
escribió:

Hola Hyo Chan,

Gracias por la información.

Instalé la versión 2.2.0 y probé el código. Desafortunadamente, el
el problema aún no se ha solucionado. creo que la función, * clearTransaction * tiene
no ha sido exportado. En el entorno reactNative no hay una transacción clara
función dentro de RNIap.

Revisé el archivo index.d.ts y no pude ver la función como
clearTransaction en esto. expediente.

Saludos cordiales,

Huseyin

El domingo, 16 de septiembre de 2018 a las 2:25 p.m. Hyo Chan Jang [email protected]
escribió:

Cerrado # 257 https://github.com/dooboolab/react-native-iap/issues/257
a través de a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078
.

-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0
.

Se corrige con la versión 2.2.0 aplicando la función clearTransaction. Gracias
@JJMoon

Para futuros empleados de Google que actualicen de v2 a v3-5, esto me resultó útil

https://github.com/dooboolab/react-native-iap/blob/de0fc084966fc4d36a9c45f4e27cb166243d4319/README_DEPRECATED.md

¿Fue útil esta página
0 / 5 - 0 calificaciones