Я согласен с txulu, что кажется, что CallKit просто необходимо отключить / не использовать для пользователей в Китае - см. Этот полезный ответ на форумах разработчиков Apple .
По общему мнению, до тех пор, пока вы можете объяснить App Review, как отключаете функции CallKit для пользователей в Китае, это, вероятно, будет приемлемо, если / пока Apple не опубликует конкретные рекомендации.
Для вашей конкретной проблемы Ахмет, похоже, что CallKit может обеспечить некоторые основные функции вашего приложения. Если это так, и вам действительно нужно поддерживать пользователей в Китае, вы можете подумать о перестройке своего приложения с использованием другой платформы VOIP для совершения звонков (VOIP по-прежнему разрешен в Китае ... только без использования CallKit). Или, возможно, вы можете отключить и скрыть функции вызова в своем приложении, если пользователь находится в Китае.
Мое приложение использовало CallKit только для наблюдения, когда заканчивается вызов, инициированный моим приложением, поэтому я смог придумать обходной путь. Что касается пользователей в Китае, я теперь наблюдаю за UIApplicationDidBecomeActiveNotification
и делаю мои лучшие предположения о том, закончился ли телефонный звонок, инициированный из приложения, исходя из того, сколько времени прошло с момента начала вызова. Это не так хорошо, как использование CallKit CXCallObserver
, но, похоже, он достаточно хорош для моей цели.
Обновление! Мое приложение прошло проверку в App Store с описанным исправлением.
- Представил новую версию вчера.
- Включено короткое сообщение в разделе информации о рецензенте: «В этой версии и далее мы не используем функции CallKit для пользователей в Китае. Мы определяем регион пользователя с помощью NSLocale».
- Приложение было одобрено около 12 часов спустя без каких-либо вопросов или комментариев от команды проверки приложения.
Обнаружение пользователей в Китае
Чтобы определить, находится ли пользователь в Китае, я использую NSLocale, чтобы получить для пользователей currentLocale и countryCode. Если countryCode содержит один из кодов ISO для Китая (CN, CHN), я устанавливаю флаг, чтобы отметить, что я не могу использовать CallKit и не инициализировать или использовать функции 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"
.