• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 从静默远程通知加载数据

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:02:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个应用程序,当它通过 -[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] 处于非事件状态时接收静默推送。推送负载包含一个我需要预取的 url,以便在下次应用启动时准备好数据。

下载完成后应用需要调用completionHandler:

The block to execute when the download operation is complete. When calling this block, pass in the fetch result value that best describes the results of your download operation. You must call this handler and should do so as soon as possible. For a list of possible values, see the UIBackgroundFetchResult type.

问题是我是否可以做一个简单的 NSURLSession 请求,或者我是否应该使用后台提取 as described here 之一进行提取

选项1:使用简单的NSURLSession并调用回调

- (void)applicationUIApplication *)application didReceiveRemoteNotificationNSDictionary *)userInfo fetchCompletionHandlervoid (^)(UIBackgroundFetchResult result))completionHandler
{
    NSURL *url = [NSURL URLWithString:userInfo[@"my-data-url"]];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:url] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        // save the result & call the
        completionHandler(data ? UIBackgroundFetchResultNewData : UIBackgroundFetchResultNoData);

    }];
    [task resume];
}

选项 2:使用额外的后台处理来下载内容

- (void)applicationUIApplication *)application didReceiveRemoteNotificationNSDictionary *)userInfo fetchCompletionHandlervoid (^)(UIBackgroundFetchResult result))completionHandler
{
    NSURLSessionDataTask *task;

    __block UIBackgroundTaskIdentifier backgroundId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

        // time's up, cancel the download

        [application endBackgroundTask:backgroundId];
        backgroundId = UIBackgroundTaskInvalid;
        completionHandler(UIBackgroundFetchResultFailed);

        [task cancel];

    }];

    NSURL *url = [NSURL URLWithString:userInfo[@"my-data-url"]];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:url] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        // check if time was up
        if(backgroundId == UIBackgroundTaskInvalid) {
            return;
        }

        [application endBackgroundTask:backgroundId];
        backgroundId = UIBackgroundTaskInvalid;

        // save the result & call the
        completionHandler(data ? UIBackgroundFetchResultNewData : UIBackgroundFetchResultNoData);

    }];
    [task resume];
}



Best Answer-推荐答案


所以回答我自己的问题,经过一些测试,看来 选项 2 工作得很好。我可以使用 UIBackgroundTaskIdentifier 下载我需要的任何数据。如果我不使用它,下载失败

关于ios - 从静默远程通知加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42534582/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap