解决苹果发布正式环境后支付拉不起来或获取商品列表为空问题

最近在海外苹果商店发布新游戏,经历了一个操蛋的两天:

       产品在提交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的时候,先别着急开服,先发布,在服务器端给玩家公告,大概什么时候可以对外开放,同时给测试环境加白名单,等商品信息可以拉起来了,再选择开服开放。

你可能感兴趣的:(解决苹果发布正式环境后支付拉不起来或获取商品列表为空问题)