1

我们在一年前(2011 年 12 月 10 日)发布了我们的 iOS 游戏“民主”/“демократия”。自推出以来,到现在为止,我收到来自乌克兰和白俄罗斯的该应用程序用户的索赔,称他们无法在我们的应用程序中进行任何应用内购买。同时,来自俄罗斯、美国、英国、法国、哈萨克斯坦等国家的用户可以毫无问题地进行购买。在其他应用程序中,他们可以进行购买(例如 Candy Crush Saga)。我一遍又一遍地阅读有关 iAP 的 Apple 文档,但找不到所有 iAP 不适用于乌克兰和白俄罗斯的原因。我有白俄罗斯(白俄罗斯)帐户,也无法从我自己的游戏中购买 iAP))但是当我使用俄罗斯帐户做同样的事情时 - 它正在工作!

我所有的购买都返回为“无效的产品 ID”。

游戏链接(别担心,它是免费的) - https://itunes.apple.com/us/app/demokratia/id484436490?mt=8

我也可以用独立的代码重现这个问题。我在此页面http://www.raywenderlich.com/2797/introduction-to-in-app-purchases上找到了示例项目并下载了它,在设备上启动 - 我看到了同样的问题:我成功检索了美国的 IAP 列表,俄罗斯,但白俄罗斯、乌克兰的列表为空

重现的步骤我可以重现真实帐户的问题,也可以重现 iTunes 测试帐户的问题。我使用 iPad、iPhone 和 iOS 5.1、6.0 - 看起来使用什么设备并不重要。我正在使用 iOS 6 SDK,xCode 4.5.2

  1. 重现此问题所需要做的就是将设备(例如 iPad)上的 App Store 切换到白俄罗斯或乌克兰。您可以通过使用白俄罗斯或乌克兰帐户登录来完成。

  2. 下载“民主”(“Демократия”,com.neskinsoft.Democracy)

  3. 然后启动应用程序,单击“播放”,然后关闭帮助窗口(单击右上角的按钮) 3.1 单击带有购物车图标的按钮(您可以在 UI 的顶部找到它) 3.2 将显示商店对话框。单击右下角的按钮(带有猪和硬币的按钮) 3.3。将显示需要钱“Нужны Деньги”对话框。单击“60 000”、“$1.99”行中的按钮。此按钮调用 IAP。

在 3.3 之后 - 甚至询问用户密码的对话框也不会显示在乌克兰/白俄罗斯的 iTunes 帐户中。但是对于所有其他国家(例如俄罗斯、美国、英国等),它工作得很好!

我检查并调试了我的代码,调试了问题。

代码非常简单,我按照 Apple 文档中的所有说明进行操作。

我调用这个方法在我的代码中购买 60 000 Gold:

- (void)loadStoreAndBuy60000Gold
{
    // restarts any purchases if they were interrupted last time the app was open
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];

    // get the product description (defined in early sections)
    [self requestProductData: kInAppPurchase_60000GOLD]; // PLEASE NOTE kInAppPurchase_60000GOLD = "013", I didn't use reverse DNS and it's working
}

我问产品ID:

- (void)requestProductData: (NSString*) objectID
{
    NSSet *productIdentifiers = [NSSet setWithObject: productID]; // In this case productID = "013"
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    productsRequest.delegate = self;
    [productsRequest start];

在这种方法中我发现了问题:

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

    if ([self canMakePurchases]) // Returns TRUE
  {
        NSArray *products = response.products; // Here I receive product list, but for Ukraininan/Belarussian accounts it's EMPTY. So, no dialogs will appear since no product found. But for Russian/USA and so on accounts it returns me product!

      //.....
      // then I check invalidProductID
    for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog("Invalid product id: %@" , invalidProductId); // And I found my product "013" is in invalid product ids!

    }
  }

你能帮我解决这个问题吗?为什么我没有收到某些市场的产品列表?

4

0 回答 0