2010-04-28 16 views
15

i estoy poniendo en práctica en la compra de la aplicación Me estoy enviando la solicitud a través de Apple Storemétodo de respuesta productsRequest no está llamando

- (void) requestProductData 
{ 
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: 
     [NSSet setWithObjects: featureAId,featureBId,nil]]; // add any other product here 
request.delegate = self; 
[request start]; 
} 

el método de respuesta

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
[purchasableObjects addObjectsFromArray:response.products]; 
} 

no está recibiendo llamadas en absoluto. solo una vez que llamó de diez intentos lo intenté.

alguna idea con respecto a esto ..? gracias de antemano

Respuesta

41

Intente implementar también el método - (void)request:(SKRequest *)request didFailWithError:(NSError *)error - puede haber algunos errores en el procesamiento de sus solicitudes.

+0

gracias Vladmir ..... me sale un problema que se debe a un problema de conexión a Internet en mi dispositivo –

+0

probé ese método también debido a un problema severo sin devolver la llamada –

+0

+1 necesitaba ese encabezado de función. Cuando no haya conexión a Internet de esta manera se llamará ... –

0

Tuve un problema similar (error: No se puede conectar a iTunes Store). Después de actualizar iTunes Beta a la última versión, comenzó a funcionar nuevamente.

22

Me enfrenté al mismo problema, pero en mi caso la causa fue que estaba usando Cuenta de referencia automática y olvidé retener la solicitud.

Mi código era como:

- (void) requestProductData 
{ 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]]; 
    request.delegate = self; 
    [request start]; 
} 

Pero delegado de productsRequest: didReceiveResponse: nunca se llama.

Una solución sería:

@property (strong, nonatomic) SKProductsRequest *request; 

- (void) requestProductData 
{ 
    self.request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]]; 
    self.request.delegate = self; 
    [self.request start]; 
    // you can nil request property in request:didFailWithError: and requestDidFinish: 
} 
+0

Muchas gracias, resolvió mi problema. –

+2

Parece que Apple lo ha corregido ya que una vez que llamas 'start' a una solicitud, ahora parece retenerse y por lo tanto permanecerá vivo hasta que finalmente falle o tenga éxito (iOS 8 como mínimo; no lo ha probado con iOS 7 todavía). – Mecki

4

que tenían el mismo problema. Creé una clase de ayuda para manejar el IAP y verificar los productos. Lo que finalmente encontré fue que la instancia de la clase que creé estaba siendo lanzada antes de que volviera la respuesta, por lo que los métodos de delegado nunca se llamaron porque ya no existían.

he resuelto mi problema mediante la retención de la instancia de la clase de ayuda en la clase lo llamé el uso de @proprty (fuerte, no atómica) ...

Si no está utilizando una clase de ayuda y la codificación en una clase existente, entonces la respuesta anterior funcionará reteniendo su SKProductRequest.

Cuestiones relacionadas