存储您的应用指向外部的 URL,以便随时更改 URL

Posted

技术标签:

【中文标题】存储您的应用指向外部的 URL,以便随时更改 URL【英文标题】:Storing a URL that your app points to externally, so URL be changed anytime 【发布时间】:2013-07-29 09:03:09 【问题描述】:

我的应用程序中有一个 UIImageView - *bannerImageView,它利用了 AFNetworking 方便的 - (void)setImageWithURLRequest:placeholderImage:success:failure: 方法。

为了准备使用此方法,我必须创建一个NSURLRequest 对象,如下所示:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.images.com/image.png"]];


问题:

有没有一种方法可以存储这个 url(我正在考虑在一个文本文件中?) 在线某处,我的应用程序将始终指向以查找要请求的 URL?

原因是由于我正在开发的项目的某些情况,我将来需要相当频繁地更改图像的 URL,并且为此目的而必须推送整个应用程序更新是没有意义的.


附:在我的- (void)viewDidLoad 中,我有一行代码启动networkActivityIndi​​cator - [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;。有没有更好的地方让我插入此代码,而不是在每次视图加载时启动 networkActivityIndi​​cator,并且只在 - (void)setImageWithURLRequest:placeholderImage:success:failure: 的成功块中停止它方法?


感谢您的帮助!

【问题讨论】:

【参考方案1】:

如果我理解正确,则必须为所有用户全局更改徽标。如果是这样,并且如果您在服务器端拥有完全控制权,那么您有两个选择:

使用 php 或任何服务器端语言,创建一个非常小的代理,将通用图像名称透明地映射到适当的资源,这在 ios 端需要很少或不需要代码,而在服务器端则需要更多代码。对于最小代理,我的意思是,您调用一个资源,比如说http://www.yourserver.com/imagelocator.php,它正在后台检索您的图像,然后通过设置适当的标头将其提供给您的客户端。您需要编写几行代码,具体取决于所使用的服务器端语言。 实现 307 重定向,并使用 iOS 进行管理,这在服务器端需要很少的代码,而在 iOS 端需要更多的代码。这与您关于 txt 文件的解决方案类似,但在我看来更优雅。如果你有 apache,你可以创建一个包含所有你需要的规则的 .htaccess 文件。如果您查看 iOS NSURLConnection,您会发现通过解释 HTTP 状态代码,您可以处理重定向。在这种情况下,如果 iOS 请求 http://www.yourserver.com/logo.png,服务器本身会使用新地址 http://www.thenewserver.com/logo.png 进行响应

在这两种情况下,请记住使用正确的过期http头,让iOS不时检查。

顺便说一句,正如我所说,您检查 txt 文件的解决方案是完全有效的。但即使在这种情况下,请记住在此类 http 请求上设置过期标头,可能使用“无缓存”。

【讨论】:

是的,我有一个横幅 (UIImageView),它始终指向指向 retrieveset 其图像的 URL,并且 URL 不时更改。这就是为什么我需要能够从外部访问 URL,而不是将 URL 硬编码到应用程序本身中。目前我对如何实现这一点一无所知,因为我是 iOS 开发的新手。对于我对服务器端编程的无知,我深表歉意,但即使经过一番谷歌搜索,我也不明白“最小代理”或“307 重定向”是什么。我可以使用像 Parse 这样的 BaaS 吗? 添加了一些解释【参考方案2】:

我找到了一种在移动 BaaS(后端即服务)的帮助下实现这一目标的相当简单的方法。我决定使用Parse。

在许多可用的功能中,我使用了数据浏览器,以下是我所做的示例:

    创建了一个名为Advertisement的类 创建了一个名为 AdURL 的字符串列*(以及我需要的与该对象相关的任何信息,例如 AdName 或 AdImage 等及其各自的数据类型)*。 将 URL 值插入到 AdURL 列中。 按回车键,将创建一个新对象(行)。该对象将具有一个唯一的 ObjectID,该 ID 将自动为您生成。 现在,我只需将 Parse SDK 集成到我的项目中,并使用其各自的 ObjectID 查询我在上面创建的任何类的对象/值。

以后,如果我需要更改值(在这种情况下,用户点击 UIButton 时将在 Safari 中打开的 URL),我只需要返回 Parse 的数据浏览器来更改该特定值,并且更改将立即反映出来,因为每次应用需要查找该值时,它都会为该类、对象和指定列的值创建一个新查询。

这是我的应用程序中的查询代码示例:

- (IBAction)bannerBtnTapped:(id)sender

    // Create PFQuery object.
    PFQuery *query = [PFQuery queryWithClassName:@"EXAMPLECLASS"];
    [query getObjectInBackgroundWithId:@"EXAMPLEOBJECTID" block:^(PFObject *object, NSError *error)
     
         // "object" will be the row that is returned according to your specified class and ObjectID. Assigned the returned value to an NSURL var "*url"
         NSURL *url = [NSURL URLWithString:object[@"EXAMPLECOLUMNNAME"]];

         // Open the url in Safari.
         [[UIApplication sharedApplication] openURL:url];
     ];

希望这个简单的解决方案能在未来对某人有所帮助!

【讨论】:

【参考方案3】:

您可以使用苹果的 iCloud 来存储该 URL。 然后,您可以使用 eNSUbiquitousKeyValueStoreDidChangeExternallyNotification 跟踪更改。可以查看apple's documentation

【讨论】:

以上是关于存储您的应用指向外部的 URL,以便随时更改 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 url 是不是指向外部角度应用程序

Laravel 密码重置链接指向旧的 APP_URL

将指向外部 URL 的超文本链接点击重新路由到 Electron 应用程序以外的另一个浏览器

如何检查外部存储空间的可用性?

外部反应组件/模块的路由

Flink:如何在 flink 中处理外部应用配置更改