Apple IPv6 $ http Ionic拒绝

时间:2016-09-06 07:51:39

标签: ios cordova ionic-framework ipv6 appstore-approval

由于以下原因,我几天前收到了我的应用被拒绝:

  

我们在iPad上查看了您应用中的一个或多个错误   在连接到IPv6网络的Wi-Fi上运行iOS 9.3.5的iPhone。

     

具体来说,我们发现登录时会产生错误消息。   我们附上了截图供您参考。

     

后续步骤

     

请在连接到IPv6网络时在设备上运行您的应用   (所有应用程序必须支持IPv6)识别问题,然后修改和   重新提交您的应用以供审核。

     

如果我们误解了您应用的预期行为,请回复   此消息在解决方案中心提供有关这些消息的信息   功能旨在发挥作用。

     

对于新应用,请从a卸载所有以前版本的应用   设备,然后安装并按照步骤重现问题。   对于更新,请将新版本安装为上一版本的更新   版本,然后按照步骤重现问题。

     

资源

     

有关支持IPv6网络的信息,请参阅   支持IPv6 DNS64 / NAT64网络和关于网络

     

如果您无法复制报告的问题,请尝试   测试技术Q& A QA1764:如何操作中描述的工作流程   重现针对App Store提交的错误报告。

我已经设置了两个IPv6网络,其中一个在时间舱中,另一个在我的MacBook Pro上共享。来自Time Capsule的网络(完全是IPv6的网络),该应用程序正常运行。从MacBook Pro共享网络我收到两个结果...当设备连接到这个IPv6网络并且只配置DNS时,应用程序可以工作,但是当它收到DNS和一个格式为169.254.XX的IP时,应用程序崩溃了连接到服务器。

问题是$ http请求答案是错误方面而不是成功方面。我尝试过Ionic $ http和cordova-http插件(https://github.com/Switch168/cordova-HTTP#110),结果是一样的。我不知道发生了什么,因为我有一个使用AngularJS的Cordova(只有Cordova,而不是Ionic)项目,它并没有失败。那么,Ionic $ http和AngularJS $ http之间的区别是什么?我无法理解其中的区别。

请参阅this image here

$ 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;

}

1 个答案:

答案 0 :(得分:4)

考虑到你发布这几个月后,我希望你已经解决了这个问题。我正在回答这个问题,就像我在搜索解决方案时所做的那样。

此问题主要是由于服务器中的问题引起的。重要的是,您的应用程序需要在ipv6上工作,Apple才能批准您的应用程序。 (见第一条评论)有一个​​方便的工具,帮助我找出是否是这种情况。

http://ipv6-test.com/validate.php

如果出现问题,解决方法如下:

  1. 将IPv6地址添加到您的网络服务器。
  2. 为您的网站添加AAAA记录。
  3. 为您的裸域添加AAAA记录。
  4. 确保您的DNS服务器具有IPv6地址。
  5. 如有必要,请为您的域名服务器添加IPv6粘合剂。
  6. 为接收邮件服务器添加IPv6地址。
  7. 为邮件服务器的IPv6地址添加反向DNS。
  8. 检查您的SPF记录。
  9. 如果您不熟悉上述任何步骤,请查看this link.