如何允许客户端在不更改应用代码的情况下更改 iOS 应用中的 API 基本 URL?

Posted

技术标签:

【中文标题】如何允许客户端在不更改应用代码的情况下更改 iOS 应用中的 API 基本 URL?【英文标题】:How to allow client to change their API base URL in iOS app without changing the app code? 【发布时间】:2014-10-12 22:05:30 【问题描述】:

我正在为与客户端 API 集成的客户端开发 ios 应用程序,我在用于与 API 交互的单例对象中定义 API 基本 URL。

#define kAPIBaseURL @"https://myAPIURL.com/api/"

客户希望自己更改 API Base URL,而不是让我每次都更改应用代码中的 URL。

我通过试飞将构建分发给客户或向他们发送 IPA 文件,而不是代码库。

最好的方法是什么?谢谢。

【问题讨论】:

【参考方案1】:

实际上,最好的方法是使用 parse 之类的东西并从那里提取 API url。然后他们可以通过解析控制台即时更新它。

【讨论】:

为什么有人反对我。这超出了一个有效的答案。事实上,我已经在生产应用程序中使用了这种技术。 Parse SDK 将为您缓存和处理更新/同步 URL。如果您不相信这是有效的或“好”的方法,那您一定是在开玩笑吧。【参考方案2】:

解决方案 1:

在 NSUserdefaults 中创建一个键(“kAPIBaseURL”)并将其值设置为默认 APIURL。 NSUserdefaults 的优点是它甚至可以在应用程序更新时持续存在(直到应用程序被删除)。不要忘记在 NSUserdefaults 中写完之后立即调用 NSUserdefaults 同步! 在您的委托中,每次应用程序使用选项完成启动(较少)或当应用程序确实激活时(较多),向您自己的 Web 服务发送一个请求,该请求包含当前最新的 API 基本 URL 为您的应用返回最新的 API Base URL。 比较 NSUserdefaults 中 kAPIBaseURL 的现有值,如果不同则更新它。

如果您不想使用 web 服务,只需将 .json 文件存储在包含基本 url 的 ftp 上的某个位置,然后直接对该文件发出请求。客户需要访问该 ftp 才能更新文件。

JSON 文件内容示例:

"baseURL":"http://www.mybaseurl.com/"

方案二(不推荐):

建立一个中间人:将 kAPIBaseURL 设置为一个 url,唯一的工作就是向真实服务器进行重定向(可能是 htaccess)。 实施起来更快,但它会使来自应用的每个请求都变慢。

【讨论】:

如果客户端在应用启动后更改了API基础URL怎么办?该应用仍将使用旧的 API 基本 URL。 应用程序将使用旧的 API 库,直到应用程序重新启动(如果您将代码放在 appdidfinishlaunching 中)或直到应用程序再次进入前台(对于 appdidbecomeactive)。如果您想要实时解决方案,您需要使用实时事件(利用 websockets,请参阅 socketIO),但这会被严重过度设计。其他解决方案是通过远程推送通知发送新的基本 URL(您可以在警报有效负载中发送您想要的任何数据并从应用程序委托解释它)。 就像我说的,问一个正确的问题。而不是等待不同的答案,然后每次添加额外的信息,然后使答案不正确。 @Fogmeister 我不确定你在读什么......但他/她确实从一开始就问了一个非常有效且不言自明的问题......这并不难解释他/她的需求是什么。 哪里说他们需要通过then网络分发新的url?它在哪里说为用户提供更新的变量是无效的?你把一件很简单的事情过度复杂化了。【参考方案3】:

使用 DNS 服务器

使用域名而不是 IP 地址。

并使用http://domainname.com/api等域名构建应用程序

如果您要更改 IP 地址,它将自动从 DNS 服务器重定向。

【讨论】:

以上是关于如何允许客户端在不更改应用代码的情况下更改 iOS 应用中的 API 基本 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改字体本身的情况下更改 uilabel 的字体大小?

如何在不更改 Xcode 版本的情况下知道 iOS 5 应用程序是不是可以在 iOS 6 上运行?

如何在不更改文化的情况下更改 c# winform 应用程序的资源文件?

如何在不更改声音指示器的情况下在 iOS 中以最大音量播放声音文件

iOS 9:如何在不显示系统条形音箱弹出窗口的情况下以编程方式更改音量?

在不更改 IOS 7 的情况下更新现有应用程序