此应用无法通过在中国活跃的CallKit功能获得批准。请进行相应更改,然后重新提交此应用以供审核

时间:2018-05-22 06:07:30

标签: ios iphone app-store ios11

最近,中国工业和信息化部(MIIT)要求在中国App Store上的所有应用程序中停用CallKit功能。在我们的审核过程中,我们发现您的应用目前包含CallKit功能,并已将中国列为iTunes Connect中的可用区域。

现在,问题是下一步,应用程序需要哪种更改

如果没有办法,我如何从Apple商店中删除中国。

如果有人遇到这类问题,请分享您的建议。

此致

2 个答案:

答案 0 :(得分:3)

我对这个问题的处理方式受到了Apple Developer forums上的回应的启发。目前,开发人员的普遍共识似乎是App Review没有给出具体建议,他们目前也没有解释或要求特定的技术解决方案。我认为,只要您可以向App Review解释如何为中国用户禁用CallKit,就可以接受。

我在下面讨论时更新了我的应用程序,它首先通过了App Store审查,并于2018年7月24日在中国重新发布。

  • 当我将更新后的应用程序提交到App Store时,我在审阅者信息部分添加了一条简短消息

      

    在此版本及更高版本中,我们不为中国用户使用CallKit功能。我们使用NSLocale检测用户所在的区域。

  • 我的应用在12小时后获得批准,没有来自应用审核小组的任何问题或评论。


检测中国用户

在我的应用中,我使用NSLocale来确定用户是否在中国。如果是这样,我不会在我的应用程序中初始化或使用CallKit功能。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLocale *userLocale = [NSLocale currentLocale];
    if ([userLocale.countryCode containsString: @"CN"] || [userLocale.countryCode containsString: @"CHN"]) {
        NSLog(@"currentLocale is China so we cannot use CallKit.");
        self.cannotUseCallKit = YES;
    } else {
        self.cannotUseCallKit = NO;
        // setup CallKit observer
        self.callObserver = [[CXCallObserver alloc] init];
        [self.callObserver setDelegate:self queue:nil];
    }
}

要对此进行测试,可以在“设置”>“常规”>“语言和区域”>“区域”中更改区域。当我将“地区”设置为“中国”但将语言设置为英语时,[NSLocale currentLocale]返回了"en_CN"

我正在使用CXCallObserver来观察从我的应用发起的呼叫状态。当我无法使用CallKit监视呼叫时,通常的解决方法是:

  • 在通话开始时保存NSDate
  • 具有到期处理程序的UIBackgroundTask的UIApplicationDidBecomeActiveNotification观察者(我的应用已启用了后台模式)
  • 当应用从后台返回时,请检查经过的时间,如果该时间小于5秒且小于90分钟,则假定通话已结束并保存(我需要跟踪通话时间)。
  • 如果调用了backgroundTaskExpirationHandler,则假定调用已结束并保存结束时间。
  • 我决定等待至少5秒钟,因为我注意到-applicationDidBecomeActive通常在通话开始时被叫一次或两次,通常在最初的1-3秒内。

答案 1 :(得分:0)

  1. 转到iTunes Connect中的“定价和可用性”。
  2. 可用性“(点击蓝色按钮修改)。
  3. 在“取消选择”按钮列表中取消选择中国。
  4. 点击“完成”。