【问题标题】:Change server without recompiling iPhone application, how?在不重新编译 iPhone 应用程序的情况下更改服务器,如何?
【发布时间】:2019-06-04 20:41:40
【问题描述】:

我正在开发一个 iPhone 应用程序,我在该应用程序中从当前位于 LAN 中的本地服务器上的 Web 服务获取数据。

现在我正在使用以下网址获取位于本地服务器上的数据:

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 进行了硬编码。

【问题讨论】:

    标签: iphone dynamic-data


    【解决方案1】:

    为此制定了应用偏好:

    - (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];        
    }
    

    Read more

    【讨论】:

      【解决方案2】:

      您应该编写一个从文件(例如 plist)中读取属性的类。

      这样,每当应用运行时,它都会从 plist 中读取其配置,并调用指定的服务 URL。无需重新编译应用即可更改此设置。

      【讨论】:

        【解决方案3】:

        您将需要连接到某种永远不会更改或很少更改的资源。我看到了几种不同的方法。


        代理方法

        您可以设置一个主服务器 (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。否则,您将遇到必须重新编译并重新提交应用程序的情况。

        【讨论】:

        • 我认为第二种方法适合我
        【解决方案4】:

        这不正是 DNS 的用途吗?您指定一个域名,将其重定向到您喜欢的位置...在您设置域之前进行调试并没有太大帮助,但现在设置一些内容并重定向到您喜欢的位置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-21
          • 2013-06-17
          • 1970-01-01
          • 1970-01-01
          • 2010-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多