ios – 向应用程序发送静默推送通知,更新位置并在后台发送到服务器

ios – 向应用程序发送静默推送通知,更新位置并在后台发送到服务器,第1张

概述我想向后台的应用程序发送静默推送通知,然后获取当前用户位置并将其发送到Web服务. 我实现了推送通知方法以及这两个方法: - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ 我想向后台的应用程序发送静默推送通知,然后获取当前用户位置并将其发送到Web服务.

我实现了推送通知方法以及这两个方法:

- (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 – 向应用程序发送静默推送通知,更新位置并在后台发送到服务器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1028277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存