2010-01-26 13 views
38

Básicamente, intenté configurar las compras de aplicaciones en una aplicación de prueba antes de implementarlas en una aplicación adecuada en la que mi empresa esté trabajando. He leído el kit de almacenamiento pdf y otros fragmentos alrededor de 1000 veces, pero los productos todavía se devuelven como vacíos. Esto es exactamente lo que he hecho hasta ahora: aplicación de pruebaiPhone In App Purchase - response.products still empty?

Configurar y en artículos de la prueba de compra de la aplicación
He creado un nuevo ID de aplicación para 'Test App Uno' en el portal de desarrolladores de mi empresa en el centro de desarrollo de iPhone. Me aseguré de que el prefijo fuera com.mycompany.testappone para garantizar que las compras en la aplicación se pudieran configurar. Permaneciendo en la sección de ID de la aplicación, configuré en las compras de la aplicación marcando la opción 'Habilitar compra de la aplicación'.

Creé 'Test App One' en iTunes Connect y completé el procedimiento habitual, pero seleccioné 'upload binary later' y no lo sometí a revisión ya que la aplicación no hace nada. ¡Seguramente no tenemos que enviar la aplicación para revisarla para que funcione! Luego hice clic en administrar en las compras de la aplicación y creé una nueva con la identificación del producto 'test1' y la aprobé para que se autorizara la venta.

Código
He creado un nuevo proyecto en XCode llama TestAppOne y aquí son las únicas 2 clases que estoy usando por ahora:

TestAppOneAppDelegate.h:

#import <UIKit/UIKit.h> 
#import <StoreKit/StoreKit.h> 

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> { 
    UIWindow *window; 
} 

TestAppOneDelegate.m :

#import "TestAppOneAppDelegate.h" 

static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1"; 

@implementation TestAppOneAppDelegate 
@synthesize window; 

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
if([SKPaymentQueue canMakePayments]) { 
    NSLog(@"IN-APP:can make payments"); 
} 
else { 
    NSLog(@"IN-APP:can't make payments"); 
} 

[self requestProductData]; 
[window makeKeyAndVisible]; 
} 

- (void)requestProductData { 
NSLog(@"IN-APP:requestProductData"); 
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]]; 
request.delegate = self; 
[request start]; 
NSLog(@"IN-APP:requestProductData END"); 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
NSLog(@"IN-APP:productsRequest"); 
NSArray *myProduct = response.products; 
NSLog(@"IN-APP:array count: %i", [myProduct count]); 
[request autorelease]; 
NSLog(@"IN-APP:productsRequest END"); 
} 

- (void)dealloc { 
    [window release]; 
    [super dealloc]; 
} 

@end 

T en el dispositivo
Creé una cuenta de prueba de zona de pruebas y cerré sesión en mi cuenta de iTunes en el iPhone, pero no inicié sesión con la cuenta de prueba ya que la documentación nos dice que no hagamos esto hasta que se nos solicite la compra escenario. a continuación, voy a construir la aplicación y aquí está el registro de que estoy recibiendo:

IN-APP:can make payments 
IN-APP:requestProductData 
IN-APP:requestProductData END 
IN-APP:productsRequest 
IN-APP:array count: 0 
IN-APP:productsRequest END 

Puede alguien por favor dígame si he dejado ningún cabo etapas o si hay algo que estoy haciendo mal. Lamentablemente, no parece haber aplicaciones de ejemplo creadas por Apple.

Respuesta

22

En realidad creo que tienes que enviar el binario para que esto funcione.

Puede establecer la fecha de lanzamiento para un futuro lejano.

+4

Solo envíelo e inmediatamente deséchelo. No quiero establecer la fecha en el futuro y olvidarse de eso! –

+0

Ah, está bien. Bueno saber. No lo he intentado todavía –

+7

Gracias. Desafortunadamente, Apple olvidó incluir esta información muy importante en su documentación, pero lo descubrí después de leer este útil tutorial: http: //troybrant.net/blog/2010/01/in-app-purchases-a-full -walkthrough/ – user218485

28

Otro paso importante que a menudo se pasa por alto es que debe asegurarse de tener una configuración de Contrato de aplicaciones pagadas de iOS que se encuentra en la sección "Contratos, impuestos y operaciones bancarias" de iTunes Connect. Primero tiene que hacer clic en el botón de solicitud, luego debe hacer clic en los 3 botones de Configuración (Información de contacto, Información del banco, Información fiscal)

+1

Esto hizo trabajar a la mía. ¡Gracias! – zgosalvez

+2

¿Ya tengo que agregar una cuenta bancaria válida solo para probar la compra de InApp? –

+0

¿es obligatorio para las pruebas de sandbox? – Rajesh

4

Simplemente elimine la aplicación en su dispositivo y vuelva a iniciarla desde XCode. Me arregló el problema.

No es necesario cargar el archivo binario o esperar horas después de crear la compra en la aplicación en iTunes Connect.

1

No es necesario subir el binario para probar Sandbox de InAppPurchase. Solo tiene que agregar el elemento InAppPurchase en iTunesConnect y ponerlo en estado "Ready to submit" (debe) solo. Si lo envía para su revisión, siempre le dará a su respuesta el producto vacío.

18

Compruebe si existen identificadores de producto no válidos.

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 

for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Invalid product id: %@" , invalidProductId); 
    } 
} 

Si hay inválida visitar los identificadores de productos http://troybrant.net/blog/2010/01/invalid-product-ids/

Es una lista de control muy completo para este problema.

8

Compruebe si su identificador de paquete (por ejemplo, com.company.appname) en XCode coincide con el de iTunes Connect.

No tiene que enviar el archivo binario para que funcione.

+1

Cambié el nombre del proyecto y también cambié la identificación del paquete (comportamiento extraño de Xcode). Eso causó que todas las identificaciones de productos no sean válidas. Tu respuesta lo resolvió. Gracias. –

2

Gracias a la respuesta de alpere descubrí que había utilizado una identificación de producto incorrecta. Era no como pensé de.company.appname.PROFESSIONAL_LICENSE. Simplemente usando PROFESSIONAL_LICENSE en mi caso (sin las instrucciones principales del paquete) funciona :)

1

Intente agregar un producto de Suscripción gratuita. Si aparece en la respuesta, no hay nada incorrecto en su código. Como Free Subscription es el único tipo que no requiere Acuerdos, Impuestos y Banca, y si aparece y los otros no, entonces es un problema relacionado con su contrato.

+1

Esto realmente funcionó. Apareció el gratuito, pero los pagos no lo hicieron porque los Contratos no se firmaron. Buen consejo para probar – gmogames

0

En mi caso, el motivo fue el alojamiento de contenido por parte de Apple encendido por error. El producto estaba disponible solo cuando lo desactivé

Cuestiones relacionadas