我实现了推送通知方法以及这两个方法:
- (voID)application:(UIApplication *)application performFetchWithCompletionHandler:(voID (^)(UIBackgroundFetchResult))completionHandler{ NSDate *fetchStart = [NSDate date]; [self sendLocationToServerWithCompletionHandler:^(UIBackgroundFetchResult result) { completionHandler(result); NSDate *fetchEnd = [NSDate date]; NSTimeInterval timeElapsed = [fetchEnd timeIntervalSinceDate:fetchStart]; NSLog(@"Background Fetch Duration: %f seconds",timeElapsed); }];}- (voID)application:(UIApplication *)application dIDReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(voID (^)(UIBackgroundFetchResult))completionHandler{}
我还创建了一个将位置发送到服务器的方法:
- (voID)sendLocationToServerWithCompletionHandler:(voID (^)(UIBackgroundFetchResult))completionHandler{ NSDictionary *params = @{ @"UserID" : self.userID,@"Latitude" : self.latitude,@"Longitude" : self.longitude } ServerManager *manager = [ServerManager sharedManager]; [manager sendLocationToServerWithCompletion:^(BOol success) { if (success) { completionHandler(UIBackgroundFetchResultNewData); } else { completionHandler(UIBackgroundFetchResultFailed); } }];}
我只是无法理解它们如何一起工作,Apple会批准它,它是否可能以及位置背景获取的位置.
提前致谢.
解决方法 这里有一个简要的草图,说明你可以做些什么来给你一个想法.假设有一个模型类实现为单例,并且有一些伪代码.// App delegate- (voID)application:(UIApplication *)application dIDReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(voID (^)(UIBackgroundFetchResult))completionHandler{ completionHandler(UIBackgroundFetchResultNewData); [[YourModel singleton] pushNotificationReceived: userInfo];}// Model- (voID) pushNotificationReceived:(NSDictionary *) userInfo{ [self registerBackgroundTaskHandler]; get the location here,or start getting the location [self sendLocationToServerWithCompletionHandler: your completion handler];}- (voID) registerBackgroundTaskHandler{ __block UIApplication *app = [UIApplication sharedApplication]; self.backgroundTaskID = [app beginBackgroundTaskWithExpirationHandler:^{ DDLogInfo(@"BACKGROUND Background task expiration handler called"); [app endBackgroundTask:self.backgroundTaskID]; self.backgroundTaskID = 0; }];}- (voID) endBackgroundTask{ if (self.backgroundTaskID) { UIApplication *app = [UIApplication sharedApplication]; [app endBackgroundTask:self.backgroundTaskID]; self.backgroundTaskID = 0; }}
在发送之前,您需要获取该位置.如果您只是获得一个位置并且您正在使用iOS9,那么您可以使用CLLocationManager:requestLocation:并且您可以相对轻松地将其放入我所说的“在此处获取位置”的位置.
如果您没有使用iOS 9(requestLocation是iOS 9的新功能),它会更复杂一些.
如何使用位置管理器本身就是一个主题,而且要在此处发布太多代码.在合并之前,您需要阅读并研究有关使用位置管理器的所有信息.
如果您需要一个位置更新流,它会变得更加复杂,并且它所说的“或者开始获取位置”涉及的内容更多,然后隐含在伪代码中.
我的建议,从iOS9开始并获取该位置的一个实例,然后当它工作时,如果需要,添加更多功能或iOS8支持.
总结以上是内存溢出为你收集整理的ios – 向应用程序发送静默推送通知,更新位置并在后台发送到服务器全部内容,希望文章能够帮你解决ios – 向应用程序发送静默推送通知,更新位置并在后台发送到服务器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)