iPhone Store Kit返回无效的产品ID错误

ETo*_*reo 4 iphone storekit in-app-purchase

我正在尝试在我的iPhone上测试In App Purchases并遇到一个问题,我在那里请求信息,最终作为"didRecieveResponse"方法中的无效产品ID返回给我.

我有:

  • 创建了与此应用相关联的商店内商品.它的捆绑ID与其他所有内容相匹配.它已被清除出售并得到开发商的批准.
  • 确保我的新配置文件已启用商店应用程序购买,并且它具有完整的应用程序名称:"com.domain.appname"
  • 确保这是用于将应用程序签名到我的iPhone的配置文件.
  • 确保"com.domain.appname"是用于构建配置文件的应用程序ID.
  • 确保在我的plist文件中使用"com.domain.appname"作为包标识符.

一切似乎都已到位,但我仍然将我的产品作为无效ID返回给我.

这是我正在使用的代码:


- (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];
}

Run Code Online (Sandbox Code Playgroud)

我的所有产品ID都显示在无效的打印输出中,并且没有一个显示在"产品信息:"打印输出中.

任何建议将不胜感激...

PS是的,这是作为Objective-c/c ++构建的.

Héc*_*mos 6

我尝试了在Apple论坛和这里建议的所有内容,但仍无法使其工作.找到解决方案 - 您的应用程序需要通过Xcode传输才能启用沙箱.

很明显,对吧?好吧,如果您正在使用现有帐户的更新,设备仍会将其视为App Store安装的应用程序.

删除它,然后再次传输.它现在应该工作:)