Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

This app cannot be approved with CallKit functionality active in China. Please make the appropriate changes and resubmit this app for review

Recently, the Chinese Ministry of Industry and Information Technology (MIIT) requested that CallKit functionality be deactivated in all apps available on the China App Store. During our review, we found that your app currently includes CallKit functionality and has China listed as an available territory in iTunes Connect.

Now, Question is what next, Which kind of changes require in app

If there isn't any way, How can i remove china from Apple store.

Please share your suggestion if anyone faced this kind of problem.

Regards,

like image 672
Sonu Avatar asked May 22 '18 06:05

Sonu


2 Answers

My approach to this issue was inspired by this response on the Apple Developer forums. The general developer consensus right now seems to be that App Review is not giving specific recommendations nor are they currently explaining or requiring a specific technical solution. I think that as long as you can explain to App Review how you’re disabling CallKit for users in China, that would be acceptable.

I updated my app as I discuss below and it passed App Store review first try and we re-released in China on July 24, 2018.

  • When I submitted my updated app to the App Store, I included a short message in the reviewer info section saying

"In this version and onwards, we do not use CallKit features for users in China. We detect the user's region using NSLocale."

  • My app was approved 12hr later without any questions or comments from the App Review team.

Detecting users in China

In my app, I use NSLocale to determine if the user is in China. If so, I do not initialize or use CallKit features in my app.

- (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];
    }
}

To test this, you can change the region in Settings > General > Language and Region > Region. When I set Region to 'China' but left language set as English, [NSLocale currentLocale] returned "en_CN".

I was using CXCallObserver to observe the state of a call initiated from my app. My general workaround when I could not use CallKit to monitor the call was:

  • save the NSDate when the call begins
  • observer for UIApplicationDidBecomeActiveNotification with a UIBackgroundTask with expiration handler (my app already has background modes enabled)
  • when the app returns from the background, check the elapsed time and if it is was than 5s and less than 90 minutes, assume the call ended and save it (I needed to track call duration).
  • If the backgroundTaskExpirationHandler is called, assume the call ended and save the end time.
  • I decided to wait til at least 5s had elapsed because I noticed that -applicationDidBecomeActive was often called once or twice as the call began, usually within the first 1-3 seconds.
like image 65
Natalia Avatar answered Sep 24 '22 03:09

Natalia


  1. Go to “Pricing and Availability” in iTunes Connect.
  2. Availability” (Click blue button Edit).
  3. Deselect China in the list “Deselect” button.
  4. Click “Done”.
like image 30
Darshan Sonigara Avatar answered Sep 22 '22 03:09

Darshan Sonigara