2012-07-26 30 views
5

Estoy actualizando mi aplicación iOS con el código VerificationController de transacción sugerido por Apple para verificar compras en la aplicación debido al reciente "hack" publicado que permitió a las personas comprar compras in-ap sin pagar debido falsificar recibos de servidores Apple falsificados.aplicación está solicitando AppleID cuando se ejecuta

Tengo todo integrado, y ahora estoy probando. He ejecutado la aplicación varias veces y las cosas de verificación se han ejecutado varias veces.

Quiero probar todo sobre las compras, incluyendo el inicio de una nueva aplicación y AppleID. Así que borré completamente la aplicación de mi dispositivo de prueba. Creé un nuevo AppleID "usuario de prueba" en iTunes Connect. Fui a la aplicación de configuración en mi dispositivo de prueba, fui a la tienda y cambié el AppleID predeterminado para el dispositivo a este AppleID recién creado.

He vuelto a ejecutar la aplicación de Xcode con el depurador, que vuelve a instalar la aplicación en el dispositivo de prueba y la ejecuta de forma nueva.

El problema es que, casi inmediatamente después del lanzamiento, el dispositivo de prueba muestra la contraseña de AppleID Alert-type y solicita la contraseña del antiguo AppleID que utilicé originalmente para probar todo, incluida la compra original en la aplicación y el verificación para ello. No solicita la contraseña del nuevo dispositivo AppleID como se establece en la aplicación de configuración en la tienda.

Cuando corro como una nueva aplicación, el código de verificación no se ejecuta y no hay código de cualquiera de mis rutinas que hacer nada con las cosas de Apple StoreKit está dirigido a excepción de un solitario

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

(observador es mi objeto delegado para el material de StoreKit y se crea pero no se ejecutan rutinas excepto init e init no hace nada excepto establecer una variable estática para crear una clase de tipo singleton)

Para fines de comprobación, también agregué en

NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]); 

que no muestra ninguna transacción antigua.

No tengo ni idea de por qué ha comenzado a solicitar mi AppleID del usuario de prueba original cuando la aplicación se acaba de instalar, el AppleID para la tienda del dispositivo es diferente y no puedo identificar ningún código que se ejecute accede al StoreKit (excepto como se menciona arriba).

CUALQUIER información apreciada sería apreciada.

ETA: Tocar CANCELAR en el cuadro de diálogo de contraseña no causa ningún código adicional para ejecutarse en la aplicación y no impide que la aplicación se ejecute.

Si, a continuación, voy a la pantalla de compra en la aplicación (donde la aplicación consulta la tienda para ver las compras disponibles en la aplicación), vuelve a solicitar la contraseña de la misma manera que en el VIEJO AppleID. Puedo cancelar y nada parece suceder. Si toco el botón "restaurar compras" en mi aplicación, entonces solicita la contraseña en el nuevo AppleID tal como se configuró en la configuración de la Tienda. No he pasado de este punto porque quiero entender lo que está pasando y no quiero estropear las cosas completando/intentando la restauración o compra bajo el nuevo AppleID.

Gracias

+0

¿Lo ha resuelto de alguna manera? –

+0

@bluesm Nunca resolví el problema y ya no uso realmente el dispositivo con el que estaba teniendo problemas. Lo siento. Eventualmente, puedo tratar de volver, ya que todavía tengo ese dispositivo en un cajón ... – chadbag

Respuesta

2

StoreKit.framework sistema de toda la obra, por lo que el ID de Apple que consigue que se muestra no tiene nada que ver con su aplicación, y volver a instalar la aplicación no tiene ninguna influencia.

Sin embargo, puede log out from the iTunes Store/App Store:

  1. Tap Ajustes → iTunes & tiendas de aplicaciones
  2. toque en el Apple ID registrado (botón en la parte superior)
  3. Tap "Salir"

Cuando vuelva a utilizar su aplicación, StoreKit debe solicitar tanto el correo electrónico como la contraseña.

+0

No sé si vio los comentarios que el AppleID no está relacionado con el almacenado en la configuración ("el AppleID para el tienda para el dispositivo es diferente ") – chadbag

+0

Es casi como si iOS hubiera almacenado información en alguna parte diciendo" esta aplicación está solicitando información de compra previa "y no puede evitar pedirla en cargas posteriores. Solo eliminé la aplicación y la eliminé por mí. – rob5408

+0

@chadbag Ah, lo siento, no te entendí correctamente allí. No estoy seguro de lo que está pasando entonces. :( –

-1
Steps to Fix: 
1. Starting at the App Store, pull up the multi-task bar and tap the Settings app. 
2. Scroll down and tap 'General'. 
3. Scroll down and tap 'Date & Time'. 
4. If the 'Set Automatically' switch is ON, turn it OFF. 
5. Tap 'Set Date & Time'. 
6. Tap the field that says "[day of the week], [month][day], 2013". 
7. Adjust the year wheel to say "2012" and back out of the Date & Time section. 
8. Multi-task back to the App Store and attempt to download the app again. 
9. Tap 'Cancel' on the "Cannot connect…" modal. 
10. Return to the native Settings > General > Date & Time > Set Date & Time. 
11. Go back to the month, date, year wheels and change the year to "2030". 
12. Back out to the home screen and launch the App Store. 
13. A "Cannot connect to the Store" modal should appear right away. 
14. Tap 'OK' and then multi-task back to Settings. 
15. Return all the way back to the month, date, year wheels again and change the year back to "2013. 
16. Multi-task back to the App Store and attempt to download the app again. 
6

Tuve exactamente el mismo problema y luché durante horas para resolverlo.

Como se mencionó anteriormente, StoreKit obras de todo el sistema y el sistema continúa solicitando entrada para cualquier transacción para la cual

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

no ha sido llamado. Yo estaba usando RMStore, miraba el código fuente que encontré esta sospechosos líneas:

if (error.code != RMStoreErrorCodeUnableToCompleteVerification) { 
    // If we were unable to complete the verification we want StoreKit to keep reminding us of the transaction 
    [queue finishTransaction:transaction]; 
} 

Esto es probablemente lo que sucedió:

  • compré por primera vez el producto con mi prueba de ID de Apple
  • He eliminado el producto para propósitos de prueba
  • Traté de comprarlo de nuevo. En este punto, ingresé una credencial incorrecta y RMStore no llamó al [[SKPaymentQueue defaultQueue] finishTransaction:.
  • La aplicación comenzó a solicitar el inicio de sesión en cada inicio.

Intenté iniciar sesión con una cuenta de prueba diferente pero igual la alerta solicitando el inicio de sesión con la antigua ID de Apple. También borré la identificación de Apple en iTunes Connect, pero esto no ayudó.

Finalmente logré resolver Restaurando (no Comprando) el producto con la misma cuenta. No sé si hay otra forma de resolver este problema (es decir, restablecer la cola de StoreKit). De todos modos, recuerda llamar al finishTransaction en tu código.

Cuestiones relacionadas