Delphi iOS IPv6 App Store拒绝
问题描述:
我们使用RAD Studio 10.0 Seattle来构建一个通过Web服务获取数据的iOS应用程序。由于苹果要求所有应用程序从2016年6月1日起支持IPv6,因此我们的应用更新已被拒绝。Delphi iOS IPv6 App Store拒绝
我们使用WSDL导入程序在RAD Studio中创建Web服务类,然后调用Web服务。当应用程序连接到IPv6网络时,会抛出一个Socket Error #51 Network is unreachable...
。
有谁知道我们如何解决这个问题?
答
尝试使用本功能:
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])
答
使用以前的答案,我想出了这个代码,这对我很有用。我可以输入完整的肥皂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;
没有XE10。你在使用10.0西雅图还是10.1柏林?无论如何,您应该联系Embarcadero寻求帮助,他们可能需要提供IPv6支持的修复。否则,您可能不得不停止使用他们的WebService框架并从头开始编写自己的WebService,例如使用支持IPv6的Indy的“TIdHTTPServer”。 –
@Remy我甚至不得不纠正QuickReports的作者,因为他们已经在全国各地广泛使用“XE10”发布了他们的最新版本。另外,据我们所知,10.1柏林可能已经引入了一个不在10.0西雅图的补丁。 –
感谢@RemyLebeau的更正。我正在使用10.0西雅图。我们将尝试联系Embarcadero,看看他们是否有解决办法。 – Cheez