最近在海外苹果商店发布新游戏,经历了一个操蛋的两天:
产品在提交testflight沙盒环境下是可以获取到苹果商品列表,并且测试支付可以拉起并到账,等到我通过TF转发布到正式环境后,游戏点击游戏内商店获取商品列表就为空,更别提拉起支付了。
最开始先检查了苹果开发者后台的商品,看有没有在Appstore里配置,Bundle ID是否和后台的一致,通过常规的办法都试过了,各项检查都没问题。
查看客户端代码,这里拿到的苹果商店的商品列表信息为空,最初猜测是客户端配置的问题,经过排查也否定了这个猜测。
#pragma mark //SKProductsRequestDelegate
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSLog(@"Recived product results");
if(response.products != nil && response.products.count > 0){
NSDictionary *prizeNameMap = [[NSMutableDictionary alloc] init];
for(SKProduct *product in response.products){
[self.productMap setValue:product forKey:product.productIdentifier];
NSString *localPrize =[IapCharge localizePrize: product];
if(localPrize) {
[prizeNameMap setValue:localPrize forKey:product.productIdentifier];
}
}
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
self.charge->onEvent(REQUEST_PRODUCTS_EVENT, [[IapCharge dicToJsonString:prizeNameMap] UTF8String]);
[prizeNameMap release];
}];
}
else{
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
self.charge->onEvent(REQUEST_PRODUCTS_EVENT, STATUS_FAILED);
}];
}
// self.productRequest = nullptr;
//ss ChargeManager::getInstance()->onChargeEvent(self.charge, REQUEST_PRODUCTS_EVENT, SUCCESS);
}
后来怀疑是苹果从沙盒环境到正式环境可能会同步苹果商品信息,存在一定的延迟,就一致耐心等待,据说是1-2天,第一天等完了,大概到第二天下午三四点的样子才同步完。
所以如果上线后发现线上包请求不到商品信息,一般发生于首次提交APP或添加新商品,可能是苹果缓存的BUG,当你的APP通过审核以后,你发现在生产环境下获取不到商品,这是因为App虽然过审核了,但是内购商品还没有正式添加到苹果的服务器里,耐心等待一段时间就可以啦,或者去苹果后台刷新配置商品信息列表,然后等待1-2天左右时间大概就可以了.
另外,如果你苹果商店配置了很多商品,这些商品可能不是同时生效的,总之大约等1-2天。
另外一种解决办法:
之前有读者反馈他已经等了3填了,苹果也没给出答复:
这里我给他的建议是先从苹果后台下架所有商品信息,然后重新提交审核,这样会触发苹果同步商品信息策略,到下午,他的商品信息就可以在游戏里拉起支付了。
那么如何应对此类问题? 一般是在首次提交APP的时候,先别着急开服,先发布,在服务器端给玩家公告,大概什么时候可以对外开放,同时给测试环境加白名单,等商品信息可以拉起来了,再选择开服开放。