我们在一年前(2011年12月10日)发布了我们的iOS游戏“民主”/“демократия”。自推出以来,到目前为止,我收到来自乌克兰和白俄罗斯的此应用程序用户的索赔,他们无法在我们的应用程序中进行任何In App Purchase。与此同时,来自俄罗斯,美国,英国,法国,哈萨克斯坦等国家的用户可以毫无问题地购物。 在其他应用程序中,他们可以购买(例如Candy Crush Saga)。 我一遍又一遍地阅读有关iAP的Apple文档,并且无法找到为什么所有的iaps都不适合乌克兰和白俄罗斯的原因。我有白俄罗斯(白俄罗斯)帐户,也不能从我自己的游戏中购买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
我需要重现此问题的所有方法是将设备(例如iPad)上的App Store切换到白俄罗斯或乌克兰。您可以使用白俄罗斯或乌克兰帐户登录。
下载“民主”(“Демократия”,com.neskinsoft.Democracy)
然后启动应用程序,单击“播放”,然后关闭帮助窗口(单击右上角的按钮) 3.1单击带有购物车图标的按钮(您可以在UI的顶部找到它) 3.2将显示商店对话框。点击右下方的按钮(带猪和硬币的按钮) 3.3。需要钱“НужныДеньги”对话框将会显示。单击“60 000”,“$ 1.99”行中的按钮。此按钮调用IAP。
3.3之后 - 即使是询问用户密码的对话也不会显示在乌克兰/白俄罗斯的iTunes帐户中。但是对于所有其他国家(例如俄罗斯,美国,英国等),它运作正常!
我检查并调试了我的代码,调试了问题。
代码非常简单,我遵循了Apple文档中的所有说明。
这种方法我打电话在我的代码中购买6万金币:
- (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!
}
}
你能帮我解决这个问题吗?为什么我没有收到某些市场产品清单?