gpt4 book ai didi

ios - 如何发送请求以进行 API 调用,直到 bool 值为真

转载 作者:行者123 更新时间:2023-11-29 03:14:27 30 4
gpt4 key购买 nike

我是 iOS 和后端开发的新手,所以请原谅我缺乏技术知识。对于可能令人困惑的标题,我深表歉意,但这是我的问题:

我正在尝试创建一个 iOS 应用程序,允许用户在用户选择的类(class)状态为打开时接收推送通知。

检查所选类(class)状态是否为 OPEN 的方法是从我学校的 API 发出 GET 请求,然后对 JSON 响应进行一些解析以提取类(class)状态。

那么我如何不断地执行此 GET 请求以检查所选类(class)的状态,并在类(class)打开时向用户发送推送通知?

如果有人能指出我研究的具体方向,那就太好了,谢谢。

最佳答案

推送通知应该来自某处的服务器。我认为如果您希望该应用程序完成工作,您正在寻找的是带有本地通知的民意调查。这样做的缺点是应用程序必须运行才能进行轮询。我推荐看this WWDC Session了解更多关于它是如何工作的。要开始执行轮询的请求,您需要执行以下操作:

在你的界面中:

@property (nonatomic, retain) NSTimer *timer;

在实现中:

-(void)someMethodSomewhere
{
// Create a timer and automatically start it.
self.timer = [NSTimer scheduledTimerWithTimeInterval:10.0f // some number of seconds
target:self
selector:@selector(checkStatus)
userInfo:nil
repeats:YES];

}

-(void)checkStatus
{
// Perform request, check course status

if (/* course status is open */)
{
UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.alertBody = @"The course is now open";
notification.fireDate = [NSDate date];
[[UIApplication sharedApplication]presentLocalNotificationNow:notification];

// Stop the timer
[self.timer invalidate];
}
}

编辑

要使其在后台运行,您可能应该阅读 this document .结果是您需要覆盖 AppDelegate 上的 application:performFetchWithCompletionHandler: 选择器,然后从那里调用上面的 checkStatus 方法。但是,您无法控制调用它的频率。这是操作系统的工作,在某种程度上也是用户的偏好。在处理结束时,一定要调用完成处理程序。

您还必须设置一个最小的抓取间隔。在您应用的 application:didFinishLaunchingWithOptions: 中,您需要添加如下内容:

-(BOOL)application:(UIApplication*)app didFinishLaunchingWithOptions:
{
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}

假设上面的代码也在 AppDelegate 中:

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
{
[self checkStatus];
completionHandler(UIBackgroundFetchResultNewData);
}

您还必须在应用的 Info.plist 文件中设置一个属性。您需要使用 fetch 值添加键 UIBackgroundModes

关于ios - 如何发送请求以进行 API 调用,直到 bool 值为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21839218/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com