Apple IPv6 $http Ionic отклоняет

Несколько дней назад мое приложение было отклонено по следующей причине:

Мы обнаружили одну или несколько ошибок в вашем приложении при проверке на iPad и iPhone под управлением iOS 9.3.5 при подключении Wi-Fi к сети IPv6.

В частности, мы обнаружили, что при входе в систему появляется сообщение об ошибке. Мы приложили снимок экрана для справки.

Следующие шаги

Запустите приложение на устройстве, подключенном к сети IPv6 (все приложения должны поддерживать IPv6), чтобы определить проблему (проблемы), затем проверьте и повторно отправьте приложение на рассмотрение.

Если мы неправильно поняли предполагаемое поведение вашего приложения, ответьте на это сообщение в Центре разрешения проблем, чтобы предоставить информацию о том, как должны работать эти функции.

Для новых приложений удалите все предыдущие версии вашего приложения с устройства, затем установите и следуйте инструкциям, чтобы воспроизвести проблему (проблемы). Для получения обновлений установите новую версию как обновление предыдущей версии, а затем следуйте инструкциям, чтобы воспроизвести проблему (проблемы).

Ресурсы

Информацию о поддержке сетей IPv6 см. в разделах Поддержка сетей IPv6 DNS64/NAT64 и О работе в сети.

Если у вас возникли трудности с воспроизведением обнаруженной проблемы, попробуйте протестировать рабочий процесс, описанный в Технических вопросах и ответах QA1764: Как воспроизвести ошибки, о которых сообщалось в материалах App Store.

Я установил две сети IPv6, одну из них в капсуле времени, а другую совместно с моим MacBook Pro. Из сети Time Capsule (которая является полностью сетью IPv6) приложение работает правильно. Из общей сети MacBook Pro я получаю два результата... Когда устройство подключается к этой сети IPv6 и настраивается только DNS, приложение работает, но когда оно получает DNS и один IP-адрес в формате 169.254.X.X, приложение аварийно завершает работу. подключение к серверу.

Проблема в том, что ответ на запрос $http идет со стороны ошибки, а не со стороны успеха. Я пробовал использовать Ionic $http и плагин cordova-http (https://github.com/Switch168/cordova-HTTP#110), и результат был таким же. Я не знаю, что происходит, потому что у меня есть проект Cordova (только Cordova, а не Ionic) с AngularJS, и он не дает сбоев. Тогда в чем разница между Ionic $http и AngularJS $http? Я не могу понять, в чем разница.

См. это изображение.

Пример запроса $http (с использованием плагина Ionic $http и cordova-http):

callWs: function(ws, method, data){
  var defferer = $q.defer();

  if (device.platform == 'Android' || device.platform == 'iOS'){

    $window.CordovaHttpPlugin.postJson(url_request,
      data_sent,
      {"cache-control": "no-cache, private, no-store, must-revalidate",
      "Authorization": basic_auth,
      "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
      },
    function(res) {
      defferer.resolve(res.data);
    }, function(error) {
      defferer.reject(error);
    });

  } else {

    $http({
        url: url_request,
        method: 'POST',
        withCredentials: true,
        timeout: HTTPTIMEOUT,
        headers: {
            'cache-control': 'no-cache, private, no-store, must-revalidate',
            'Authorization': basic_auth,
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
        },
        dataType : 'json',
        data: data_sent
    }).then(function (res) {
      defferer.resolve(res.data);
    }, function (error) {
      defferer.reject(error);
    });

  }

  return defferer.promise;

}

person zantos    schedule 06.09.2016    source источник


Ответы (1)


Учитывая, что прошло несколько месяцев с тех пор, как вы опубликовали это, я надеюсь, что вы уже решили эту проблему. Я отвечаю на это, если кто-то еще приземлится здесь, как я, когда искал решение.

Эта проблема в основном возникает из-за проблемы на вашем сервере. Важно, чтобы ваше приложение работало на ipv6, чтобы Apple одобрила ваше приложение. (см. первый комментарий) Есть удобный инструмент, который помог мне выяснить, так ли это.

Это http://ipv6-test.com/validate.php.

Если проблема в этом, решение будет следующим:

  1. Добавьте адрес IPv6 на свой веб-сервер.
  2. Добавьте запись AAAA для своего веб-сайта.
  3. Добавьте запись AAAA для своего «голого» домена.
  4. Убедитесь, что ваши DNS-серверы имеют адреса IPv6.
  5. При необходимости добавьте клей IPv6 для ваших серверов имен.
  6. Добавьте адреса IPv6 для ваших серверов входящей почты.
  7. Добавьте обратный DNS для IPv6-адреса ваших почтовых серверов.
  8. Проверьте свои записи SPF.

Если вы не знакомы ни с одним из приведенных выше шагов, проверьте эта ссылка.

person esafwan    schedule 04.01.2017
comment
Важно, чтобы ваш сервер был доступен через ipv6, чтобы Apple могла одобрить ваше приложение. Это просто неправда. Ваше приложение должно работать на IPv6, но сервер может быть только на IPv4. Тестовая сеть Apple использует NAT64, что облегчает это. Многие люди получили одобрение своих приложений, не имея сервера IPv6. Я бы рекомендовал всем перевести свои серверы на IPv6, но это не обязательное требование для одобрения вашей заявки. - person Ron Maupin; 04.01.2017
comment
Обновлен ответ на основе комментария. - person esafwan; 08.01.2017
comment
Редактирование на самом деле не исправляет ответ. Это по-прежнему все о том, чтобы сделать ваш сервер доступным по IPv6, и ничего о том, чтобы заставить ваше приложение работать на IPv6. - person Michael Hampton; 09.01.2017
comment
@RonMaupin при использовании $http с Angular в сети IPv6 ищет адреса IPv6. В сети IPv4 по умолчанию используется IPv4. Если ваш DNS и сервер не настроены на прием запросов IPv6, $http на angular может сломаться. - person SpoiledTechie.com; 09.03.2017