我正在开发一个 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/:

  1. 所有请求至http://masterurl.com/ 被代理到 http://someotherurl.com/.

  2. 在将来的某个时候,您需要替换http://someotherurl.com/http://snazzynewurl.com/.

  3. 现在你可以改变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是什么?您指定一个域名,该重新指引你喜欢的地方......你之前域成立,但得到的东西设置现在,重新直接你喜欢的地方它不是在调试太大的帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top