Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone Store Kit returning invalid product ID errors

I am trying to test In App Purchases on my iPhone and running into a problem where the product IDs I request information for end up being returned to me as invalid product IDs in the "didRecieveResponse" method.

I have:

  • Created an in store product associated with this app. It's bundle ID matches everything else. It has been cleared for sale and approved by the developer.
  • Made sure my new provisioning profile has in store app purchases enabled and it has the full app name: "com.domain.appname"
  • Made sure this is the provisioning profile being used to sign the app to my iPhone.
  • Made sure that "com.domain.appname" is the app ID used to build the provisioning profile.
  • Made sure that "com.domain.appname" is used in my plist file as the bundle identifier.

Everything seems to be in place, however I still get my products returned to me as invalid IDs.

This is the code I am using:


- (void)requestProductData {
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   {
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   }

   for(int i = 0; i  < myProducts.count; ++i)
   {
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   }

   [request autorelease];
}

All my product IDs show up in the invalid printouts and none of them show up in the "Product Info:" printouts.

Any suggestions would be greatly appreciated...

P.S. Yes, this is built as Objective-c/c++.

like image 810
EToreo Avatar asked Dec 03 '22 14:12

EToreo


2 Answers

I tried everything suggested in the Apple forums and here, and still couldn't get it to work. Found the solution - your app needs to be transferred by Xcode for the sandbox to be enabled.

Obvious, right? Well, if you are working with an update to an existing account, the device will still treat it as an App Store-installed app.

Delete it, then transfer it again. It should work now :)

like image 154
Héctor Ramos Avatar answered Dec 16 '22 19:12

Héctor Ramos


Deleting the app on the testing iPhone and reinstalling it worked. Also I had also waited 8 hours since submitting the in-app purchase item.

like image 36
Henry Avatar answered Dec 16 '22 19:12

Henry