在我的应用中,我计划使用本地通知而不是推送通知。我需要检查事务更新是否可用,如果是,则只需通过本地通知通知用户。我已完成以下步骤。
didFinishLaunchingWithOptions
中,设置抓取间隔[[UIApplication sharedApplication]setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]
。-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
>使用我的请求数据添加了POST请求的代码,如下所示:
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
if(conn) {
completionHandler(UIBackgroundFetchResultNewData);
}
else {
completionHandler(UIBackgroundFetchResultFailed);
}
在响应解析后,比较是否存在任何更新,如果有更新,则使用以下代码显示通知。
UILocalNotification* localNotification = [[UILocalNotification alloc] init]; localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.alertTitle = @"SIB Mirror";
localNotification.alertBody = @"You have a new transaction. Go to e-Statements to view it.";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
问题是大多数时候,当手机被锁定时,会收到错误消息 >错误域= NSURLErrorDomain代码= -1005“网络连接丢失。”
因此没有显示通知。但是当我将Phone直接连接到Phone并在调试模式下启用后台同步时,每件事都能正常工作。
请指导我一个简单的方法来做这件事或纠正我,如果我做错了什么。
谢谢,
移动开发者。
答案 0 :(得分:3)
这部分代码
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
if(conn) {
completionHandler(UIBackgroundFetchResultNewData);
}
else {
completionHandler(UIBackgroundFetchResultFailed);
}
说,创建一个连接来获取一些数据,无论创建这个实例发生什么,都要完成后台处理。所以iOS会按照您的要求执行并停止应用。
如果无法创建连接,则确定失败。但是,如果连接已创建,则在您有响应(数据或错误)要处理...
之前,不应该调用完成答案 1 :(得分:1)
请尝试以下代码:
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if (error == nil)
{
// Parse data here
completionHandler(UIBackgroundFetchResultNewData);
}
else {
completionHandler(UIBackgroundFetchResultFailed);
}
答案 2 :(得分:0)
尝试使用完成处理程序的POST请求。