更改服务器而不重新编译iPhone应用程序,如何?
-
22-07-2019 - |
题
我正在开发一个 iPhone 应用程序,在该应用程序中,我从当前位于 LAN 本地服务器上的 Web 服务获取数据。
现在我正在获取位于本地服务器上的数据,其 url 如下所示:
http:\192.168.0.150\service\service.asmx\dataFetchingMethod
但将来如果我的网址发生变化,即服务器如下所示:
http:\www.anotherDomain.com\service\service.asmx\dataFetchingMethod
和
http:\www.anotherURL.com\service\service.asmx\dataFetchingMethod
那么我如何动态地改变它呢?
目前我已经在应用程序中硬编码了 url。
解决方案
为此制定了应用程序首选项:
- (BOOL) getDataFromWebserver
{
NSString *url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"];
if(url == nil)
{
[self setDefaultPrefs];
url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"];
}
[self fetchData:url];//to implement
}
- (void)setDefaultPrefs
{
NSDictionary *appPrefs = [NSDictionary dictionaryWithObjectsAndKeys:
@"hardCodedUrl", @"dataUrl", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:appPrefs];
[[NSUserDefaults standardUserDefaults] synchronize];
}
其他提示
您应该写一个类,从文件中读取属性(例如是plist)。
每当应用程序运行这样的话,它会从plist中读取配置,并以指定的服务URL呼叫。这可以在不重新编译该应用被改变。
您将需要连接到某种从不更改或很少更改的资源。我看到了几种不同的方法。
代理方法
您可以设置一个主服务器(http://masterurl.com/)将您的请求代理到另一台服务器。这里的想法是主服务器永远不会改变,但它代理的机器可以随时改变。例如:
假设您的 iPhone 应用程序连接到 http://masterurl.com/:
所有请求至http://masterurl.com/ 被代理到 http://someotherurl.com/.
在将来的某个时候,您需要替换http://someotherurl.com/ 和 http://snazzynewurl.com/.
现在你可以改变http://masterurl.com/ 代理到 http://snazzynewurl.com/.
对于您的应用程序的用户来说,没有任何变化,您不必更新您的应用程序并重新提交以供审核。
定位文件方式
您可以从文件(例如 txt 或 xml 文件)获取位置。
假设你的文件位于 http://someurl.com/location.txt 并且内容很简单:
inside location.txt:
http://someotherbaseurl.com/
然后,您的应用程序将读取此文本文件并使用 http://someotherbaseurl.com/ 作为应用程序其余部分的基本 URL。现在,如果您需要更改 URL,只需更新文本文件即可。
如果您采用位置文件方法,我建议您使用 Amazon S3 或 Rackspace Cloud Files 托管该文件,以便可以通过其内容交付网络上的 URL 访问该文本文件。
我确信还有其他方法可以解决这个问题。无论哪种方式,您都需要一个永远不会或很少更改的主 URL。否则,您将遇到必须重新编译并重新提交应用程序的情况。
这不是什么DNS是什么?您指定一个域名,该重新指引你喜欢的地方......你之前域成立,但得到的东西设置现在,重新直接你喜欢的地方它不是在调试太大的帮助。