Delphi iOS IPv6 App Store拒绝

时间:2016-08-24 03:47:31

标签: ios delphi ipv6 delphi-10-seattle

我们正在使用RAD Studio 10.0 Seattle来构建一个通过Web服务获取数据的iOS应用程序。由于Apple要求所有应用程序从2016年6月1日起支持IPv6,因此我们的应用更新已被拒绝。

我们正在使用 WSDL Importer 在RAD Studio中创建Web服务类,然后调用Web服务。当应用程序连接到IPv6网络时,它会抛出Socket Error #51 Network is unreachable...

有谁知道我们如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

尝试使用此功能:

function GetHost(Host: String): Boolean;
begin
  result := '';
  try
    GStack.ResolveHost(Host, TIdIPVersion.Id_IPv6);
    result := '[' + Host + ']';
  except
    GStack.ResolveHost(Host, TIdIPVersion.Id_IPv4);
    result := Host;
  end;
end;
使用“IdStack”和“IdGlobal”中

添加

您必须通过您的主机(例如www.google.com)并且func会返回包含或不包含'['的结果。

现在,你必须使用它......'http://'+ getHost('www.google.com')

如果你在IPV6网络中,最后的字符串将是(http://[www.google.com]

答案 1 :(得分:0)

使用上一个答案,我想出了这个适用于我的代码。我可以输入完整的soap URL并返回IPV6 URL的正确IPV4。在使用部分中包含“idURI”。

class function TPortalTools.GetRealUrl(Url: string): string;
var
  IdURI: TIdURI;
begin
  TIdStack.IncUsage;
  IdURI := TIdURI.Create(Url);
  try
    try
      GStack.ResolveHost(IdURI.Host, TIdIPVersion.Id_IPv6);
      IdURI.IPVersion := TIdIPVersion.Id_IPv6;
    except
      IdURI.IPVersion := TIdIPVersion.Id_IPv4; // Just in case.
    end;

    // Put it back together.
    Result := IdURI.GetFullURI([]);
  finally
    FreeAndNil(IdURI);
    TIdStack.DecUsage;
  end;
end;