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

Son*_*onu 5 iphone app-store ios ios11

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

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

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

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

问候,

Nat*_*lia 5

我对这个问题的处理方法是受Apple Developer论坛上的回应启发的。目前,开发人员的普遍共识似乎是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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我过去一直CXCallObserver在观察从我的应用发起的通话状态。我无法使用CallKit监视呼叫时的一般解决方法是:

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


小智 3

    \n
  1. 转到 iTunes Connect 中的 \xe2\x80\x9c定价和可用性\xe2\x80\x9d。
  2. \n
  3. 可用性\xe2\x80\x9d (单击蓝色按钮“编辑”)。
  4. \n
  5. 在列表中取消选择中国\xe2\x80\x9c取消选择\xe2\x80\x9d按钮。
  6. \n
  7. 单击 \xe2\x80\x9c完成\xe2\x80\x9d。
  8. \n
\n