1

在我的应用程序中,我打算使用本地通知而不是推送通知。我需要检查交易更新是否可用,如果是,只需使用本地通知通知用户。我已经完成了以下步骤。

  1. didFinishLaunchingWithOptions中,设置获取间隔[[UIApplication sharedApplication]setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]
  2. -(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

> 为 POST 请求添加了如下代码以及我的请求数据:

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

if(conn) {
    completionHandler(UIBackgroundFetchResultNewData);
}
 else {
    completionHandler(UIBackgroundFetchResultFailed);
}
  1. 响应解析后,比较是否有任何更新以及是否有任何更新,使用以下代码显示通知。

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

问题是大多数时候,当手机被锁定时,收到错误消息 >Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."

因此没有显示通知。但是当我将电话直接连接到电话并在调试模式下启用后台同步时,一切正常。

请指导我一个简单的方法来做到这一点,或者如果我做错了什么,请纠正我。

谢谢,

移动开发者。

4

3 回答 3

3

这部分代码

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];

if(conn) {
    completionHandler(UIBackgroundFetchResultNewData);
}
else {
    completionHandler(UIBackgroundFetchResultFailed);
}

就是说,为我创建一个连接以获取一些数据,并且无论创建此实例发生什么都完成后台处理。因此,iOS 会按照您的要求执行并停止应用程序。

如果无法创建连接,则完成失败,当然。但是,如果创建了连接,则在您有响应(数据或错误)要处理之前,您不应该调用完成...

于 2016-06-03T06:38:54.387 回答
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);

}
于 2016-06-03T08:46:03.180 回答
0

使用完成处理程序尝试 POST 请求。

于 2016-06-03T06:44:24.273 回答